一、角色跳跃的实现
我们用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);
}
}