読者です 読者をやめる 読者になる 読者になる

続> 同人ゲームを作りたい人のメモ

同人ゲームを作るための素人メモ。いつものように記事に保証なし。スクリプトのタグが使えずサイト移動しました。エターナル怖い。

unity C# 継承とgetcomponentを調べた

unity を勉強中な素人なので記事に保証はありません。

unityでC#を勉強した覚書きを書こうかと思います。

 

monobehaviourを継承したオブジェクトはnewではなくgetcomponentを使用するようにメッセージがでたのでgetcomponentをテストした。

-------------------------using 省略

testA.C# monobehaviourを継承している

public class testA : MonoBehaviour {

 public void attack()
 {
      Debug.Log("attack A");
 }
}

Aを継承したBを作る

testB.C#

public class testB : testA {

 public void attack()
 {
        Debug.Log("attackB");
 }
}

●空のgameObjectのTestBを作成しtestBスクリプトをくっつける

testC.C#

 

public GameObject objB;
void Start () {
 testB testb = objB.GetComponent<testB>();
 testb.attack();
 testA testab = objB.GetComponent<testB>();
 testab.attack();
 testA testaa = objB.GetComponent<testA>();
 testaa.attack();
}
}

●空のgameObjectのTestCを作成してtestCスクリプトをくっつける。

objBにTestBおぶじぇくとを指定する。

 

実行結果

attackB
attackA
attackA

 

ちなみにtestB testba = objB.GetComponent<testA>();
testba.attack();  型の問題でエラーになる
testB testb = objB.GetComponent<testA>() as testB;とすると通るが意味がない

 

------------------------
全ての結果をattackBと表示させるには?overrideとvartualを使う

 

testAを書き直す
public virtual void attack()
{
   Debug.Log("attack A");
}

testBを書き直す
public override void attack()
{
   Debug.Log("attackB");
}

結果は全てattackBと表示する。