Unity C#继承与多态

父类——道具

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();
        b = transform.GetComponent();
        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

你可能感兴趣的:(Unity C#继承与多态)