我一直试图找出一种方法来切换动画取决于通过使用整数的horizontalInput的值。我遇到了一个问题,虽然其中包括在错误“CS 0165”。
public class PlayerMovement : MonoBehaviour
{
float horizontalInput;
public float runSpeed = 3.0f;
float verticalInput;
private Animator anim;
private enum MovementState { Soldier, Running }
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
//Movement
horizontalInput = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector2.right * Time.deltaTime * runSpeed * horizontalInput);
verticalInput = Input.GetAxisRaw("Vertical");
transform.Translate(Vector2.up * Time.deltaTime * runSpeed * verticalInput);
//Switching Animations
MovementState state;
if (horizontalInput > 0f)
{
state = MovementState.Running;
}
else if (horizontalInput < 0f)
{
state = MovementState.Running;
}
anim.SetInteger("state", (int)state);
我一直在试图理解我的代码有什么问题,但似乎无法找出我遗漏了什么。尝试添加“state”作为变量,但除了创建其他错误之外什么也没有做,所以我真的不知道该怎么做,如果你们中的任何人能指出错误,我会非常感激。
(P.S.我是一个相当新的编码,仍然有相当多的学习)。
谢谢大家!
2条答案
按热度按时间ar7v8xwq1#
问题是你定义了一个没有默认值的变量
state
。然后你有一个if
,它将定义它,然后一个else if
将定义它。但是如果两个逻辑分支都不匹配呢?那么state
仍然没有定义!(注意,这只适用于方法作用域中的变量。如果你定义了一个类作用域的变量,它 * 将 * 有一个默认值,尽管它对于任何引用类型都将是null。)解决这个问题的方法很简单,要么为
state
定义一个初始值,要么添加一个最终的else
逻辑分支,以便在其他分支不匹配时将其设置为某个值。ETA还值得注意的是,您可以将逻辑简化为一个
!= 0f
语句,而不是两个单独的if检查。erhoui1w2#
编辑:忘了那个吧,那是错的
我认为错误是
anim
未初始化。你在
Start
方法中做了这件事,但是编译器不知道你程序的生命周期。您可以执行
private Animator anim = null;
,并在Update
中(或在该方法之上)使用它之前检查anim
是否不为null