Unity2D学习记录篇——角色移动实现

本文详细介绍了如何在Unity中使用动画状态机设置角色的移动和跳跃动画,包括Idle、Run、Jump和Fall状态的划分,以及相应的脚本控制逻辑,如RigidBody2D和SpriteRenderer的运用,以及二段跳的实现。
摘要由CSDN通过智能技术生成

一、角色移动

1.动画状态机设置:

(1):角色移动动作通常作分为Idle,Run,Jump,Fall

(2):然后在细分一下:地面动作(Idle,Run),空中动作(Jump,Fall)

(3):具体设置如下:

在Animator界面 右键-> create sub-state创建一个子状态(GroundState)和 (AirState) 

GroundState内部:

AirState内部:

参数设置:

然后我们看一下这些state的transition条件:

isGround用于判断Player是否在地面,在地面就进入GroundState,反之AirState

isRun是用来判断Player移动的,我们进入GroundState内部

而我们从子状态退出到AirState的条件也是isGround判断接触地面(Run,Idle同理)

然后我们进入到AirState内部,我们初始的状态连接到Fall上面,保持Player离开地面时,执行Fall动画,同时Fall动画退出子状态条件:isGround = true;

最后,经过这样,Idle-Run-Fall的动画状态过渡就设计好啦

二、角色跳跃

1.动画状态机设置:

我们创建参数isJump(Trigger类型)

注:Trigger类型会自动变成false,个人理解好用于一些触发的操作吧~

因为跳跃也会下降嘛,我们也是会进入AirState状态的,所以Ground到AirState的过渡条件:

然后我们进入AirState,注意我们是Jump操作,我们过渡的条件需要指向Jump动画,如图:

等Jump动画结束呢,我们直接过渡到Fall动画,如图:

这样,Player基本动画过渡就实现啦

接下来就是脚本控制了

三、脚本基本思路

角色移动:RigidBody2D组件

        private float dix; // 角色水平方向
        // 获取角色的水平方向
        dix = Input.GetAxisRaw("Horizontal");
        // 设置速度
        rigidbody2D.velocity = new Vector2(dix * runSpeed,rigidbody2D.velocity.y);
        // 判断是否移动 当前值大于一个很小的值
        isMove = Mathf.Abs(rigidbody2D.velocity.x) > Mathf.Epsilon;
        //Debug.Log("当前的isMove:" + isMove);
        animator.SetBool("isRun", isMove);

 角色左右翻转:我们使用SpriteRenderer组件的FIipX属性

角色跳跃:

1.我们需要判断Player是否接触地面

   在创建一个GameObject放在Player的脚下检测是否接触地面

    /// <summary>
    /// 接触地面检测
    /// </summary>
    public void IsTouchGround()
    {
        isGround = Physics2D.OverlapCircle(pointGround.transform.position, 0.05f, LayerMask.GetMask("Ground"));
        animator.SetBool("isGround", isGround);
    }

2.然后就到了跳跃实现(二段跳~我们可以Fall的状态返回DoubleJump的状态)

 /// <summary>
 /// 角色跳跃
 /// OverlapCircle 检测2D圆形区域内碰撞的方法
 /// </summary>
 public void Jump()
 {
     if (isGround)
     {
         isCanDouble = true;
     }
     // 按下space键
     if (Input.GetButtonDown("Jump"))
     {
         // 如果在地面,可以跳跃
         if (isGround)
         {
             // 设置向上速度
             rigidbody2D.velocity = Vector2.up * new Vector2(0f, jumpSeed);
             animator.SetTrigger("isJump");
         }
         else if(isCanDouble)
         {
             // 二段跳
             rigidbody2D.velocity = Vector2.up * new Vector2(0f, jumpSeed + 1.5f);
             animator.SetTrigger("isCanDouble");
             isCanDouble = false;
         }
     }
 }

请大家多多指教啦~

运行结果如下:

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好,我可以回答这个问题。Unity2D角色移动可以通过编写脚本来实现。您可以使用Input.GetAxis函数获取水平和垂直输入,然后使用Transform.Translate函数将角色移动到新的位置。您还可以使用Rigidbody2D组件来实现更流畅的移动。希望这可以帮助您。 ### 回答2: Unity2D角色移动可以通过以下几种方式实现: 1. 使用刚体组件(Rigidbody2D):将刚体组件添加到角色对象中,然后通过代码控制刚体的速度(rigidbody2D.velocity)或者力(rigidbody2D.AddForce)进行角色移动。可以通过键盘输入或者触摸输入来控制角色移动方向。 2. 使用Transform组件:直接通过修改角色对象的Transform组件中的position属性,来改变角色的位置。可以使用键盘输入或者触摸输入来控制角色移动方向。 3. 使用Translate方法:在更新角色移动的函数中,使用Translate方法来改变角色的位置,可以通过键盘输入或者触摸输入来控制角色移动方向。 4. 使用CharacterController组件:将CharacterController组件添加到角色对象中,然后通过代码控制CharacterController的Move函数来改变角色的位置。可以通过键盘输入或者触摸输入来控制角色移动方向。 需要注意的是,以上方法都需要在Update函数中进行角色移动的操作,并且要根据游戏需求进行相应的优化,例如添加碰撞检测、地图边界限制等。另外,角色移动过程中还可以结合动画、音效等来提高游戏的表现力和用户体验。 ### 回答3: 在Unity 2D中,角色移动可以通过几种不同的方法来实现。其中最常用的方法是使用Rigidbody2D组件来控制角色移动。 首先,需要在角色对象上添加Rigidbody2D组件。然后,可以通过编写脚本来控制角色移动。以下是一个简单的示例脚本: ``` using UnityEngine; public class PlayerMovement : MonoBehaviour { public float moveSpeed = 5f; // 角色移动速度 private Rigidbody2D rb; private void Start() { rb = GetComponent<Rigidbody2D>(); } private void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); // 获取水平方向的输入 float moveVertical = Input.GetAxis("Vertical"); // 获取垂直方向的输入 Vector2 movement = new Vector2(moveHorizontal, moveVertical); // 构建角色移动的向量 rb.velocity = movement * moveSpeed; // 设置角色的速度 } } ``` 在这个示例中,我们首先获取用户的水平和垂直输入,并将其构建为一个向量。然后,通过将该向量与移动速度相乘,我们得到了角色的速度。最后,我们使用Rigidbody2D组件的velocity属性来设置角色的速度。 通过调整moveSpeed变量的值,可以改变角色移动速度。你也可以根据自己的需求来修改脚本,以满足不同的移动需求,如斜向移动、限制移动范围等。 以上就是使用Rigidbody2D组件来实现Unity 2D角色移动的简单示例。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值