【ハルシオンブログ】UnityにてInstantiateしたあとにSetParentしたらサイズがでかいんすけど?え?こうすればいいんじゃない?って話
こんにちは!
もう来週TGSじゃないですか、やだー
遠いな・・・・楽しみだけど。
さて、Unityのちょっとしたネタ。
PrefabをInstantiate化した後に、SetParentをするとサイズがぶっ飛ぶお話し。
これ以前にも一度したことがあるんですが、ちょっと気になったTLがあったので書いてみます。

さて、実験してみましょ。
groupオブジェクトは空のGameObject。

redオブジェクトと、blueオブジェクトはそれぞれPrefabにしておきます。
Canvasオブジェクトに、以下のコンポーネントを付けます。
[Test.cs]

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

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

赤いオブジェクトの方が大きいまま、青いオブジェクトが小さい(想定サイズ)になります。
違いは、青いオブジェクトのSetParentの第2引数に「false」を入れています。

公式ドキュメントにも書かれていますが、第2引数がtrue(何も書かないとき)は「オブジェクトが以前と同じワールド空間位置、回転、およびスケールを維持」
ということで、falseを入れてあげることでプレハブのサイズ等を反映する感じになるっぽいっす。
ただし、以前ハルシオンブログで書かれているこちら
http://halcyonsystemblog.blog.fc2.com/blog-entry-330.html
こっちの方が楽なので、こっちでいいんじゃないかと。

ということで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)
« 【ハルシオンブログ】シーンにあるオブジェクトを別シーンに移すのに一回プレハブにして移すときは気をつけようねって話 | 【ハルシオンブログ】いろんなシーンのクラスからアクセスが必要な時にやってること。 »
コメント
| h o m e |