一、组件
有几个物体他们之间有着重复的功能,该如何避免重复的去写代码?
可以将一些相同的功能写成一个组件,也就是组件就等同于功能。
什么是组件?
在Unity中,游戏物体是不具备任何功能的,如果想要为其添加功能,那么就需要为它添加该功能的组件,而每一个组件其实就是一个引擎内部的组件脚本或是由自己编写的组件脚本。也就是说,一个游戏物体(Game Object )会包含多个组件(Component ),每一个组件又是一个组件脚本。
示例:创建一个空物体为其添加组件让其为立方体
创建一个空物体
添加组件mesh filter,然后网格选择立方体Cube
再添加一个Mesh Renderer (渲染逐渐)
然后新建一个材质 ,最后将材质拖到添加组件的地方,然后就显示了一个立方体
组件的一些使用技巧
1.组件修改后想要恢复,可以点击重置就恢复了。
2.组件可以通过复制为物体增加新的组件。组件也可以粘贴组件值,可以将a物体的A组件修改一些数组后点击复制。再b物体上的A组件可以直接粘贴组件值,可以不用再增加一个组件吗,达到需要的效果。
二、脚本
1.方法的调用顺序。
Awake:最早调用,所以一般可以在此实现单例模式。也可以做一些初始化的设置,仅在对象第一次被激活时调用一次。。
OnEnable:组件激活后调用,在Awake后会调用一次。
Start:在Update之前调用一次,在OnEnable之后调用,可以在此设置一些初始值。
FbxedUpdate:固定频率调用方法,每次调用与上次调用的时间间隔相同。
Update:帧率调用方法,每帧调用一次,每次调用与上次调用的时间间隔不相同。
LateUpdate:在Update每调用完一次后,紧跟着调用一次。
OnDisable:与OnEnable相反,组件未激活时调用。
OnDestroy:被销毁后调用一次。
2.脚本的运行顺序
当有多个脚本同时存在时运行顺序是如何的呢?
默认情况下会会先执行所有脚本的 Awake 方法里面的,然后再执行所有脚本里面的 Start 方法里面的。
可以通过设置修改执行顺序,可以在Unity编辑器中的“Edit -> Project Settings -> Script Execution Order”中找到脚本执行顺序设置。
在这里将需要控制的脚本添加,然后修改这个数值
数值越小越靠前,执行顺序越靠前。比如图中的顺序会前执行test2的 Awake 然后再执行test1 的Awake 。
三、组件的标签和图层
1.标签:
标签是用于标识游戏对象的字符串。通过为游戏对象分配标签,可以轻松地将它们归类为特定的类型或功能。在Unity中,一些常见的默认标签包括"Player"、"Enemy"、"MainCamera"等。也可以自己创建一些没有的标签。
可以通过为物体分配标签,在查找物体是更为方便。
可以通过脚本设置标签和获取标签
// 设置游戏对象的标签
gameObject.tag = "Player";
// 获取游戏对象的标签
string objectTag = gameObject.tag;
2.图层
图层是用于分组和控制游戏对象渲染顺序和碰撞检测的一种方法。每个游戏对象都分配有一个图层,而图层定义了对象在场景中的位置和关系。
通过将游戏对象分配到不同的图层,可以控制它们在场景中的可见性和渲染顺序。例如,可以将一个2D的背景图层设置在角色图层之后,以确保角色显示在背景之前。
此外,图层还对碰撞检测非常重要。可以通过设置碰撞器和触发器的碰撞层次来控制它们之间的交互。例如,你可以设置角色碰撞器只与敌人层发生碰撞,而不与其他层发生碰撞。
同时图层也能添加,但是只能有32个。
也可以使用 Physics 类的 LayerMask 可以在脚本中选择性地检测或忽略特定图层的对象。