unity3d 如何修复“错误CS0165:使用未赋值的局部变量“”?

xmakbtuz  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(410)

我一直试图找出一种方法来切换动画取决于通过使用整数的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.我是一个相当新的编码,仍然有相当多的学习)。
谢谢大家!

ar7v8xwq

ar7v8xwq1#

问题是你定义了一个没有默认值的变量state。然后你有一个if,它将定义它,然后一个else if将定义它。但是如果两个逻辑分支都不匹配呢?那么state仍然没有定义!(注意,这只适用于方法作用域中的变量。如果你定义了一个类作用域的变量,它 * 将 * 有一个默认值,尽管它对于任何引用类型都将是null。)
解决这个问题的方法很简单,要么为state定义一个初始值,要么添加一个最终的else逻辑分支,以便在其他分支不匹配时将其设置为某个值。
ETA还值得注意的是,您可以将逻辑简化为一个!= 0f语句,而不是两个单独的if检查。

erhoui1w

erhoui1w2#

编辑:忘了那个吧,那是错的
我认为错误是anim未初始化。
你在Start方法中做了这件事,但是编译器不知道你程序的生命周期。
您可以执行private Animator anim = null;,并在Update中(或在该方法之上)使用它之前检查anim是否不为null

相关问题