CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Oculus Rift DK1向けアプリを作るときのUnityTips

スパイダーマン風Oculusを作る中でUnityの使い方関連で色々ひっかかってます。Unity初心者なので英語から日本語からサイトを調べまくり、ようやく少しわかってきました。

せっかくなので、ネットで調べても簡単に出てこなかった内容を書いておきます。なお、記述は全部C#です。

1. ObjectAにアタッチされたスクリプトAが、ObjectAのコンポーネントを参照するときの記述方法

this.gameObject.

(使用例)

	void FixedUpdate(){
		if(rigidBodyEnabled == true){
		this.gameObject.rigidbody.AddForce(moveDistance,ForceMode.Force);	
		}	
	}

2. オブジェクトに物理運動をさせる方法

オブジェクトに rigidBodyコンポーネントを付ける

AddForceなどの物理的な動きは必ずFixedUpdateの中に記述する。Update()の中に記述すると、密閉した部屋で空気抵抗なしのスーパーボールを跳ねさせるような不可解な動きをする。

3. ObjectAにアタッチしたscriptAに書かれたFuncA関数を、scriptBのFuncB関数から呼ぶ方法

sendMessageメソッドを使うか、スクリプト名(クラス名)を使ってアクセスする。

使用例1
 public GameObject ObjectA;
   ObjectA.gameObject.SendMessage("FuncA");
使用例2
  ScriptA scriptA;
 scriptA = GameObject.Find("ObjectA").GetComponent<ScriptA>();
 scriptA.FuncA();

いずれの場合であっても、UnityのInspector ViewでObjectAに、"ObjectA"をドラッグ&ドロップする必要があります。

とくに、使用例2を使うと、public宣言した変数を呼ぶこともできるので使い勝手がよさそうです。

例えば、scriptA.csで

public Vector3 testDistance;

とあったとき、scriptBでは

scriptA.testDistance;

と書くことで値を取得できます。

4. ソースコードを読みやすくする方法

#region を使うと、Monoエディタで、任意の範囲を一つに囲うことができるので可読性が向上します。

Oculusのサンプルコードにもいくつか使っていましたが、

   #region variable
  public Vector3 test1;
  public Vector3 test2;
  public Vecto3 test3;
  #endregion

とすることで、test1,test2,test3を一つにまとめることができます。コードが長くなったときは便利だと思います。