Udon#を勉強する会(第8回)コンポーネントのパラメーターを操作する
この記事はUdon#を勉強する会のシリーズの続きです
CubeにC#をセットすることなどは一部操作はすでに終わっている状態ですのでご注意ください
参考動画
コンポーネントとは
ファイルやプログラムの構成要素です
通常はUnity画面で操作、設定しますがそれもC#である程度操作、変更できるようになります
C#でできるようになるとゲーム(VRChat)内でも変更できるようになります
UnityではTransform、BoxCollider、Materialなどがコンポーネントになります
今まではthis.gameObject…なのでC#の付いたゲームオブジェクトを操作できました
今回の操作は他のゲームオブジェクトも操作できるようになります
コンポーネントへのアクセスの注意点
プログラム文から直接コンポーネントへはアクセスできない
transformが例外的にアクセスできる
例文
Classの下に書くこと
[SerializeField] private BoxCollider boxCollider;
//[SerializeField]private 文法として丸覚え、BoxColliderボックスコライダー型の
//boxCooliderという変数名(自由)
今回はVoid Startの下
boxCollider.isTrigger = true;
//BoxColliderのIsTriggerの値をTrue(チェックを入れる)にする
するとスクリプトの下に
BoxCollider(型の名前)とNone(Box Collider)が出てきました
[SerializeField]は参照を貼り付けれるようにする文
None(Box Collider)の所にアクセスしたいゲームオブジェクトをhierarchyからドラッグ&ドロップでゲームオブジェクトを指定します
※Unityでの手作業
C#を付けたゲームオブジェクトとは別のゲームオブジェクトを指定できる
やったことと意味
変数名BoxColliderにゲームオブジェクトを指定(代入)することによって
代入したゲームオブジェクトのBoxColliderにアクセスできるようになった
例文2
アクセスするCubeにRigitBodyコンポーネントをつけること
IsKinematic の項目にチェックが入ってるのを確認すること
インタラクト(触れる)と起動する文
Classの下
[SerializeField] private Rigidbody rigidbody;
Class、VoidStart以外の場所
public override void Interact()
{
rigidbody.isKinematic = false
}
動作
宙に浮いているCubeにインタラクト(触れる)とCubeのRigitBodyコンポーネントの中のIsKinematic が falseになり(チェックが外れる)ので重力の影響を受け始める
例文3 一度に複数のコンポーネントにアクセスしたい
Class直下に
[SerializeField] private GameObject Object1;
[SerializeField] private GameObject Object2;
[SerializeField] private GameObject Object3;
同じ分で変数名を変えてあげると数が増える
Noneの場所にゲームオブジェクトをUnityで指定する
後はVisual Studioでそれぞれのオブジェクトに対するプログラム文を書く
object1.gameObject.transform.Rotate(Vector3.up,10);
以前はthis.から始まっていたが今回は変数の名前(例文の場合はObject1)になる
メモ
Visual Studioの予測変換の意味
boxCollider.isの段階で isTriggerの予測変換がでてて
その先にはbool bool型の変数、(getは変数の読み込み、setは書き込み(代入)ができる事を説明している
BoxColliderのIsTrigger
ONにすると当たり判定が消える(仮)
Rigidbody
Unityで物理演算をしてくれるコンポーネント
Is Kinematic 物理演算を停止する値 true,false
[SerializeField] private GameObject Object1;
の変数名 Object1の名前を変更するとUnity上で割り当てがNoneに戻る
次回
前回
ディスカッション
コメント一覧
まだ、コメントがありません