【问题标题】:NullReferenceException: Object reference not set to an instance of an object Player.AnimatePlayer () (at Assets/scripts/Player.cs:53) Player.Update [duplicate]NullReferenceException:对象引用未设置为对象 Player.AnimatePlayer () 的实例(在 Assets/scripts/Player.cs:53)Player.Update [重复]
【发布时间】:2025-11-26 14:35:01
【问题描述】:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player: MonoBehaviour
{
    [SerializeField]
    private float moveForce = 1f;
    [SerializeField]
    private float jumpForce = 11f;
    private float movementx;
    private Rigidbody2D myBody;
    private SpriteRenderer sr;
    private Animator anim;
    private string WALK_ANIMATION = "walk";
    // Start is called before the first frame update
   
    private void awake()
    {
        myBody = GetComponent<Rigidbody2D>();
        sr = GetComponent<SpriteRenderer>();
        anim = GetComponent<Animator>();

    }
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        PlayerMoveKeyboard();
        AnimatePlayer();  // error is coming in this line
//when i am trying call this function above it is showing error which i have written down
    }
    void PlayerMoveKeyboard ()
    {
        movementx = Input.GetAxisRaw("Horizontal");
        transform.position += new Vector3(movementx, 0f, 0f) * moveForce*Time.deltaTime;
      
    }
    void AnimatePlayer()
    {
        if(movementx>0)
        {
            anim.SetBool(WALK_ANIMATION, true);
        }
        else if(movementx<0)
        {
            anim.SetBool(WALK_ANIMATION, true);

        }
        else
        {
            anim.SetBool(WALK_ANIMATION, false); // error is coming in this line

        }
    }
}

这个错误是统一的

NullReferenceException:对象引用未设置为对象的实例 Player.AnimatePlayer () (在 Assets/scripts/Player.cs:53) Player.Update () (在 Assets/scripts/Player.cs:34)*/

【问题讨论】:

  • 好吧,你的awake 方法被调用了吗?如果是,GetComponent&lt;Animator&gt; 是否返回非空值?请注意,您不应该只解释您预期会发生什么,而是您已经证明正在通过调试器或日志记录发生。
  • 我同意 Jon Skeet 的观点。尝试在 Update 上记录 anim 的值以查看它返回的内容。如果它返回null,那么由于某种原因,anim 没有设置为您的GetComponent&lt;&gt;()。这可能是因为两个原因:Awake() 未被调用,或者因为您可能没有附加到 GameObject 的 Animator 组件。
  • @JonSkeet 先生,我叫醒了,但它不工作,GetComp 已经在那里.. 它不工作(非常感谢你的帮助)
  • @undevable 先生实际上我是新手,你在最后一个动画师说的可能没有附加我不明白,但我已经附加了动画控制器......(谢谢非常有帮助)
  • 在哪里你给awake()打过电话?您的代码中没有任何迹象。 “它不起作用”真的不能告诉我们太多。

标签: c# unity3d game-engine


【解决方案1】:

大写唤醒函数:

private void Awake()
{
    myBody = GetComponent<Rigidbody2D>();
    sr = GetComponent<SpriteRenderer>();
    anim = GetComponent<Animator>();
}

【讨论】:

  • 完成了,先生,这是一个错误,但没有帮助
  • 在 Unity 编辑器中,单击您的 Player 对象并在您的原始帖子中分享 Inspector 的屏幕截图。在您提到的行上唯一可能为空的是名为“anim”的对象:“anim.SetBool(WALK_ANIMATION, false);”。我们需要确保您的 Player 对象附加了一个 Animator 组件,并且填充了 Animator 组件上的 Controller 属性。
  • 请添加一些上下文来解释代码部分(或检查您是否没有错误地将所有问题格式化为代码)。 * 在写了这么多之后一直这么说,我是新手,所以我不能发布图片,因为链接只可用所以我在这里发布链接请帮助先生easyupload.io/alutyo
  • 看起来不错,我实际上已经完成了相同的教程。嗯..我不太确定还有什么问题。您确定在大写 Awake 函数后保存了脚本吗?如果这不是问题,我建议重新观看您遇到错误的讲座。对于讲师采取的每一步,请确保您的每一步看起来都一样。
  • 太棒了!祝你在课程的其余部分好运。如果对您有帮助,请随时接受此答案或投票。其他人对答案投了反对票,但我不知道为什么。我怀疑是知道 C# 但不熟悉 Unity 的人,所以他们不知道为什么我的答案是正确的。
最近更新 更多