Unityで画面外の位置を取得する方法についてメモ。
画面外の位置を取得してインスタンスを生成
例えば私は、スマホゲームで画面外の見えない位置にオブジェクト(敵)を出現させようとしました。ただ、この状況で出現させる位置を絶対配置にしてしまうと、デバイスごとに画面サイズが違うスマートフォンではズレが発生します。
この問題を解決するにはスマホ画面の位置をワールド座標に変換して、その位置にオブジェクトを生成するようにします。ワールド座標とは、シーンビューでオブジェクトを配置するときの位置です。
実際のコードは以下のようになります。(C#です)
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour {
public GameObject enemy01;
void Start () {
Vector3 enemyPosition = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, Camera.main.nearClipPlane));
enemyPosition.z = 0;
Instantiate (enemy01, enemyPosition, Quaternion.identity);
}
}
敵オブジェクトをプレハブ化し、それをインスペクターからメンバ変数にセットしておきます。そのプレハブを画面の右上に生成しています。
9行目の「1, 1」とある部分がそれぞれx座標、y座標になっているので、画面外を取得したい場合はマイナス値を設定しましょう。例えばこんな感じです。
Vector3 enemyPosition = Camera.main.ViewportToWorldPoint(new Vector3(-0.1f, -0.1f, Camera.main.nearClipPlane));
生成するインスタンスのスプライトサイズに合わせて数値を調整しましょう。