using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; [RequireComponent(typeof(Rigidbody2D))] public class MyPlayer : MonoBehaviour { [Header("玩家平时地面移动的速度")] public float speed = 10f; [Header("玩家跳跃力度的大小")] public float jumpForce = 10f; private Rigidbody2D m_rigidbody;//自身刚体租价 private int inputDir;//当前输入方向,-1左,1右,0静止 private bool isLanding;//记录自己当前是否着地 void Start() { Init();//初始化一些参数 } void Update() { } void FixedUpdate() { Move();//处理水平移动 } //初始化函数 private void Init() { m_rigidbody = GetComponent();//找到自己身上的刚体组件 } //移动函数,处理水平方向移动 private void Move() { //直接修改刚体速度 m_rigidbody.velocity = new Vector2(inputDir * speed,//水平方向以输入方向乘以预设速度大小 m_rigidbody.velocity.y);//垂直方向不变 } //碰撞检测代码 // _____ _ _ _ _ // / ____| | | (_) (_) // | | ___ | | |_ ___ _ ___ _ __ // | | / _ \| | | / __| |/ _ \| '_ \ // | |___| (_) | | | \__ \ | (_) | | | | // \_____\___/|_|_|_|___/_|\___/|_| |_| private void OnCollisionEnter2D(Collision2D collision)//当有物体碰上 { if(collision.transform.tag == "地面") isLanding = true;//若碰撞物体标签为地面,标记自身着地 } private void OnCollisionExit2D(Collision2D collision)//当有碰撞体离开 { if(collision.transform.tag == "地面") isLanding = false;//若碰撞物体标签为地面,标记自身未着地 } // 以下为操作监听事件 // _____ _ _____ _ // |_ _| | | / ____| | | // | | _ __ _ __ _ _| |_| (___ _ _ ___| |_ ___ _ __ ___ // | | | '_ \| '_ \| | | | __|\___ \| | | / __| __/ _ \ '_ ` _ \ // _| |_| | | | |_) | |_| | |_ ____) | |_| \__ \ || __/ | | | | | // |_____|_| |_| .__/ \__,_|\__|_____/ \__, |___/\__\___|_| |_| |_| // | | __/ | // |_| |___/ public void OnMove(InputAction.CallbackContext context)//OnMove事件 { //决定输入方向inputDir if(!context.ReadValue().Equals(0)) inputDir = (context.ReadValue() > 0) ? 1 : -1; else inputDir = 0; } public void OnJump(InputAction.CallbackContext context)//OnJump事件 { //当按下跳跃键 if(context.performed) { if(isLanding)//如果当前着地 //给予自身刚体 m_rigidbody.velocity = new Vector2(m_rigidbody.velocity.x,//水平方向速度不变 jumpForce);//垂直方向给予预设跳跃速度 } } }