top of page

検索に出てこないTransform型

  • BTA(Kelorin Jo)
  • 2019年12月24日
  • 読了時間: 2分

更新日:2021年4月13日


Unity C#プログラムで変数の型、GameObject型はド基本中の基本ですが、

Transform型というものがあって。

座標とかを記録するほうのtransformとは別もの…いや、transformと同じはずなんだけど、使い方が思ってたのと違うっつーか、

GameObject型とほぼ同性能だけどなにか違うみたいな変数があるのですね。


追記:全て理解したあとになってからわかった仕様を書くと、

・位置、回転、スケールの3種の変数の詰め合わせセット…という認識で触ったらぜんぜん違った

・シーン上にある実体のあるゲームオブジェクトと完全にひもつけられてて、いじるとオブジェクトの座標が即座に変わってしまう

・トランスフォームの数値をまとめて参照したいなら、Transform型で取得することはできなくて、

位置(Vector3)、回転(Quotanion)、スケール(Vector3)の変数ごとにバラで取得しないといけない3度手間になってしまうが、それしか方法がない。

・長年クラス?構造体なにそれ?だったのがこのトランスフォームとVector3の違いで、やっと理解できた。


自分でいっててもわからないから検索も曖昧になるのもあって、座標の方のtransformの記事のほうが圧倒的に大量に出てくるから、正確な情報がさっぱり出てこない、

じゃーなんで知ったのか&どこで使うのかというと

この記事の下の方

選択したオブジェクトが含む子オブジェクト(複数)を取得するコード

GetComponentsInChildrenがGameObject[]で使えないのでTransformでしのぐ、というのが数少ない明確な使い所です。

Transform[] tr = this.transform.GetComponentsInChildren<Transform>();

機能と使い勝手はGameObjectとどこが違うのかわからんレベルで一緒だけど

GameObjectと型が違うので、GameObject型変数と混ぜては使えない、

GameObject型変数で使えてTransform型変数では使えないコードもたぷんあり、

トラブルがあっても役立つ記事が見つけられないと、とっても不安な型です。

(処理速度とか隠れた有用性はあるのかもしれないけど)

だから緊急時以外はGameObjectに置き換えるべきかと思いますが、どうやって変換するのか…?

英語の記事でもかろうじて見つかったのが

You can always get the Transform from a GameObject by using

myGameObject.transform

You can also always get the GameObject from a Transform by using

myTransform.gameObject

例えば変数CTがTransform型だったとして、

GameObject Object = CT.gameObject; とやれば変換できました。

.GameObjectとうち間違えてずっと悩みますが、.gameObjectです。頭が大文字と小文字で違う…これまた初心者には壁なやつ。

GameObjectよりTransformのほうが高性能ぽい書き方してるようにも見えるけど、英語なのでわからない

くそが!!!

© 2016 BTA(Kelorin Jo)- Wix.com で作成されたホームページです。

bottom of page