Unity常用API学习

来源:互联网 发布:用淘宝店铺可以贷款吗 编辑:程序博客网 时间:2024/05/20 22:04

因为公司是使用Unity3D做游戏的,因为以前学过点C#于是开始研究研究Unity3D怎么玩耍的~,有理解不对的欢迎指责批评



Start()方法只执行一次
Update()会每帧执行一次

Reset 只在Editor模式触发就是在编辑器模式下触发
Awake OnEnable Start 会在Initialization 初始化调用
FixedUpdate 每秒固定调用60次 跟帧没关系
Update 和LateUpdate 都是每帧调用 关于它们俩的区别是参考的
作者:赵青青 的文章


LateUpdate是晚于所有Update执行的。

游戏中有2个脚步,脚步1含有Update和LateUpdate,脚步2含有Update,那么当游戏执行时,每一帧都是把2个脚步中的Update执行完后才执行LateUpdate 。

虽然是在同一帧中执行的,但是Update会先执行,LateUpdate会晚执行。

现在假设有2个不同的脚本同时在Update中控制一个物体,那么当其中一个脚本改变物体方位、旋转或者其他参数时,另一个脚步也在改变这些东西,那么这个物体的方位、旋转就会出现一定的反复。

如果还有个物体在Update中跟随这个物体移动、旋转的话,那跟随的物体就会出现抖动。 如果是在LateUpdate中跟随的话就会只跟随所有Update执行完后的最后位置、旋转,这样就防止了抖动。

做一个相机跟随主角的功能时,相机的位置调整写在LateUpdate,老是不明白,看官方的SmoothFollow相机跟随写在LateUpdate中


Time.captureFramerate 设置帧的速率,来设置屏幕截图

Time.deltaTime 代表当前帧,当前帧所占用的时间,每一帧的时间间隔

deltatime 延迟时间,时间增量

Time.fixedDeltaTime  设置是固定的每一帧是多少秒

frameCount 帧数 从游戏开始到结束运行了多少帧

timeScale 时间的比例,让游戏暂停/游戏加速播放

realtimeSinceStartup 游戏从开始到现在所占用的时间,游戏暂停也会继续计时

time & timeSinceLevelLoad & fixedTime 游戏运行一共所占哟的时间




所有游戏中运动的物体都使用了Time.deltatime 只要加了Time.timeScale =  0 就会不运动(暂停)  原理是 Time.deltaTime * timeScale

Time.time 表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算



activeInHierarchy这个物体是否处于激活状态

activeSelf 表示自身是否处于激活状态

activeInHierarchy 如果将父控件设置成false,那即便activeSelf设置成true也是处于禁用状态,所以平常的时候常用activeInHierarchy



GameObject Component和Object的千丝万缕的关系



官方文档强烈建议不到特殊情况的时候不要使用DestroyImmendiate要使用Destroy因为DestroyImmendiate会立刻销毁可能会导致空指针现象,Destroy不会立刻销毁,会先把将要销毁的游戏物体隐藏,将要销毁的游戏物体统一回收,确保没人用了再执行统一销毁

Destroy(this)

Destroy(gameObject)//销毁游戏物体

Destroy(rigidbody)//销毁刚体组件

Destroy(gameObject,5)//5s之后再销毁

一般来说从A场景跳转到B场景的时候A场景的游戏物体会被销毁去加载B场景的资源,如果A场景的物体调用了DontDestroyOnLoad该游戏物体不会被销毁会带到下一个场景,除非退出游戏了,该游戏物体才会被销毁(或者说是释放资源),FindObjectOfType根据组件类型去查找游戏组件,返回值只有一个就是说找到第一个的时候就会返回,如果有多个的话也只返回第一个,如果要查找多个可以使用FindObjectsOfType 会把查找到的组件返回成一个数组


GameObject 独有的静态方法
FindGameObjectsWithTag根据Tag标签去查找会返回一个数组
FindWithTag 根据Tag标签去查找第一个
Find 根据名字查找,会遍历场景中所有物体,所以当场景中物体很多的时候不建议使用
注意:为了避免名字写错或者场景中不存在当前的标签事先要进行判断
游戏物体间消息的发送和接收


BroadcastMessage 在脚本里面如果有这个方法就会调用,不仅仅会发送给父物体也会搜索到子物体发送消息,有利于减少耦合性
SendMessage 只会在当前物体中去搜索脚本,不会去找孩子,只会发送给当前物体不发给孩子
在调用BroadcastMessage 方法中传入参数methodName就会去找到相应的方法进行调用,广播消息就是调用方法
SendMessageUpwards :调用这个methodName方法,在这个游戏物体中的和它的父亲,和BroadcastMessage相反

得到组件的各种方法函数
GetComponent得到游戏物体中相同的组件,只会得到第一个组件
GetComponents得到游戏物体中可以得到相同的所有的组件(一个游戏物体中是可以有相同的多个组件的)
GetComponentInChildren 得到当前游戏物体和它孩子所包含的组件
GetComponentInParent 得到当前游戏物体和它父亲所包含的组件
Component后面+s的都是把所有的都查找到,不带s的查找到第一个就返回

MonoBehaviour总览


在类上面加上[ExecuteInEditMode] 可以展现编辑器运行的效果,不过不能绑定游戏物体




ExecuteInEditMode 编辑模式调用Update

[ExecuteInEditMode]卸载类上方通知编辑器,该类的OnGUI和Update等函数在编辑模式会被调用


invoke:调用某个方法

invokeRepeating :重复调用某个方法,会一直调用

CancelInvoke :取消调用某个方法,只会取消在当前脚本的invoke,在其他的脚本里面的invoke不受其影响

public void Invoke(string methodName,float time);  //隔多少时间调用方法

如果设置两秒之后会调用invoke 那在两秒还没到的时候调用CancelInvoke的话也可以取消调用


print :可以做输出,一般的时候用Debug.Log();

使用enable来激活或者禁用某个组件

isActiveandEnabled判断某个组件是否是激活的


原创粉丝点击