对象引用并为其分配新类 [duplicate]

Object reference and assigning new class with it [duplicate]

提问人:user3072143 提问时间:7/4/2018 最后编辑:user3072143 更新时间:7/21/2018 访问量:42

问:

尝试传递对象引用并在新脚本/类中设置它。 播放器 .cs

如何正确引用和分配

C# 对象 unity-game-engine nullreferenceexception

评论

0赞 Bizhan 7/4/2018
当你想在下一行扔掉它时,你不需要实例化。PlayerPlayer = NewPlayer;
0赞 Bizhan 7/4/2018
所以根据照片,没有实例化。实例化,你就可以开始了Player.AchievementPlayer.Achievement
0赞 user3072143 7/4/2018
这是一个错误,正在测试东西。这是所有问题出错的地方 puu.sh/AQune/9ff16e6b16.png AchievementList 是一个 Unity 文本字段
0赞 Bizhan 7/4/2018
选择附加的游戏对象。然后在检查器中找到。其值应为<无>。将 UI 文本拖放到其上PanelUpdateAchievementList
1赞 Bizhan 7/4/2018
发现另一个错误:是错误的。构造函数在 monobehaviour 中不起作用public PanelUpdate(PlayerDetails NewPlayer) { PlayerDetails Player = new PlayerDetails(); Player = NewPlayer; }

答:

0赞 Semimono 7/4/2018 #1

我相信这是 NullPointer 异常能够引用多个问题的令人讨厌的实例之一。它只给你行号,但不给你该行中的哪个引用是空的。 不是 null,是。您需要在方法的前面或在 PanelUpdate 构造函数中初始化该值。NewPlayerAchievementListShowUI

P.S. 我讨厌空引用异常的非特异性;非常令人沮丧。

评论

0赞 user3072143 7/4/2018
所以我创建了构造函数并将 PlayerDetails 传递给它并将其分配给一个新的构造函数,仍然不确定,但它仍然将“this”显示为 null puu.sh/AQtUk/b58c3360dc.png
0赞 Semimono 7/4/2018
是的,在构造函数完成之前,不能传递对象的引用。您可以使用来分配值(又名 this.Player =...),但你不能为(又名 myVar=this)赋值。我认为这种表示就是调试器显示它的方式。thisthis
0赞 Semimono 7/4/2018
但我想你可能错过了我想指出的内容。您需要在构造函数中初始化,而不是 或 . 是 null 的值。AchievementListNewPlayerPlayerAchievementList
0赞 user3072143 7/4/2018
无法初始化成就列表。这是一个 Unity 文本字段,无论如何都试图设置相同的错误
0赞 Bizhan 7/4/2018
@user3072143我认为他的意思是NewPlayer.Achievement
0赞 C. Carter 7/4/2018 #2

您的 PlayerDetails 对象中有一个 null 属性。在调试模式下检查 NewPlayer 对象的属性,您将看到这一点。

即使你在其上使用新的构造函数,也不意味着该属性将被赋予一个值,除非在构造函数中专门为其指定一个值。

您还需要显示 PlayerDetails 类的代码,以便给我们一个更好的主意。

也:

PlayerDetails Player = new PlayerDetails(); // Assigning a new value here means nothing
Player = NewPlayer;

您正在第 #1 行创建一个新的 PlayerDetails 对象,但随后在第 #2 行为其分配一个不同的值。

PlayerDetails Player = NewPlayer;

没关系。