U1L4——MonoBehaviour的重要内容
U1L4——MonoBehaviour的重要内容
MonoBaviour
MonoBehaviour 类是一个基类,所有 Unity 脚本都默认派生自该类。当您从 Unity 的项目窗口创建一个 C# 脚本时,它会自动继承 MonoBehaviour,
MonoBehaviour 类提供了框架,允许您将脚本附加到编辑器中的游戏对象,并提供诸如Start()和Update()等常用事件的挂钩。
脚本内继承该类且脚本与继承该类的类名一致才能使脚本挂载到一些对象上,注意其派生类绝不能new出来,同时也不再建议写构造函数
相关信息:继承MonoBehaviour基类的类的规则、关于MonoBehaviour的类中的构造函数
本章代码关键字
1 | //重要成员——获取游戏对象信息及其几何信息,以及脚本是否激活 |
重要成员
gameObject
可以获取该脚本所挂载的GameObject,并对其中内容进行操作
1 | print(this.gameObject.name); |
transform
获取依附的游戏对象(GameObject)的Transform类,并可对其中内容,例如位置,角度,缩放大小进行操作
1 | //得到对象位置信息 |
enabled
获取脚本是否激活
1 | this.enabled = false; |
获取其他脚本依附的gameobject和Transform信息
1 | public Lesson3 otherLesson3; //通过Unity编辑器确认otherLesson3对应的对象 |
重要方法
得到依附对象上挂载的其他脚本
以下的方法都有文件名,typeof
,泛型方法,但一般都建议用泛型,因为泛型无需二次转换
注意!如果获取失败 比如说没有对应的脚本 会默认返回空(null)
得到自己挂载的单个脚本
注意!如果有重复脚本我们将无法确定得到的是哪个脚本,所以一般都不建议挂载同一脚本
根据脚本名获取:
1 | Lesson3_Test t = this.GetComponent("Lesson3_Test") as Lesson3_Test; |
根据Type
获取
1 | t = this.GetComponent(typeof(Lesson3_Test)) as Lesson3_Test; |
★ 根据泛型获取 一般都建议使用泛型获取 因为不用二次转换
1 | t = this.GetComponent<Lesson3_Test>(); |
只要你能得到场景中别的对象或者对象依附的脚本,那你就可以获取到该对象的所有信息
得到自己挂载的多个脚本
有两种装的方法,一个是数组,一个是列表,使用列表需要作为参数填入方法!
1 | Lesson3[] array = this.GetComponents<Lesson3>(); |
得到子对象挂载的脚本(它默认也会找自己身上是否挂载该脚本)
后面的参数默认是false
,即不查看失活的子对象,如果填入ture则即使是失活的子对象也会查找
获得单个子对象挂载的脚本
1 | t = this.GetComponentInChildren<Lesson3_Test>(true); //后面的参数默认是false不查看失活的子对象,如果填入ture则即使是失活的子对象也会查找 |
获得多个子对象挂载的脚本
有两种装的方法,一个是数组,一个是列表,使用列表需要作为参数填入方法!
注意!这里会向下查找所有的对象,也就是说在父子关系中所有更低的对象都会查找!(仅会顺着父子关系线去查找,兄弟对象包括其子物体不会查找!)
1 | Lesson3_Test[] lts = this.GetComponentsInChildren<Lesson3_Test>(true); |
得到父对象挂载的脚本(它默认也会找自己身上是否挂载该脚本)
和查子对象脚本不一样,没必要写是否查失活父对象的脚本的参数,因为不可能有查失活父对象脚本的情况
获得单个父对象挂载的脚本
从调用该方法的游戏对象开始,沿着父链向上查找,直到找到一个包含指定组件(类型为 T
)的游戏对象。
这意味着它不仅会查找直接的父对象,还会继续查找父对象的父对象,直到到达场景的根对象或者找到指定的组件为止。
1 | t = this.GetComponentInParent<Lesson3_Test>(); |
获得多个父对象挂载的脚本
沿着父链会向上查找所有的对象,也就是说在父子关系中所有更高的对象都会查找!(仅会顺着父子关系线去查找,兄弟对象包括其子物体不会查找!)
有两种装的方法,一个是数组,一个是列表,使用列表需要作为参数填入方法!
1 | lts = this.GetComponentsInParent<Lesson3_Test>(); |
尝试获取脚本
通过了一个更加安全的 获取单个脚本的方法 如果得到了就返回ture
,然后再来进行逻辑处理即可
1 | Lesson3_Test l3t; |
其他部分的MonoBehaviour重要内容
生命周期函数
内容在U1L2:生命周期函数
延迟函数
内容在U2L6:延迟函数
协同程序
内容在U2L7:协同程序
IK相关
内容在U3L18-6:动画IK控制