World座標とScreen座標について、テキストファイルをUnity上で読み込む方法について解説[Unity]

Unity

ゲーム世界の位置とは

ゲームの位置情報って座標で特定するため結構ややこしいです。
まずはどういうものなのかイメージを少しでも明確にしていきましょう。

ゲームの中での位置情報は以下の2つ存在しています。
・World座標
・Screen座標

それぞれ以下で説明していきます。

World座標について

World座標は現実世界の座標と同じようなイメージです。

ゲームの世界も現実世界と同様、座標情報をもっています。
これを使って、どこに何があるか把握しているのです。

こちらはイメージ的には現実世界とさほど変わらないので、分かりやすいと思います。

Screen座標について

Screen座標はカメラの中の座標です。
カメラの真ん中に何が映っているか、カメラの右上に何が映っているか確認する場合はこの座標で特定します。

ちょっと具体例

ちょっと具体例を出してみましょう。
以下の画像は中央に東京タワーがあります。

東京タワーのScreen座標はそのままでこの画像の中央の位置情報になります。
例えば左端から5センチ、下端から3センチのとこに東京タワーがある、という風な感じです。

ではWorld座標はどうでしょうか。
これは現実世界に置き換えると経度と緯度です。
つまりカメラからの見え方に関係ない普遍的な位置情報です。

以上がWorld座標とScreen座標の違いです。
ちょっとはイメージできたでしょうか。

Cameraから位置情報を取得する

unityで新規プロジェクトを作成すると最初からカメラが一つ作成されます。
基本的にカメラは一つで十分ですが、複数作成することもできるみたいです。

複数カメラはちょっと応用的なのでここでは省略します。

カメラのInspectorウィンドは以下のようになっています。

赤枠で囲った部分の「Main Camera」にチェックがついていますね。
これは意図的につけたのではなく最初からチェックがついています。

また初期状態ではカメラの位置は(x,y,z) = (0,0, -10)の位置にあります。

C#Script上でこのMain Cameraを操作する場合、以下のように記述します。

Camera.main.~

また、Screenの幅(x) と高さ(y)を取得したい場合は以下のように記述します。

Screen.width (スクリーンの幅)
Screen.height(スクリーンの高さ)

図で表現すると以下になります。

Cameraの左端から右端までを地面で覆いたい

ここから本題です。
今の段階では地面は(x,y) = (0,0)のWorld座標から作成されてしまいます。

これを画面の端から作成されるようにしたいですよね。

そのためには、まずカメラの左端のWorld座標を取得する必要があります。
これを取得するには以下のように記述します。

Camera.main.ScreenToWorldPoint(new Vector3(x,y))

new Vector3(x,y)のx,yの部分にはScreen座標を指定します。
例えば(x,y) = (0,0)はどこになるかというと画面の左下の端です。
また(x,y) = (Screen.width,Screen.height)と指定すると画面の右上です。

Camera.main.ScreenToWorldPoint(new Vector3(0, 0))
として画面の左下のWorld座標を取得し、そこから地面を作成するようにすれば必要な範囲だけ丁度よく地面が作成できます。

テキストファイルをUnity上で読み込む方法

地面のprefabを配列化する

複数の地面画像を使いたい場合、それぞれのprefabを定義して使用するのもいいのですが、地面のprefabを配列化した方が変数が1こで済むのでスッキリします。

まずC#Scriptで以下のようにGameObjectの配列を作成しましょう。

private GameObject[] jimen;

その後UnityのInspectorウィンドウで配列のサイズとそれぞれの要素を設定できるようになります。

テキストファイルの読み込み方

TextAsset
Resources.Load(“ファイル名”)
を用いて実装できます。

まずTextAssetを使ってテキストファイルを取得できます。
こちらは、「テキストファイル」という型で変数を定義するというイメージでしょうか。

そしてResources.Load(“ファイル名”)でテキストファイルを選びます。
まず対象のファイルはどこに格納すればよいか?ですが、こちらはAssets以下にまず「Resources」というフォルダを作成しなければいけません。


そしてこの「Resources」フォルダの中にファイルを格納します。

上記の場合、Resources.Load(“Level”)でLevelファイルを取得できます。

例えば「Resources」フォルダの中に「Data」フォルダを作成し、その中にLevelファイルを格納した場合、Resources.Load(“Data/Level”)とします。

また、System.Environment.NewLine = 改行 を意味しているそうです。

タイトルとURLをコピーしました