[Unity]画面外の位置を取得してインスタンスを生成させる

  • 更新日:
  • 公開日:

Unityで画面外の位置を取得する方法についてメモ。

画面外の位置を取得してインスタンスを生成

例えば私は、スマホゲームで画面外の見えない位置にオブジェクト(敵)を出現させようとしました。ただ、この状況で出現させる位置を絶対配置にしてしまうと、デバイスごとに画面サイズが違うスマートフォンではズレが発生します。

この問題を解決するにはスマホ画面の位置をワールド座標に変換して、その位置にオブジェクトを生成するようにします。ワールド座標とは、シーンビューでオブジェクトを配置するときの位置です。

unity-offscreen-position
白枠線がカメラの描画領域です

実際のコードは以下のようになります。(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));

生成するインスタンスのスプライトサイズに合わせて数値を調整しましょう。

参考:  Unity – Scripting API: Camera.ViewportToWorldPoint

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone