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

Posted

技术标签:

【中文标题】NullReferenceException:对象引用未设置为对象 Player.AnimatePlayer () 的实例(在 Assets/scripts/Player.cs:53)Player.Update [重复]【英文标题】:NullReferenceException: Object reference not set to an instance of an object Player.AnimatePlayer () (at Assets/scripts/Player.cs:53) Player.Update [duplicate] 【发布时间】:2021-09-30 15:11:03 【问题描述】:
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()打过电话?您的代码中没有任何迹象。 “它不起作用”真的不能告诉我们太多。 【参考方案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 的人,所以他们不知道为什么我的答案是正确的。

以上是关于NullReferenceException:对象引用未设置为对象 Player.AnimatePlayer () 的实例(在 Assets/scripts/Player.cs:53)Player.U的主要内容,如果未能解决你的问题,请参考以下文章

访问对象数组-运行时 System.NullReferenceException [重复]

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

对象引用未设置为对象的实例(NullreferenceException未被用户代码处理)

AutoMapper.Mapper.CreateMap报“System.NullReferenceException: 未将对象引用设置到对象的实例。”异常复现

什么是 NullReferenceException,我该如何解决?

什么是 NullReferenceException,我该如何解决?