2021/5/1追記
目次
1, overrideをつけなくても、Start()は自動的にオーバーライドされる
2, 子クラスでStart()が定義されてなければ、親のStart()が呼ばれる
3, base.Start()で親のStart()を呼べる。ただしprotectedかpublicをつけなければならない
Case1
1, overrideをつけなくても、Start()は自動的にオーバーライドされる
public class Base : MonoBehaviour { void Start() { Debug.Log("Base"); } }
public class Sub : Base { void Start() { Debug.Log("Sub"); } }
SubをGameObjectに張り付ける
結果 "Sub"
Case 2
2, 子クラスでStart()が定義されてなければ、親のStart()が呼ばれる
public class Base : MonoBehaviour { void Start() { Debug.Log("Base"); } }
public class Sub : Base { }
SubをGameObjectに張り付ける
結果 "Base"
Case 3
3, base.Start()で親のStart()を呼べる。ただしprotectedかpublicをつけなければならない。
public class Base : MonoBehaviour { public void Start() { // To be public or protected Debug.Log("Base"); } }
public class Sub : Base { void Start() { base.Start(); Debug.Log("Sub"); } }
SubをGameObjectに張り付ける
結果 "Base" "Sub"
その他
C#のデフォルト言語機能とは挙動が違うので注意すること
C#では継承すると、親のコンストラクタは必ず呼ばれる - siunのメモ
追記
何もつけないと警告が出るようになった(Unity2021.1.4f1にて確認)
warning CS0108: 'Hammer.Awake()' hides inherited member 'Weapon.Awake()'. Use the new keyword if hiding was intended.
newをつけると警告を消せる
public class Sub : Base { new void Start() { Debug.Log("Sub"); } }
自動でoverrideされるというよりは自動でnewされているっぽい