【Unity】Instantiateしたときの座標
MonoDevelopが激しく主張してくる(ずっと前面にいる)ので再度VisualStudioをエディタにしました。
「Visual Studio Community 2013」入れると「Visual Studio Tools for Unity」も入れられますしね。
デバッグとかまだ使ってませんけども…。
さて今週の話題。小ネタです。
オブジェクトをInstantiateしたときにぶっ飛んだ座標になってしまうことありますよね。
そんなときにオブジェクトを作った時の座標に出したいときのお話です。
たとえばprefabを作った時の座標が「X:140、Y:235、Z:0」のオブジェクトを
「Instantiate(prefab)」として座標についてないもしないと
「X:14233.33、Y:23891.67、Z:0」ってすごい座標になったり・・・。
固定で場所が決まってたりする場合はその座標を指定してあげればいいんですが、
画面上で作った座標にしたい場合は
GameObject obj = Instantiate(prefab) as GameObject; |
大したことないネタしかない!
では今週はこれにて!ノシ
Category: 開発日記(Unity)
« 【Unity】画像サイズがでかくて困ったよ~ ふぇぇぇん って俺はこうしちゃいました。 | 【ネタ切れ】ポケットガール開発頑張ってるんですよ。正月休みとかあるんすかね? »
コメント
質問
初めまして。
こちらの記事拝見しまして、質問させていただきたいと思いました。
>オブジェクトをInstantiateしたときにぶっ飛んだ座標になってしまうことありますよね。
>そんなときにオブジェクトを作った時の座標に出したいときのお話です。
>たとえばprefabを作った時の座標が「X:140、Y:235、Z:0」のオブジェクトを
>「Instantiate(prefab)」として座標についてないもしないと
>「X:14233.33、Y:23891.67、Z:0」ってすごい座標になったり
とありますが、こちらはどのようにすれば、そのような現象が起こりますか?
例えば、プレハブのCubeのTransformで、(10, 0, 0)に設定して保存しておき、
下記コードを実行すると、
var go = Instantiate(Resources.Load("Cube")) as GameObject;
CubeのTransformは、プレハブで設定しておいたままの(10, 0, 0)で配置されます。
また、画面上で作った座標にしたい場合は
obj.transform.localPosition = Camera.main.ScreenToWorldPoint(obj.transform.localPosition);
と対処されていますが、
「固定で場所が決まってたりする場合はその座標を指定してあげればいい」とは、
どのようなことでしょうか?
質問が多くてすみません。
よろしくお願いします。
taka #LtpiTWes | URL | 2017/09/06 00:10 [edit]
Re: 質問
takaさん
コメントありがとうございます。
もう3年前に書いた記事でUnity4を使っていたりしていて、記憶があいまいで覚えてないですが…orz
(実施環境などを書いてなくて申し訳ないです。)
現状Unity5や2017.xではInstaniateの第2引数に「親にしたいTransform」を指定し、第3引数に「false」をしていすればプレハブを作った位置にそのまま作ってくれるようになっていますね。
現在では起こらないことを書いている記事ですかね…。
>「固定で場所が決まってたりする場合はその座標を指定してあげればいい」とは、
>どのようなことでしょうか?
これについては、全く同じコードを付けた別々のプレハブを同じ位置に出したくなくて、その場合は固定の数字で場所を指定できないなぁっと思って書いたのだと思います。
今思えばやりようはいくらでもあったのかもしれませんが…。
回答になっているか微妙なところですが、こんな感じで考えて当時は書いていたのだと思います。
株式会社ハルシオンシステム #- | URL | 2017/09/06 10:46 [edit]
ご回答ありがとうございます。
なるほど、第3引数に「false」を指定すれば大丈夫なのですね。
ありがとうございます。
理解できました。
| h o m e |