Unity2D入门(五):角色跳跃、动画切换
一、角色跳跃的实现 我们用GetButtonDown函数来获得键盘输入
public float jumpforce; if (Input.GetButtonDown("Jump") ) { rb.velocity = new Vector2(rb.velocity.x, jumpforce * Time.deltaTime); }
不过这样并不完善,因为在这种情况下角色可以不落地一直跳,后面我们会为他添加限制条件。
二、动画切换 目前角色已经有三种运动状态了:奔跑、静止、跳跃(这个状态其实要分成两个子状态:跳起和下落),按照笔记(三)中的方法,为角色添加好这几种状态的动画。 其实和写代码一样,判断运动状态间的转换也是需要条件的,打开Animator窗口下的Parameters窗口,为动画切换添加判断条件参数:float类型的running角色移动的速度,bool类型的jumping判断角色是否处在跳起状态,bool类型的falling判断是否处在下落状态,以及bool类型的idle判断角色是否处在静止状态。 来到BaseLayer窗口,可以看到我们为角色添加的动画状态,点击动画->右键->Make Transition->引出一条箭头指向转换后的动画。
设置完成后点击箭头,看到Inspector窗口中的Conditions来为每一个箭头添加转换的条件参数。 idle->jump:jumping true; idle->run:running Greater 0.1; run->idle:running Less 0.1; run->jump:jumping true; jump->fall:falling true jumping false; fall->idle:falling false idle true;
代码实现部分
public float jumpforce; //角色跳跃力度 public float speed; //角色的速度 public Rigidbody2D rb; //获取角色刚体组件 public Animator anim; //获取角色动画组件 void Start(){ anim = GetComponent<Animator>(); } void Update(){ SwitchAnim(); } void Movement(){ float facedirection = Input.GetAxisRaw("Horizontal"); //控制角色面朝方向用 float Horizontalmove=Input.GetAxis("Horizontal"); //角色移动 if (Horizontalmove != 0) { rb.velocity = new Vector2(Horizontalmove * speed*Time.deltaTime, rb.velocity.y); anim.SetFloat("running", Mathf.Abs(facedirection)); } if (facedirection != 0) { transform.localScale = new Vector3(facedirection, 1, 1); } //角色跳跃 if (Input.GetButtonDown("Jump") ) { rb.velocity = new Vector2(rb.velocity.x, jumpforce * Time.deltaTime); anim.SetBool("jumping", true); } } void SwitchAnim(){ anim.SetBool(“idle”,false); if(anim.GetBool(“jumping”){ if(rb.velocity.y<0){ anim.SetBool(“jumping”,false); anim.SetBool(“falling”,true); } } if(Mathf.Abs(rb.velocity.x)<0.1f){ anim.SetBool(“idle”,true); anim.SetFloat(“running”,0); } }