Unity 游戏框架搭建 2019 (四十二) MonoBehaviour 简化

在前两篇,我们完成了第九个示例。为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字。

我们已经接触了类的继承了。接触继承之前,把类仅仅当做是方法的集合,接触了继承之后,我们的类还可以使用继承来解决一些问题。

第十个示例

在 Unity 中,我们的脚本都往往继承自 MonoBehaviour,继承了之后我们就可以在脚本内编写很多功能。比如访问 transform/gameObject,再比如控制动画接收碰撞事件等等。另外我们继承了 MonoBehaviour 才能被作为脚本挂到 GameObject 上。

仅仅是通过继承,MonoBehaviour 的很多功能都能够进行复用。所以继承的一个作用就是代码复用。而我们知道方法也可以代码复用,泛型可以对结构进行复用。那么继承能是复用什么?

继承既能复用代码也能复用结构。不过术业有专攻,有的情况下使用方法进行复用更合理,有的情况下适用于泛型,当然也有适用继承的情况。

像 GameObjectSimplify 和 TransformSimplify,这两种方法集,目前其实通过继承来实现会更好一点。因为这两个类中的方法全部都是要传一个固定的对象进去的,比如 GameObjectSimiplify 的每个方法第一个参数都是 GameObject 参数,而 TransformSimplify 也是如此。他们使用起来也不是很方便。

使用代码如下:

GameObjectSimplify.Show(gameObject);
TriansformSimplify.Identity(transform);

可以看出都需要把所有的类名字全部打出来,而使用继承就会好很多。

我们先实现第十个示例代码,如下

MonoBehaviourSimplify.cs

using UnityEngine;

namespace QFramework
{    
    public partial class MonoBehaviourSimplify : MonoBehaviour
    {
        public void Show()
        {
            GameObjectSimplify.Show(gameObject);
        }

        public void Hide()
        {
            GameObjectSimplify.Hide(gameObject);
        }

        public void Identity()
        {
            TransformSimplify.Identity(transform);
        }
    }
    
    public class Hide : MonoBehaviourSimplify
    {        
        private void Awake()
        {
            Hide();
        }
        
#if UNITY_EDITOR
        [UnityEditor.MenuItem("QFramework/10.MonoBehaviour 简化", false, 11)]
        static void MenuClicked()
        {
            UnityEditor.EditorApplication.isPlaying = true;
            
            var gameObj = new GameObject("Hide");
            gameObj.AddComponent<Hide>();
        }
#endif
    }
}

MonoBehaviourSimplify 为了可以在之后的示例中进行扩展,所以加上了 partial 关键字。而其中的 Show、Hide 等方法这次没有使用 static 关键字,那么这种方法叫做成员方法。成员方法必须通过对象来调用。而有 static 关键字的叫做静态方法,静态方法必须通过类来调用。

示例就是代码中的 Hide 脚本。

而 MenuItem 中有一行代码:

UnityEditor.EditorApplication.isPlaying = true;

这行代码执行之后,UnityEditor 就会自动运行。

其他的都很简单,MenuItem 执行之后如下所示:
006tNc79gy1fzfsg3oncxj30ls0b475d.jpg

示例是正确的。

OK,这个示例就完成了。

菜单如下:
006tNc79gy1fzfsg7lffdj30hk0dqwle.jpg

目录结构如下:
006tNc79gy1fzfsgddemfj30eo0b675s.jpg

今天的内容就这些,我们接触了继承之后,又强化了一次继承的使用,这样我们之后每次写示例的时候会有很多设计工具选择。

到此呢,我们可以进行一次导出了。

我们下一篇再见,拜拜~

转载请注明地址:凉鞋的笔记:liangxiegame.com

更多内容

  • QFramework 地址:https://github.com/liangxiegame/QFramework

  • QQ 交流群:623597263

  • Unity 进阶小班

    • 主要训练内容:
      • 框架搭建训练(第一年)
      • 跟着案例学 Shader(第一年)
      • 副业的孵化(第二年、第三年)
    • 权益、授课形式等具体详情请查看《小班产品手册》:https://liangxiegame.com/master/intro
  • 关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。

猜你喜欢

转载自blog.csdn.net/u010125551/article/details/105913604