public class TestBase : MonoBehaviour
{
public virtual void UseWhichMethod()
{
print("base");
}
}
public class TestChild : TestBase
{
public override void UseWhichMethod()
{
print("child");
}
}
public class TestScene : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
GameObject.Find("Empty_TestChild").GetComponent<TestBase>().UseWhichMethod();
}
}
}
当我按下Q键时,使用GetComponent获取名叫Empty_TestChild上的TestBase脚本对象,
不过我给Empty_TestChild物体挂的是TestChild
然后调用虚方法UseWhichMethod 结果不是父类的方法
========================================
结果和预期不一样,虽然我也不懂是什么原因,但是这样的效果却刚好是我需要的
比如:我有一个叫做 属性 的基类。里面定义血量 攻击 防御等
向下派生 主角子类(定义装备,背包等怪物不会有的属性)、怪物A子类(定义掉落物等怪物特有的属性)、怪物B子类。。。
当主角砍向怪物时,GetComponent获取的是 属性基类
死亡时调用 属性基类 的虚方法 virtual DeadMethod () 可以在基类的血量属性为0时调用该方法。
于是,由上可知,使用的将会是子类重写的DeadMethod方法。
怪物A生成掉落物,角色正常死亡。。。
==================================
3.22
碰到的一些问题 关于Instantiate awake start
{
Instantiate(MonoBehavior)
print( B )
}
MonoBehavior
{
Awake
{
print( A )
}
Start
{
print( C )
}
}
//结果 先A 再B 最后C