在上一节的内容里,咱们已经建立出了一个主角,也搭建了一个简单的场景。html
传送门:https://www.cnblogs.com/zny0222/p/12653088.html动画
既然有了主角,要怎样才能让主角动起来呢?spa
这时候咱们就须要写一些简单的代码,来控制咱们人物的移动。3d
如图所示,咱们新建一个文件夹,用来保存咱们的脚本。code
在制做游戏的过程当中,咱们应该分门别类的存放素材,这样才能方便管理。orm
建立好文件夹以后,新建一个C#脚本,而且把脚本挂到咱们的主角上,只要拖拽过去就好啦!htm
在开始编写代码以前,咱们先了解一下unity当中的Input Manager。blog
在左上角找到编辑 -> 项目设置 -> InputManager游戏
咱们先从水平移动开始,在InputManager中找到“水平”,发现对应的名称是“Horizontal”。ci
而且对应的按键是方向键的左键和右键,若是你不喜欢这样,也能够更改成其余的按键。
让咱们记住这些信息,而后开始编写代码吧!(若是你尚未vs,请先下载安装vs)
双击咱们的脚本,unity会自动在vs当中打开脚本。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyPlayer : MonoBehaviour { public Rigidbody2D Pl; public float speed; void Start() { } void Update() { Move(); } void Move() { float horizontalmove = Input.GetAxisRaw("Horizontal"); // 从 input manager 接收“水平”输入的值。 Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y); if (horizontalmove != 0) { transform.localScale = new Vector3(horizontalmove, 1, 1); // 控制角色转身 } } }
能够看到,咱们使用了2个变量。第一个变量Pl,用来获取角色的刚体。第二个变量speed,用来控制角色行走的速度。为何都定义为public的变量呢?
这是由于,定义为public的变量,能够直接在unity引擎中看到。咱们能够直接把组件拖拽上去,或是直接在unity界面修改变量的数值。这样作能够便于咱们往后的改动。固然,不是全部变量都应该定义为public哦。
写好了这些代码以后(代码在保存后才会生效,不要忘了 ctrl + s 哦),主角就能够横向移动了!
若是你的主角在走路时摔倒了,只要在刚体的设置中,将冻结旋转Z轴勾上就好啦。
还记得在上一节里,咱们制做主角的碰撞时,使用的是两个碰撞器。这时候就体现出效果啦!由于瓦片地图的有些地方可能并非那么精确,若是只用一个方形的碰撞器,方形碰撞器的直角可能会被瓦片地图上的小突起给卡住。为了不这个问题,咱们在主角的下半部分采用圆形的碰撞器,这样就不会被卡住了。
作到这里,咱们的人物尚未任何动做,只能横向的平移。接下来,让咱们一块儿给主角添加动画效果吧!
public Rigidbody2D Pl; public float speed; public Animator anima;
首先,咱们要新增一个动画器的变量,我给它起名叫anima,你也能够取其余名字。
而后给主角添加一个动画器,并拖拽到咱们的脚本上。接下来就能够开始制做了。
点击 窗口 -> 动画 -> 动画 ,并找到素材包中的动画素材。
完成了以上步骤,咱们就拥有站立和跑动两个动画了。那么何时使用这两个动画呢?
点击 窗口 -> 动画 -> 动画器,并完成如下操做。
确保站立的动画是默认状态,在站立和跑动这两个动画之间建立过渡。添加一个float参数,用来判断站立和跑动之间的转换。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyPlayer : MonoBehaviour { public Rigidbody2D Pl; public float speed; public Animator anima; void Start() { } void Update() { Move(); } void Move() { float horizontalmove = Input.GetAxisRaw("Horizontal"); Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y); if (horizontalmove != 0) { transform.localScale = new Vector3(horizontalmove, 1, 1); } anima.SetFloat("running", Mathf.Abs(horizontalmove)); }
}
添加了倒数第3行的代码,这样就可让咱们的float变量获取角色移动的值了。
点击过渡箭头,取消退出时间,并添加一个条件,即为咱们刚才设置的那个变量。当咱们的float变量running小于0.1时,咱们就从跑动状态回到站立状态。
要从站立状态进入跑步状态,只要点击另外一个过渡箭头,把小于0.1改成大于0就好啦,请本身试着作作看吧!
完成了这些内容,咱们的人物就可以跑动并具备动画效果了。下一节将会介绍人物的跳跃和地面检测。若是以为这篇文章对你有帮助,请点赞关注吧!