Archive for 三月, 2013
Unity3D协程闭包事件执行定时器
星期一, 三月 11th, 2013 553 views介于U3D没有一个自带的事件执行定时器,所以打算自己动手做一个,基本思路如下,先用伪代码来写了
1 2 3 4 5 6 | void timer(int time,Func func){ wait(time);//等待N秒 func();//执行传入的函数 } |
最开始的思路是用闭包加线程来实现,之后和群里的朋友讨论了下,经过提示其实可以避免去碰线程这种bug多发产物,取而代之的是U3D包里自带的一个协程MonoBehaviour.StartCoroutine
先来完善下我们的事件定时器,惯例直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using UnityEngine; using System.Collections; using System; public class EventTimer : MonoBehaviour { public IEnumerator Timer(float waitTime , Func[bool> func) { yield return new WaitForSeconds(waitTime); func(); } } |
Unity3D摄像机高级控制
星期一, 三月 11th, 2013 1,195 views在游戏场景中,通常摄像机如果需要进行一些不规则的固定运动,比如片头的场景摄像机的移动,此时如果通过代码来控制,虽然可以实现但调试过程并不直观,所以我们可以通过绑定摄像机动作来达到这一效果。
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
首先将创建好的动作绑定至摄像机,利用关键帧补间动画进行摄像机运动控制,如图
点击播放即可查看摄像机的实时运动效果,这里主要是针对xyz的位置及角度6个参赛进行调整,从而实现电影版的摄像机运动效果,这里我们且将动作命名为Move,并绑定至1号摄像机上
接下来我们创建一个摄像机管理脚本 CameraManger.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | using UnityEngine; using System.Collections; public class CameraManger : MonoBehaviour { public GameObject Camera_1; public GameObject Camera_2; public GameObject Camera_3; // Use this for initialization void Start () { } // Update is called once per frame void Update () { switch (Main.state) { case Main.STATE.READY: onActiveFalse(); Camera_1.SetActive(true); Camera_1.animation.Play("move"); break; case Main.STATE.START: onActiveFalse(); Camera_2.SetActive(true); break; default: break; } } void onActiveFalse() { Camera_1.SetActive(false); Camera_2.SetActive(false); Camera_3.SetActive(false); } } |
Unity3D碰撞检测及Trigger触发器的使用及注意事项
星期六, 三月 9th, 2013 5,413 views首先新建一个Cube,其本身就已自带了碰撞器Collider,如图
要使用Trigger检测物体进入,则需要勾选Is Trigger选项
碰撞检测触发器Trigger 有别于碰撞检测器 Collision,其可以不受物理效果影响,一些可穿透区域的碰撞检测,可以使用Trigger来进行碰撞检测
常用方法如下:
OnTriggerEnter 进入时
OnTriggerExit 离开时
OnTriggerStay 处于时
同上碰撞检测器 Collision 也有3个方法:
OnCollisionEnter
OnCollisionExit
OnCollisionStay
这里我们需要为跑道添加一个终点撞线的机制,所以使用可穿透的碰撞检测触发器Trigger
代码如下:
1 2 3 4 5 | void OnTriggerEnter(Collider collider) { print(collider.gameObject.name + ":" + Time.time); } |
OnTriggerEnter传入的参数必须为Collider,故能触发该函数的对象必须具有Collider组建。这里我们用的是角色控制器Character Controller 自带了Collider组建
此时每当有角色撞线时即会打印角色名及系统时间
(更多…)
Unity3D角色控制器的使用及游戏对象移动速度控制
星期四, 三月 7th, 2013 1,502 views首先是角色控制器的添加 选定模型对象 在其Inspector视图中选择Add Component -> Physics -> Character Controller 出现组建如下图
此时模型对象上会出现一个胶囊体,通过改变Center、Radius以及Hight的值来调整胶囊体的位置,使之恰好包裹住模型对象,如下图
Unity3D模型导入与动画播放
星期二, 三月 5th, 2013 670 views首先是模型的导入,方法比较多,但常规的是将FBX模型文件拖放至Project视图中即可自动载入,这里以某狼人模型为例,导入后效果如图,材质及动画都已绑定好,详细操作方式和注意事项后面文章会叙述。
下面叙述下如何用代码来对模型的动画播放进行控制
动画都是预先由美术设计好的,并且已经到处为资源文件,通过载入Unity中并与模型绑定即可,如图
animation中列出的即是此模型所绑定的动作动画,最上方的为默认动画设置,勾选下方play automatically 选项后即可自动播放默认动画。
现在我们通过脚本来控制动画播放。以最简单的为例,大家自己举一反三:
1 2 3 4 5 6 7 8 9 10 11 12 | using UnityEngine; using System.Collections; public class AnimationManger : MonoBehaviour { // Update is called once per frame void Update () { gameObject.animation.Play("这里输入动作名 如 run"); } } |
注意动作名必须和Animation表单中的一致,将脚本绑定到该Gameobject上,运行,效果如同
可以看到狼人开始奔跑起来了。
通过代码量的扩充我们即可达到自由超控动作动画的播放。
本章节仅为动画播放最基础教程,更多高级教程欢迎继续关注。
BeiTown
2013.03.05