Unity3D深入浅出 - 脚本开发基础(Scripts)
2015-02-01 23:14
267 查看
常用脚本事件: Update:每帧调用一次 Start:在第一次Update执行前调用 Awake:脚本实例在创建时调用 FixedUpdate:每个固定物理时间间隔调用一次 LateUpdate:每帧调用一次,在Update之后 该文章出自【狗刨学习网】 MonoBehaviour类: MonoBehaviour类是uniyt中非常重要的类,定义了基本的脚本行为,所有脚本类均需要从它直接或间接继承。MonoBehaviour还定义了对各种特定事件的响应函数,这些函数名均以On作为开头,下面是一些常用的事件响应函数。 OnMouseEnter:鼠标移入GUI控件或碰撞体时调用 OnMouseOver:鼠标停留~~~ OnMouseExit:鼠标移除~~~ OnMouseDown:鼠标按下~~~~ OnMouseUp:鼠标释放~~~ OnTriggerEnter:当其他碰撞体进入触发器时调用 OnTriggerExit:~~~~~~~~离开~~~~~~~~ OnTriggerStay:~~~~~~~停留~~~~~~~~~ OnCollisionEnter:当碰撞体或者刚体与其他碰撞体或者刚体接触时调用 OnCollisionExit:~~~~~~~~~~~~~~~~~~~~~~~~离开时~~~ OnCollisionStay:~~~~~~~~~~~~~~~~~~~~~~~~保持接触时~~~ OnControllerColliderHit:当控制器移动时与碰撞体发生碰撞时调用 OnBecameVisible:对于任意一个相机可见时调用 OnBecameInvisible:对于任意一个相机不可见时调用 OnEnable:对象启用或者激活时调用 OnDisable:对象禁用或者取消激活时调用 OnDestory:脚本销毁时调用 OnGUI:渲染GUI和处理GUI消息时调用 脚本和组件交互: 一个对象由若干个组件组成,通常需要利用脚本来访问对象的各种组件并设置组件的参数。对于系统内置的常用组建,Unity提供了非常便利的访问方式,只需要在脚本里访问组件对应的成员变量即可,这些成员变量定义在MonoBehaviour中并被脚本继承了下来。 常用组件以及对应的变量如下。
访问不属于商标中列出的组件,或者是访问对象上的脚本(脚本属于自定义组件),通过如下方式访问来得到组件的引用: GetComponent :得到组件 GetComponents:得到组件列表 GetComponentlnChildren:得到对象或对象子物体上的组件 GetComponentsInChildren:得到对象或对象子物体上的组件列表 注意:这几个函数都比较耗时,因此一般不要在Update函数中使用,应该在外部定一个接受组件引用的对象,在Start函数中使用GetComponent函数来获取组件引用。 示例:在一个cube里有一个move.cs脚本,在move.cs脚本中获cube的Tranform组件 Tranform c_tranform; Move move; void Start(){ //第一种方式 c_tranform = tranform; //第二种方式 c_tranform = GetComponent<Transform>(); move = GetComponent<Move>(); } void Update{ } 复制代码 访问场景中的对象: 在unity3d开发中,脚本不但需要访问脚本所在对象的组件,还经常需要访问其他的对象: 1.通过名称来查找:使用函数GameObject.Find,如果场景中存在指定名称的对象,则返回该对象的引用,否则返回null,如果存在多个同名的对象,则返回第一个对象的引用。 GameObject cube = GameObject.Find("MyCube"); 2.通过标签来查找:GameObject.FindWithTag,如果场景中存在指定标签的对象,则返回该对象的引用,否则返回null,如果多个对象使用同一个标签,则返回第一个对象的引用。 注意:与GetComponent一样,GameObject.Find和GameObject.FindWithTag也是比较耗时的参数,因此不建议在update函数中调用它们,而是在初始化中查找一次后保存在变量中。 协同程序(Coroutine): Coroutine也成为协同程序或协程,可以和主程并行运行,和多线程类似,但是在任一制定时刻只会有一个协同程序在运行,别的协同程序则会挂起。可以用来实现让一段程序等待一段时间后继续运行的效果。 协同程序(Coroutine)的相关函数如下: StartCoroutine:启动一个协同程序 StopCoroutine:停止一个协同程序 StopAllCoroutine:终止所有协同程序 WaitForSeconds:等待若干秒。 WaitForFixedUpdate:等待知道下一次FiexdUpdate调用。 javascript示例: function Start() { print("starting "+Time.time); yield WaitAndPrint();//启用一个协同程序 print("done "+Time.time) } function WaitAndPrint() { yield WitForSeconds(5);//等待5s print("waitandprint "+Time.time) } 复制代码 C#示例: IEnumerator Start () { Debug.Log("等待5s "+Time.time); yield return StartCoroutine(WaitMethod()); } IEnumerator WaitMethod() { yield return new WaitForSeconds(5f); Debug.Log("已经等待5s "+Time.time); } 复制代码 这里注意,C#中的协同函数的返回类型必须为IEnumerator,yield要用yield return来替代,并且启动协程用StartCoroutine()函数。 |
相关文章推荐
- [原]Unity3D深入浅出 - 脚本开发基础(Scripts)
- Unity3D深入浅出 - Shader基础开发
- 跟我从零基础学习Unity3D开发--U3d脚本注意事项及两个基本函数的简单介绍
- [原]Unity3D深入浅出 - Shader基础开发
- Unity3D自学笔记——脚本开发基础数学
- Unity3D个人笔记-5.脚本开发基础-8常用的方法函数
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
- 【COCOS2DX-LUA 脚本开发之二】LUA语言基础
- unity基础开发--最简单效果最好的unity3D分辨率适应教程
- [Unity3D]手机3D游戏开发:关于自定义Joystick的相关设置和脚本源码
- unity基础开发 ----Unity3D 4.0新功能:Mecanim动画系统基础教程
- Unity3D游戏开发 脚本入门(六)
- Unity3d开发之实现在Unity3d层C#脚本和在Xcode层Objective-c语言的通信以及NGUI的屏幕适配问题
- unity3d 脚本基础认识8-Ray 光射线
- 《游戏脚本的设计与开发》-1.3 基础语法(注释,变量,函数,条件语句)
- unity基础开发 ----Unity3D 4.0新功能:Mecanim动画系统基础教程
- 【COCOS2DX-LUA 脚本开发之二】LUA语言基础
- 深入浅出node.js游戏服务器开发——基础架构与框架介绍
- Android开发视频教程-深入浅出系列Lesson20-AFF111029学习Android界面开发的基础
- unity基础开发----在Unity3D里面实现自动开门和关门