如何修复“错误 CS0165:使用未分配的局部变量”?

问题描述 投票:0回答:2

我一直在尝试找出一种方法,通过使用整数来根据 horizontalInput 的值切换动画。我遇到了一个问题,其中包含错误“CS0165”。

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”添加为变量,但这只会产生其他错误,所以我真的不确定该怎么做,如果你们中的任何人能指出问题所在,我将非常感激。

(附:我对编码还很陌生,还有很多东西要学)。

谢谢!

c# unity3d error-handling local-variables
2个回答
0
投票

我认为错误是

anim
没有被初始化。

你在

Start
方法中这样做,但编译器不知道你程序的生命周期。

您可以执行

private Animator anim = null;
并在
anim
(或方法之上)中使用它之前检查
Update
是否不为空


0
投票

问题是您正在定义一个没有默认值的变量

state
。然后你有一个
if
来定义它,然后是一个
else if
来定义它。但是,如果两个逻辑分支都不匹配怎么办?那么
state
还是没有定义! (请注意,这仅适用于方法范围内的变量。如果您定义类范围的变量,它具有默认值,尽管它对于任何引用类型都将为空。)

解决这个问题很简单。为

state
定义一个初始值,或者添加一个最终的
else
逻辑分支以在其他分支不匹配时将其设置为某个值。

ETA 还值得注意的是,您可以将逻辑简化为单个

!= 0f
语句,而不是两个单独的 if 检查。

© www.soinside.com 2019 - 2024. All rights reserved.