美文网首页Unity之C#
Unity C#继承与多态

Unity C#继承与多态

作者: 楚天月 | 来源:发表于2017-05-26 13:21 被阅读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

    相关文章

      网友评论

        本文标题:Unity C#继承与多态

        本文链接:https://www.haomeiwen.com/subject/fentfxtx.html