Unity3D的MonoBehaviour与Component与Tranform与GameObject

  • C#的修饰符internal,default,virtual,sealed
    • private:不加scope修饰符则为private(不建议这样使用)
    • internal:internal的作用域为一个工程
    • virtual与sealed:virtual表示子类可以override,sealed不行,C#不写virtual则默认为sealed
    • Unity会自动调用Start,Update等方法即使他们为private
  • MonoBehaviour,Component,Tranform,GameObject
    • 了解GameObject
    • 把GameObject连接起来的Transform
    • 在Unity中写的脚本就是Component
    • 脚本之间如何互相关联
      • Unity里面拖拽
      • GameObject内部的互相引用
      • 两个互相连接的GameObject之间的内部脚本互相引用
    • 总结

转自:unity3d–MonoBehaviour与Component与Tranform与GameObject

这篇文章从一个Empty的MonoBehaviour入手,首先讨论一下C#的修饰符internal,default,virtual,sealed

接着讨论一下MonoBehaviour,Component,Tranform,GameObject之间的关系 及脚本之间的如何互相关联

C#的修饰符internal,default,virtual,sealed

从一个空类说起

using UnityEngine;
using System.Collections;public class EmptyClass : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}
}

随便在工程中建立一个C#脚本,Unity就替我们生成了这个空类. 里面包含有两个方法Start,Update.

首先让我们抛开这两个方法的作用不谈,先来谈谈这两个函数的写法.

EmptyClass : MonoBehaviour 这个很简单,表示Empty继承自MonoBehaviour 。在Java或者AS中用extends这里用分号 这个无所谓了.

不过 void Start () {} 这行代码就很奇怪了. 前面没有任何的修饰符(priate,protected,public). 那这到底什么意思呢?

private:不加scope修饰符则为private(不建议这样使用)

google一下有篇文章给出了很好地解释

Should private members be declared explicitly as private in idiomatic C#?
http://www.4byte.cn/question/543979/should-private-members-be-declared-explicitly-as-private-in-idiomatic-c.html

文章说的很清楚,在C#中如果不加任何的scope修饰符则默认为private,不过几个Answer(我也赞同)不要使用这种方式,还是显示的加上private为好。

internal:internal的作用域为一个工程

internal这个应该不太能用到,不过还是提一句吧. 也是在我无意中搜索到的,网上文章说的不是很清楚 所以我重新做了一个Demo,
正好也验证了defult的作用域

这张图就是整个workspace的结构,每个Solution就是一个个的工程,
而按图来说如果在LibSolution中定义了internal则MainSolution是访问不到的
LibA中定义了internal的变量及方法,如下图:


在同一个Solution内,其子类和非子类对其的访问权限,如下图:

在不同的Solution下对其的访问权限,如下图:

virtual与sealed:virtual表示子类可以override,sealed不行,C#不写virtual则默认为sealed

这个很好理解,不过正好和Java反过来,Java是需要受到final掉才可以,如果有兴趣可以阅读这篇文章
http://stackoverflow.com/questions/1327544/what-is-the-equivalent-of-javas-final-in-c

Unity会自动调用Start,Update等方法即使他们为private

让我们再回头看Unity为我们创建的那个空类,里面只有两个方法 并且两个方法都没有写作用域,我们刚才也提到 没写作用域就是private的

那Unity为何能调用到这个函数呢?

http://stackoverflow.com/questions/24772681/c-sharp-when-do-i-need-override-when-dont-i-need-it

万能的stackoverflow 有人已经给出了解释 :单从语言的角度来说是不行的,除非你使用反射(反射可以访问private),不过Unity并没有这么使用

我也不知道他们怎么做的…(应该就是反射吧)

不管怎样 就可以理解为Unity搞定了这个问题

Unity3D的MonoBehaviour与Component与Tranform与GameObject相关推荐

  1. Unity3D 动画控制器 Animator Component

    文章目录 Animator 组件 Animator Controller 动画控制器 自建状态 1.右键菜单 2.在状态上右键 3.Animator Layers 4.Animator Pameter ...

  2. Unity3D入门基础之游戏对象 (GameObject) 和组件 (Component) 的关系

    原文出处:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheGameObject-ComponentRela ...

  3. 用Unity3D的50个技巧:Unity3D最佳实践

    http://bbs.9ria.com/thread-416805-1-1.html 刚开始学习Unity3D时间不长,在看各种资料.除了官方的手册以外,其他人的经验也是非常有益的.偶尔看到老外这篇文 ...

  4. Unity3D 单例模式

    简洁 在游戏开发中会经常使用到单例模式,什么时候会用到单例模式呢?有一些数据会在整个游戏(程序)生命中一直持续到游戏结束的数据.例如:玩家数据. 代码 提供两种单例: C#中的单例. Unity3D继 ...

  5. Unity3D核心类型一览

    原文  http://www.cnblogs.com/bitzhuwei/p/unity-core-types.html 主题 Unity3D Unity3D核心类型一览 本文记录了Unity3D的最 ...

  6. Unity3D的50个技巧:Unity3D最佳实践

     http://blog.csdn.net/neil3d/article/details/38534809 刚开始学习Unity3D时间不长,在看各种资料.除了官方的手册以外,其他人的经验也是非常 ...

  7. 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics...

    作者:王选易,出处:http://www.cnblogs.com/neverdie/  欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D重要模块的类图 最近刚刚完成了一 ...

  8. Unity3d 周分享(18期 2019.6.1 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. 1)Unity x Android Studio混用經驗分享---Laird ...

  9. unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

最新文章

  1. linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置...
  2. mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记
  3. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从
  4. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
  5. PL/SQL Developer远程连接Oracle数据库
  6. STM32电机库(ST-MC-Workbench)学习记录——无感FOC代码生成
  7. 万年历单片机课程设计百度文库_单片机课程设计报告(万年历)
  8. EViews-蒙特卡洛模型代码
  9. Linux 网站推荐
  10. RPC框架简析--Pigeon
  11. indesign怎么拼图_用R来拼图和排版,告别AI和PS(二):调节宽度和高度
  12. halo_Halo 3评论
  13. vue3.0之-watch全面解析
  14. 【Matlab编程】新手入门第五天
  15. 嵌入式应用角度学习BLE栈
  16. 点或积分区域的对称性,积分结果的对称性
  17. Jackson配置大全
  18. Python自述和简介
  19. POI:java导出excel,java设置单元格公式,求和
  20. 再次遇到ORA-04030的错误

热门文章

  1. Mac查看附近WiFi信道及路由器信道的选择
  2. 解决C语言编译时一闪而过的问题(详细好操作)
  3. c语言课程教学团队介绍,计算机科学技术系计算机基础课程教学团队简介
  4. latex中复杂公式换行等号对齐
  5. MySQL字段int类型的长度INT(M)
  6. 【Python】六大开源框架对比:Web2py略胜一筹
  7. 22年计算机保研经验分享(双非计算机上岸成电)
  8. Docker把容器打包成镜像并提交到harbor仓库
  9. 【复盘】回顾准备秋招求职的这一年,还好,没有被生活打败。
  10. Linux服务器部署工程(柳州职业技术学院)电信院22级工程