キャラクターが一定の速度で移動し、画面端で跳ね返るというのを実装。
実際に実装したコードは次の通り。サンプルのuni_0というスプライトなのでクラス名はuniとなっている。
public class uni : MonoBehaviour { public float speed; void Start () { float x = Random.Range(-1.0f, 1.0f); float y = Random.Range(-1.0f, 1.0f); Vector2 velocity = new Vector2(x,y); velocity.Normalize(); velocity *= speed; GetComponent<Rigidbody2D>().velocity = velocity; } void Update () { Vector2 min = Camera.main.ViewportToWorldPoint(Vector2.zero); Vector2 max = Camera.main.ViewportToWorldPoint(Vector2.one); Vector2 position = transform.position; Vector2 velocity = GetComponent<Rigidbody2D>().velocity; float width = GetComponent<SpriteRenderer>().bounds.size.x; float height = GetComponent<SpriteRenderer>().bounds.size.y; if (position.x - width / 2.0f < min.x) { position.x = min.x + width / 2.0f; velocity.x *= -1.0f; } if( position.x + width / 2.0f > max.x) { position.x = max.x - width / 2.0f; velocity.x *= -1.0f; } if (position.y - height / 2.0f < min.y) { position.y = min.y + height / 2.0f; velocity.y *= -1.0f; } if (position.y + height / 2.0f > max.y) { position.y = max.y - height / 2.0f; velocity.y *= -1.0f; } transform.position = position; GetComponent<Rigidbody2D>().velocity = velocity; } }
speedが移動速度。値はInspectorで設定している。
最初コードを書いた時は画面端に来たら速度を反転するだけにしていたが、その場合だと移動速度が速いときに端を抜けてしまったり、端のあたりで数回反転するような挙動が発生してしまったので、座標も画面端にするようにしている。
参考にしたサイト
【Unity2D】Unityで2Dミニゲームを作るチュートリアル(第2回) - Qiita
phina.js tips - 要素を画面からはみ出ないように制御しよう | phiary