Unity C#继承与多态
2017-05-26 本文已影响0人
楚天月
父类——道具
using UnityEngine;
using System.Collections;
namespace Dj
{
public class daoju : MonoBehaviour
{
// Use this for initialization
public string Name;
public float HP;
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("AAAAAA" + this.Name);
}
}
public virtual void OnCollisionEnter(Collision collisionInfo)
{
Debug.Log("XXXXX+HP" + this.Name);
}
}
}
子类——继承道具
using UnityEngine;
using System.Collections;
using Dj;
public class jichengdaoju : daoju {
// Use this for initialization
public float MP;
void Start () {
}
// Update is called once per frame
void Update () {
}
public override void OnCollisionEnter(Collision collisionInfo)
{
//base.OnCollisionEnter(collisionInfo);
Debug.Log("OOOOO+MP"+this.Name);
}
public void print1()
{
Debug.Log("zileifanfangfa>>>>>>>>>>>>>>>>");
}
}
其中 子类重写了父类中的碰撞检测函数,并且新加了一个MP字段和一个print1的新方法
在另一个脚本中进行对父类和子类的使用结果
using UnityEngine;
using System.Collections;
using Dj;
public class other : MonoBehaviour {
// Use this for initialization
public daoju a = new daoju();
public jichengdaoju b = new jichengdaoju();
void Start () {
a = transform.GetComponent<daoju>();
b = transform.GetComponent<jichengdaoju>();
b.print1();
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter(Collision collisionInfo)
{
a.OnCollisionEnter(collisionInfo);
b.OnCollisionEnter(collisionInfo);
}
}
可见,a调用的父类的OnCollisionEnter方法,并且调用不到子类的新方法print1
b只能调用改写后的OnCollisionEnter方法,也可以使用自己的新方法print1
特别的是,当在父类中的Update 中写的按下空格键打出Debug的语句,如果子类中不写Update函数,那么子类的实例会自动调用父类的Update中的语句,如果子类自己写了Update的话就执行自己的Update