最近重置了系统,同一套代码,同一个版本的编译器出现了及其崩溃的Bug
我在给物体制做移动时,水平增加速度,但是竖直方向上速度会出现一个固定值,而且随着AD的输入有正负区别
代码如下
/// <summary>
/// 控制玩家移动
/// </summary>
public class PlayerMove : MonoBehaviour
{
//组件部件
public State state;
private Rigidbody2D my_Body2D; //获取刚体组件
private Transform my_Transform; //获取位置组件
[Header("控制变量")]
public float moveSpeed; //移动速度
public float jumpSpeed; //跳跃速度/高度
public float rollSpeed; //滚动速度
public float roolTime; //滚动持续时间
private float time; //倒计时暂存变量
private bool ground;
[Header("玩家状态")]
public bool isGround; //玩家在地面
public bool isRoll; //玩家在滚动
void Start()
{
time = roolTime; //倒计时暂存变量
my_Body2D = GetComponent<Rigidbody2D>(); //获取刚体组件
my_Transform = GetComponent<Transform>(); //获取位置组件
}
void Update()
{
Move();
Jump();
Turn();
}
/// <summary>
/// 移动函数
/// </summary>
private void Move()
{
//移动代码
//移动范围数值-1,0,1 无中间插值
//float horizontal = Input.GetAxisRaw("Horizontal");
//移动范围-1 -- 1 有中间插值
float horizontal = Input.GetAxis("Horizontal");
my_Body2D.velocity = new Vector2(horizontal * moveSpeed * Time.fixedDeltaTime*50, my_Body2D.velocity.y);
//滚动冲刺
if (Input.GetKeyDown(KeyCode.K))
{
//开始滚动加速
moveSpeed *= rollSpeed;
//打上滚动标记
isRoll = true;
}
//进入滚动,开始倒计时,滚动持续时间
if (isRoll)
{
time -= Time.deltaTime;
}
//倒计时结束,且在滚动状态
if (isRoll && (time < 0))
{
//速度初始化
moveSpeed /= rollSpeed;
//倒计时初始化
time = roolTime;
//取消滚动标记
isRoll = false;
}
}
/// <summary>
/// 跳跃函数
/// </summary>
private void Jump()
{
if (Input.GetKeyDown(KeyCode.W) && isGround)
{
isGround = false;
my_Body2D.velocity = new Vector2(my_Body2D.velocity.x, jumpSpeed * Time.fixedDeltaTime * 50);
}
}
/ <summary>
/// 转向函数
/// </summary>
private void Turn()
{
//面向左
if (Input.GetKeyDown(KeyCode.A))
{
my_Transform.transform.localScale = new Vector3(-1, 1, 1);
}
//面向右
if (Input.GetKeyDown(KeyCode.D))
{
my_Transform.transform.localScale = new Vector3(1, 1, 1);
}
}
/// <summary>
/// 玩家碰撞函数,判断玩家所处位置,进行相关状态输出
/// </summary>
/// <param name="collision">接触的物体</param>
public void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "Ground")
{
isGround = true;
}
}
}