2013年9月24日火曜日

【Unity】他のゲームオブジェクトのScript内のメソッドを実行する方法

設計とかする様になって、「このスクリプトはこのオブジェクトにやらせたほうがいいよなー」とか、
「このメソッドはこのスクリプトに実装するべきだよなー」とか、保守や修正等を考えると
各オブジェクトで役割をキッチリ分けておくべきです。

そんな時に出てくる問題としてスクリプトのメソッドがあるかと思います。

例えば、『Aボタンを押したらプレイヤーがジャンプする』
イメージとしては下記な感じが理想かと。。。







ここでは「コントローラー」側で「プレイヤー」のメソッドを呼ぶ方法を紹介します。

まず、「プレイヤー」側のメソッドを他のスクリプトからも呼べる様にするために
メソッドに[public]を付けます。
↓こんな感じ
//////////////////////////////////////////////////////// ※プレイヤースクリプト内
//ジャンプ実行;
 public void Jump()
 {
           //プレイヤーをジャンプさせる
}
////////////////////////////////////////////////////////

次に、「コントローラー」側から「プレイヤー」のメソッドを呼びます。
まずは宣言
////////////////////////////////////////////////////////※コントローラースクリプト内
GameObject Player_Obj;
////////////////////////////////////////////////////////

次に「プレイヤー」オブジェクトを取得します。※赤文字箇所はオブジェクト名で指定
////////////////////////////////////////////////////////※コントローラースクリプト内
void Start ()
 {
      Player_Obj = GameObject.Find("Player");
 }
////////////////////////////////////////////////////////

取得したオブジェクトのメソッドを実行します。
※<>内はスクリプト名を指定し、最後の赤文字はメソッド名を指定する
////////////////////////////////////////////////////////※コントローラースクリプト内
void Update ()
 {
      //マウスクリック;
      if(Input.GetMouseButtonDown (0))
      {
          //ジャンプ実行;
          Player_Obj.GetComponent<Player_Control>().Jump();
      }
 }
////////////////////////////////////////////////////////

これで他のゲームオブジェクトのScript内のメソッドを実行することができます。

0 件のコメント:

コメントを投稿