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<Animator>
是否返回非空值?请注意,您不应该只解释您预期会发生什么,而是您已经证明正在通过调试器或日志记录发生。
我同意 Jon Skeet 的观点。尝试在 Update 上记录 anim
的值以查看它返回的内容。如果它返回null
,那么由于某种原因,anim
没有设置为您的GetComponent<>()
。这可能是因为两个原因: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: 未将对象引用设置到对象的实例。”异常复现