建站网站知乎,wordpress设置阅读全文,wordpress软件,银行网站源码上个博客我们做出了人物的动画机和人物移动跳跃#xff0c;接下来我们要做出人物展现出来的动画了 我们接下来就要用到动画机了#xff0c;双击我们的动画机#xff0c;进入到这样的页面#xff0c;我这是已经做好的页面#xff0c;你们是没有这些箭头的 依次像我一样连接…上个博客我们做出了人物的动画机和人物移动跳跃接下来我们要做出人物展现出来的动画了 我们接下来就要用到动画机了双击我们的动画机进入到这样的页面我这是已经做好的页面你们是没有这些箭头的 依次像我一样连接起来然后点击Parameters点击name旁边的小箭头选择 int 类型 之后我们随便选择一条线点击Conditions的 选择如图所示的样子选择state和Equals喔 然后就有所不同的
所有指向Idle的我们的值都设置为0所有指向Move的我们都设置为1所有指向Jump的我们都设置成2所有指向Fall的我们都设置成3。
把Has Exit Time勾选取消掉就是不勾选然后展开setting把Transition Duratior的值都改为0 之后就可以进入我们的代码部分了把我们之前的C#代码打开改成这个
using Unity.VisualScripting;
using UnityEngine;public class Move : MonoBehaviour
{// 定义私有变量rb类型为Rigidbody2D用于存储刚体组件的引用private Rigidbody2D rb; // 定义私有变量coll类型为BoxCollider2D用于存储碰撞体组件的引用private BoxCollider2D coll;// 定义私有变量anim类型为Animator用于存储动画控制器组件的引用private Animator anim;// 定义公共变量JumpSpeed类型为float用于存储跳跃速度public float JumpSpeed 5f; // 定义公共变量MoveSpeed类型为float用于存储移动速度public float MoveSpeed 5f; // 定义公共变量Level类型为float用于存储水平输入值public float Level 0f;// 定义私有变量JumpableGround类型为LayerMask用于存储可以跳跃的地面层[SerializeField] private LayerMask JumpableGround;// 定义一个名为MoveState的枚举包含idle静止、run跑步、jump跳跃、fall下落四个状态private enum MoveState {idle, run, jump, fall}// Start方法在脚本实例化后、第一帧更新前被调用private void Start(){// 获取并赋值当前GameObject上的Rigidbody2D组件到rb变量rb GetComponentRigidbody2D();// 获取并赋值当前GameObject上的BoxCollider2D组件到coll变量coll GetComponentBoxCollider2D();// 获取并赋值当前GameObject上的Animator组件到anim变量anim GetComponentAnimator();}// Update方法每帧调用一次private void Update(){// 获取水平方向的输入值不进行平滑处理Level Input.GetAxisRaw(Horizontal);// 设置角色的水平速度为Level乘以MoveSpeed垂直速度保持不变rb.velocity new Vector2(Level * MoveSpeed, rb.velocity.y);// 如果按下跳跃按钮并且角色在地面上if (Input.GetButtonDown(Jump) IsGround()) {// 设置角色的垂直速度为JumpSpeed水平速度保持不变rb.velocity new Vector2(rb.velocity.x, JumpSpeed);}// 调用UpdateStates方法来更新动画状态UpdateStates();}// UpdateStates方法用于更新角色的动画状态private void UpdateStates(){ // 定义一个MoveState类型的变量stateMoveState state;// 根据水平输入值翻转角色if (Level 0f){// 如果输入值大于0设置状态为run跑步并设置角色不翻转state MoveState.run;this.gameObject.GetComponentSpriteRenderer().flipX false;}else if (Level 0f){// 如果输入值小于0设置状态为run跑步并设置角色翻转state MoveState.run;this.gameObject.GetComponentSpriteRenderer().flipX true;}else{// 如果没有水平输入设置状态为idle静止state MoveState.idle;}// 根据角色的垂直速度设置跳跃或下落状态if (rb.velocity.y .1f){// 如果垂直速度大于0.1设置状态为jump跳跃state MoveState.jump;}else if (rb.velocity.y -.1f){// 如果垂直速度小于-0.1设置状态为fall下落state MoveState.fall;}// 使用Animator组件设置名为state的整数参数值为state的枚举整数值anim.SetInteger(state, (int)state);}// IsGround方法用于检测角色是否在地面上private bool IsGround(){// 使用Physics2D.BoxCast方法进行射线投射检测角色下方是否有可以跳跃的地面层return Physics2D.BoxCast(coll.bounds.center, coll.bounds.size, 0f, Vector2.down, .1f, JumpableGround);}
} 这个代码是我在网上面找的他用到的IsGroup()很精髓如果我们不这么做就需要自己设置IsGroup之后true和false来回转换还需要加Unity里面的碰撞体方法进行判断。 这里面就能看到我刚才为什么要让你们设置指向谁的必须是几了。
然后我们保存一下回到我们的Unity运行一下就可以看到我们人物的移
动动作和跳起动作了。 如果没有成功跳起来的话
我们依次点击Tilemap—— Layer——Add Layer.. 添加一个Ground 回到Tilemap选中Ground 点击Player选择Move文件点击Jumpable Ground 切换到Ground如果这些部分不设置的话可能我们C#代码里面的IsGround就用不了 最后运行