以前このような記事を書きました。
今回は決められた画像や背景の上でのみ移動できるよう制限してみます。
手っ取り早い実装方法
//移動速度 private float moveSpeed = 4f; //回転 private readonly float rotateSpeed = 150f; private Vector3 rotasionVector = new Vector3(0, 0, 1); //移動制限処理用変数 private Vector2 playerPos; private float playerPosXClamp = 3.0f; private float playerPosYClamp = 3.0f; //親オブジェクトのSpriteRenderer private SpriteRenderer parent; private void Start() { /*移動できる範囲を設定する*/ this.SetClamp(); } /*確認用にプレイヤーが前に進む処理と回転する処理を記述*/ private void Update() { ////前進処理 transform.Translate(Vector3.up * this.moveSpeed * Time.deltaTime); // 移動制限処理 this.MovingRestrictions(); //回転処理 if (Input.GetKey(KeyCode.LeftArrow)) transform.Rotate(rotasionVector * this.rotateSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.RightArrow))/// rotateSpeedに-を付けて逆回転 transform.Rotate(rotasionVector * -this.rotateSpeed * Time.deltaTime); } /*移動できる範囲を設定する*/ private void SetClamp() { //親のSpriteRendererコンポーネントを取得 this.parent = gameObject.transform.parent.gameObject.GetComponent<SpriteRenderer>(); //float型の変数に親の画像の端の位置を設定 playerPosXClamp = this.parent.sprite.bounds.extents.x; playerPosYClamp = this.parent.sprite.bounds.extents.y; } /*移動制限*/ private void MovingRestrictions() { //変数に自分の今の位置を入れる ※PositionではなくlocalPositionなので注意 this.playerPos = transform.localPosition; //playerPos変数のxとyに制限した値を入れる //playerPos.xという値を-playerPosXClamp~playerPosXClampの間に収める this.playerPos.x = Mathf.Clamp(this.playerPos.x, -this.playerPosXClamp, this.playerPosXClamp); this.playerPos.y = Mathf.Clamp(this.playerPos.y, -this.playerPosYClamp, this.playerPosYClamp); //※PositionではなくlocalPositionなので注意 transform.localPosition = new Vector2(this.playerPos.x, this.playerPos.y); }
背景の上でのみ移動できるようになっていますね。