using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Interactions; using UnityEngine.UI; public class M_Player : MonoBehaviour { // Start is called before the first frame update private IndexRecoder indexRecoder;//记录组件,内存方便修改的参数 private Vector2 velocity;//逻辑速度,通过计算获得,最后加在理论速度上 private Rigidbody2D m_rigidbody;//自身刚体组件 private int inputDir;//输入方向方向,-1\0\1 //public GameObject bullet;//子弹预制体 private int faceDir;//面部朝向,-1、1 private float runSpeedMultiple = 1f;//速度倍率,在按下和释放跑步后被修改 public Interactive catched;//所捕捉到的可交互对象 void Start() { //获取数值记录组件,方便策划修改暴露参数 indexRecoder = FindObjectOfType(); //获取自身刚体组件 m_rigidbody = GetComponent(); //默认面部朝右 faceDir = 1; } // Update is called once per frame void Update() { } void FixedUpdate() { Move(); } //当水平轴有输入 public void OnMoveHorizons(InputAction.CallbackContext context) { float value = context.ReadValue(); //输入只有对移动方向和面部朝向的更改 if(value > 0) { inputDir = 1; faceDir = 1; } else if(value < 0) { inputDir = -1; faceDir = -1; } else inputDir = 0; //修改面部朝向 transform.localScale = new Vector3( Mathf.Abs(transform.localScale.x)*faceDir, transform.localScale.y, transform.localScale.z); } public void OnFire() { // GameObject temp = Instantiate(bullet,m_rigidbody.position,Quaternion.identity); // temp.GetComponent().SetDir(faceDir); } private void Move() { //指定水平方向的速度 m_rigidbody.velocity = new Vector2(indexRecoder.playerMoveSpeed* //记录文件中的玩家速度乘以 inputDir*//输入的方向乘以 runSpeedMultiple,//速度的倍率,对付跑步时候的需要 m_rigidbody.velocity.y//y轴的速度不变 ); } private void OnJump() { //跳的时候给一个垂直向上的速度 m_rigidbody.velocity = new Vector2(0,indexRecoder.playerJumpSpeed); } public void OnRun(InputAction.CallbackContext context) { if(context.started)//如果刚按下跑步键 { runSpeedMultiple = indexRecoder.runSpeedMultiple;//把本地的速度倍率变成数值记录器中的倍率 } else if(context.canceled)//如果刚松开跑步键 { runSpeedMultiple = 1f;//恢复本地速度倍率为1 } } public void OnInteraction(InputAction.CallbackContext context) { if(context.started) { if(catched != null) { catched.ShowInfo(); } } } public void OnCoding(InputAction.CallbackContext context) { if(context.canceled) { if(catched != null) { if(context.duration < indexRecoder.dotRoLineTime)//如果小于界限时间 { catched.Coding("."); } else { catched.Coding("-"); } } } } }