検索に出てこない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のほうが高性能ぽい書き方してるようにも見えるけど、英語なのでわからない
くそが!!!