今天做中期的时候做到角色的控制,想了很多种方法,在这记录下其中一种:(使用混合树来控制)
1.找素材,需要一个2d的角色,以及动画(我这个素材是unity自带的)
在这里分享几个找素材的网站,我经常在上面找:
https://opengameart.org/
https://www.spriters-resource.com/
https://www.100font.com/
2.把素材切割好,并且做成动画帧......
(保证所有动画都由一个控制器控制,没有的话把多余的控制器删了,全部拖到一个控制器就可以了)
3.把控制器上的动画删掉,创建两个混合树,并且创建两个float类型的变量来控制:
4.混合树里面分别加上动画
(这些都是写代码前的准备)
5.下面开始写代码,把其中一个精灵图片拖到Hierarchy界面,并且改名字为Player,设置层级为1,避免地板等东西覆盖;
6.给这个精灵添加动画控制器Animator,并且加上刚刚做的动画控制器;
7.加上刚体Rigidbody2D;因为是2d角色,所以用2d刚体;
8.创建一个脚本起名:Player_Ctrl,并且挂上去;
9.编辑脚本:
1 public class Player_Ctrl : MonoBehaviour 2 { 3 float moveSpeed = 2; 4 Rigidbody2D rig2D; 5 Animator ani; 6 float inputX, inputY;//按下的XY 7 float stopX, stopY;//最后停留时的XY 8 9 void Start() 10 { 11 rig2D = GetComponent<Rigidbody2D>(); 12 ani = GetComponent<Animator>(); 13 } 14 15 void Update() 16 { 17 inputX = Input.GetAxisRaw("Horizontal"); 18 inputY = Input.GetAxisRaw("Vertical"); 19 } 20 21 void FixedUpdate() 22 { 23 PlayerMove(); 24 Player_Attack(); 25 } 26 27 void PlayerMove() { 28 Vector2 input = new Vector2(inputX, inputY).normalized; 29 rig2D.velocity = input * moveSpeed; 30 31 if (!isAttack) 32 { 33 if (input != Vector2.zero) 34 { 35 ani.Play("Walk"); 36 stopX = inputX; 37 stopY = inputY; 38 ani.SetFloat("InputX", stopX); 39 ani.SetFloat("InputY", stopY); 40 } 41 else 42 { 43 ani.Play("Idle"); 44 } 45 } 46 } 47 }
亲测可用~
有问题欢迎滴滴我~大家一起进步呀!