我是一个新手,我正在尝试做一个简单的2D统一自上而下游戏,所以我做了一个玩家控制器脚本,试图让我的角色行走,奔跑和爬行。但在执行它的时候,我不能让我的角色在其他一切正常的情况下改变奔跑速度。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
SpriteRenderer rend;
public float movementSpeed = 3.0f;
Vector2 movement = new Vector2();
Rigidbody2D rigidbody2D;
[SerializeField] float normalSpeed, runSpeed, crouchSpeed;
Animator animator;
void Start()
{
rend = GetComponent<SpriteRenderer>();
animator = GetComponent<Animator>();
rigidbody2D = GetComponent<Rigidbody2D>();
}
void Update()
{
UpdateState();
}
private void FixedUpdate()
{
MoveCharacter();
}
private void MoveCharacter()
{
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
if (movement.x > 0)
{
rend.flipX = true;
}
else if (movement.x < 0)
{
rend.flipX = false;
}
rigidbody2D.velocity = movement * movementSpeed;
}
private void UpdateState()
{
//걷기
if (Mathf.Approximately(movement.x, 0) && Mathf.Approximately(movement.y, 0))
{
animator.SetBool("isMove", false);
}
else
{
animator.SetBool("isMove", true);
}
//달리기
if (Input.GetKey(KeyCode.LeftShift)){
movementSpeed = runSpeed;
animator.SetBool("isRun", true);
}
else{
movementSpeed = normalSpeed;
animator.SetBool("isRun", false);
}
//웅크리기
if (Input.GetKey(KeyCode.LeftControl))
{
movementSpeed = crouchSpeed;
animator.SetBool("isCrouch", true);
}
else
{
movementSpeed = normalSpeed;
animator.SetBool("isCrouch", false);
}
//대기상태 x방향 설정
if (movement.x > 0)
{
animator.SetFloat("horIdle", 1);
animator.SetFloat("verIdle", 0);
}
else if (movement.x < 0)
{
animator.SetFloat("horIdle", -1);
animator.SetFloat("verIdle", 0);
}
//대기상태 y방향 설정
if (movement.y > 0)
{
animator.SetFloat("verIdle", 1);
animator.SetFloat("horIdle", 0);
}
else if (movement.y < 0)
{
animator.SetFloat("verIdle", -1);
animator.SetFloat("horIdle", 0);
}
animator.SetFloat("horizontal", movement.x);
animator.SetFloat("vertical", movement.y);
}
}
这是我写的代码为球员的momvement和我找不到任何问题在这里。
2条答案
按热度按时间1tuwyuhd1#
修改
if
else
语句,检查用户输入,变为:您正在使用两个
if-else
语句来检查用户输入。对于每个if
,都有一个else
,因此当没有用户输入时,必须执行哪个else
是不明确的。zpgglvta2#
我通常喜欢让我的
if
语句尽可能简单,这样,引入逻辑错误的可能性就更小。