zoukankan      html  css  js  c++  java
  • 关于继承MonoBehaviour的一些记录

    在开发游戏中,为了减少不必要的代码量,我们经常会继承MonoBehaviour,那么MonoBehaviour内部的内置方法Start、Update等等如果在父类中定义了,在子类中再次定义会发生什么事呢?

    我们来看看几个示例:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test1 : MonoBehaviour
     5 {
     6     void Start()
     7     {
     8         Debug.Log("Test1 Start");
     9     }
    10     
    11     void Update()
    12     {
    13         Debug.Log("Test1 Update");
    14     }
    15 }
     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test2 : Test1
     5 {
     6     void Start()
     7     {
     8         Debug.Log("Test2 Start");
     9     }
    10 
    11     void Update()
    12     {
    13         Debug.Log("Test2 Update");
    14     }
    15 }

    我们将Test2.cs绑定到一个GameObject上,运行看看结果:

    我们会发现Test2的方法覆盖了Test1的方法,同时Start、Update等内置的方法不是虚函数,所以无法使用base.Start()来调用父类的方法。

    下面我们修改Test2如下:

    1 using UnityEngine;
    2 using System.Collections;
    3 
    4 public class Test2 : Test1
    5 {
    6 }

    运行看看:

    我们会发现如果在子类不定义Start、Update等方法会调用父类的对应方法,注意:定义了但函数体为空则不会调用父类的同名方法,类似于取消该方法的效果。

    如果我们需要Start、Update是虚函数该怎么办呢?很简单,自己写一个:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test1 : MonoBehaviour
     5 {
     6     void Start()
     7     {
     8         OnStart();
     9     }
    10 
    11     protected virtual void OnStart()
    12     {
    13         
    14     }
    15     
    16     void Update()
    17     {
    18         OnUpdate();
    19     }
    20 
    21     protected virtual void OnUpdate()
    22     {
    23         
    24     }
    25 }

    这样我们在其子类直接override方法OnStart、OnUpdate就行了,当前前提是其子类不能再定义Start和Update方法。

  • 相关阅读:
    struts2-20-下载文件及授权控制
    struts2-19-合法用户上传文件
    struts2-18-上传多文件
    struts2-17-上传单个文件
    struts2-16-userAnnotationValidate
    struts2-15-用户名校验
    struts2-14-用户自定义全局转换器
    struts2-13-用户自定义局部转换器
    struts2-12-用户自定义转换器(地址)
    struts2-11-OGNL实现书籍的增删改查
  • 原文地址:https://www.cnblogs.com/hammerc/p/4492434.html
Copyright © 2011-2022 走看看