Unity 动画初探(2)
来源:互联网 发布:perl 进入编程 编辑:程序博客网 时间:2024/05/20 12:24
首先为角色增加一个CharacterController。
然后设定一些变量控制角色的速度
- var speed = 3.0;
- var rotatationSpeed = 200.0;
- private var curSpeed = 0.0;
- function Update () {
- // Rotate around y-axis
- var newRotation = Input.GetAxis("Horizontal") * rotatationSpeed;
- transform.Rotate(0, newRotation * Time.deltaTime, 0);
- // Calculate speed
- var newSpeed = Input.GetAxis("Vertical") * speed;
- if (Input.GetKey("left shift"))
- newSpeed *= 1.5;
- // Move the controller
- var controller : CharacterController = GetComponent (CharacterController);
- var forward = transform.TransformDirection(Vector3.forward);
- controller.SimpleMove(forward * newSpeed);
- }
在Update函数里,我们根据输入计算出运行的速度和旋转的速度。最后通过控制器,让这个角色跑起来。
不过到目前为止这个角色跑起来开清动作就变得怪怪的,当按下开枪按钮的时候,这个人就开始滑行了,为了让这个人能够“边跑边打”,我们就要去混合刚才开枪和跑步的动作。
写了一半,电脑又坏了!~非常痛恨中关村里面的修理笔记本的!各位兄弟们千万别去了!实在不行一定要找个熟悉的人带着。
言归正传,要让我们控制的机器人可以一边跑一边射击,那么就必须要用到Unity中一个非常重要的动画技术 “动画混合Animation Mixing”。
找个动画文件来看看:robot@idle2shoot.fbx这个动画。在这套动画文件中,包含了很多的动画动作。我们的每一个动画都包含了好多的动作,其中包括了 手上的动作和腿脚的动作。通常情况下我们播放动画就是直接播放一个动作就可以了,但是遇到需要动作融合的时候,就不能直接的调用动画,而是要选用其中的一部分有用的动画。
现在我们要对Run这个动作和Shoot两个动作进行混合。先来看看Shoot的动作序列:在这个动作中基本上只包含了两个上身持枪和动作,下身基本上没动。这个动作融合主要是针对shoot的上半身。
首先,利用Shoot动画片段,生成一个新的动画片段"shootUpperBody"。
animation.AddClip(animation["shoot"].clip, "shootUpperBody");
animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/roothandle/spine1"));
animation["shootUpperBody"].AddMixingTransform(transform.Find("mover/gun"));
增加两个混合矩阵,让动作融合。这个动画角色的动作骨骼矩阵包含四部分,我们选择的spine1是上身的动作矩阵的根矩阵:
然后在运动的代码中调用
animation.CrossFadeQueued("shootUpperBody", 0.3, QueueMode.PlayNow);
然后跑起来的的角色,就有shoot和run混合的效果。
- function Update () {
- if (Mathf.Abs(Input.GetAxis("Vertical")) > 0.1 || Mathf.Abs(Input.GetAxis("Horizontal")) > 0.1)
- {
- animation.CrossFade("run");
- animation["run"].speed = Mathf.Sign(Input.GetAxis("Vertical"));
- }
- else
- animation.CrossFade("idle");
- // Play the cross fade animation
- if (Input.GetButtonDown ("Jump"))
- {
- animation.CrossFade("jump", 0.3);
- }
- // Shoot
- if (Input.GetButtonDown ("Fire1"))
- {
- // We are running so play it only on the upper body
- if (animation["run"].weight > 0.5)
- animation.CrossFadeQueued("shootUpperBody", 0.3, QueueMode.PlayNow);
- // We are in idle so play it on the fully body
- else
- animation.CrossFadeQueued("shoot", 0.3, QueueMode.PlayNow);
- }
- }
- Unity 动画初探(2)
- Unity 动画系统初探(2)
- Unity 动画初探
- unity shader:初探动画
- Unity 动画系统初探(1)
- Unity-旋转动画(2)
- Unity 2D 动画
- Unity-动画(Animator)
- 【Unity编程】Unity动画系统(一)
- 【Unity编程】Unity动画系统(二)
- Unity IK(反向运动学)初探
- Unity IK(反向运动学)初探
- unity 2D行走动画
- unity 制作2d动画
- Unity 2d动画实现
- Unity 旋转动画(1)
- 三维骨骼动画初探(绳索)
- javaFX8初探(动画和视觉效果)
- Ubuntu更新apt-get的源的方法以及其他源推荐
- poj3321Apple Tree
- linuxgrub引导启动过程详解
- Light Oj 1214 大数整除
- RTSP协议详解
- Unity 动画初探(2)
- 博弈类型的题 kiki's game hdoj 2147
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- 输出任意一年的年历(闲来没事,写了一个小程序)
- inline、block、inline-block的区别
- POJ 2299 Ultra-QuickSort 【归并排序求逆序数 OR 树状数组求逆序数】
- CentOS-6.3安装配置SVN
- 西安祛斑医院
- 杭电ACM 1230 火星A+B