10 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 12

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】UnityにてInstantiateしたあとにSetParentしたらサイズがでかいんすけど?え?こうすればいいんじゃない?って話 

こんにちは!
もう来週TGSじゃないですか、やだー
遠いな・・・・楽しみだけど。

さて、Unityのちょっとしたネタ。

PrefabをInstantiate化した後に、SetParentをするとサイズがぶっ飛ぶお話し。
これ以前にも一度したことがあるんですが、ちょっと気になったTLがあったので書いてみます。


さて、実験してみましょ。

groupオブジェクトは空のGameObject。


redオブジェクトと、blueオブジェクトはそれぞれPrefabにしておきます。

Canvasオブジェクトに、以下のコンポーネントを付けます。

[Test.cs]
using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;

void Start () {
Instantiate(redPref);
Instantiate(bluePref);
}
}



これで実行しても↓こんな感じのサイズになってしまいます。
といってもCanvasの下にないので表示されていませんが。


それでは、親をgroupオブジェクトにしてInstantiateしてみましょう。

using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;
public Transform transformGroup;

void Start() {
GameObject redObj = Instantiate(redPref);
redObj.transform.SetParent(transformGroup);

GameObject blueObj = Instantiate(bluePref);
blueObj.transform.SetParent(transformGroup,false);
}
}




赤いオブジェクトの方が大きいまま、青いオブジェクトが小さい(想定サイズ)になります。

違いは、青いオブジェクトのSetParentの第2引数に「false」を入れています。



公式ドキュメントにも書かれていますが、第2引数がtrue(何も書かないとき)は「オブジェクトが以前と同じワールド空間位置、回転、およびスケールを維持」
ということで、falseを入れてあげることでプレハブのサイズ等を反映する感じになるっぽいっす。

ただし、以前ハルシオンブログで書かれているこちら
http://halcyonsystemblog.blog.fc2.com/blog-entry-330.html

こっちの方が楽なので、こっちでいいんじゃないかと。

using UnityEngine;

public class Test : MonoBehaviour {

public GameObject redPref;
public GameObject bluePref;
public Transform transformGroup;

void Start() {
Instantiate(redPref,transformGroup,false);
Instantiate(bluePref,transformGroup,false);
}
}





ということでInstantiateしてSetParentする流れについてでした。

それではあでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/434-4054c959
この記事にトラックバックする(FC2ブログユーザー)