[英]The Field Is Never Assigned To And Will Always Have Its Default Value null
[英]Unity 3D warning CS0414: The field <field> is assigned but its value is never used
我想知道为什么在下面的代码中会发生此错误。
我在检查员中分配了通讯员 GO(游戏对象)。
PhotonNetwork.ConnectUsingSettings, OnConnectedToMaster, OnJoinedLobby 工作正常
该方法On_PlayerNameInput_changed()
已经分配给PlayerName InputField在层次结构(和PlayerName InputField为PlayerNameScreen的孩子)。
现在,我有这个代码
public class MenuManager : MonoBehaviourPunCallbacks
{
[SerializeField] private GameObject connectScreen, playerNameScreen, playerNameButton;
[SerializeField] private InputField createRoomInput, joinRoomInput, playerNameInput;
public void OnClick_PlayerNameButton()
{
PhotonNetwork.NickName = playerNameInput.text;
}
public void On_PlayerNameInput_changed()
{
if (playerNameInput.text.Length > 2 && playerNameInput.text.Length < 11)
playerNameButton.SetActive(true);
else
playerNameButton.SetActive(false);
}
并且没有显示警告,但是如果我执行以下操作:
public void On_PlayerNameInput_changed()
{
if (playerNameInput != null)
{
if (playerNameInput.text.Length > 2 && playerNameInput.text.Length < 11)
playerNameButton.SetActive(true);
else
playerNameButton.SetActive(false);
}
else
Debug.Log("PlayerNameInput is null");
}
立即出现下一个警告信息:
Assets\\Scripts\\MenuManager.cs(11,57):警告 CS0649:字段“MenuManager.playerNameButton”从未分配给,并且其默认值始终为空
Assets\\Scripts\\MenuManager.cs(14,56): 警告 CS0649: 字段 'MenuManager.playerNameInput' 从未分配给,并且其默认值始终为 null
Assets\\Scripts\\MenuManager.cs(11,39): 警告 CS0649: 字段 'MenuManager.playerNameScreen' 从未分配给,并且其默认值始终为 null
如图所示,GO 已经被拖放到 MenuManager 插槽中。
谢谢你的帮助。
正如它所说,您已经创建了始终为空的符号。 这里没有任何东西可以将对象的实例分配给警告中提到的符号。
在尝试使用它们之前,您需要构造对象并将它们分配给这些符号,或者您可以公开字段并从外部分配构造的对象。 实际上,编译器正确地假定,当您尝试对其进行操作时,从未分配给构造对象的已声明私有符号将在运行时抛出空引用异常。
如果您还不了解 C# 中引用和实例的概念,那么这就是要阅读的概念。 符号始终为“空”,除非创建并分配对象的运行时实例。
Visual Studio 不知道SerializeField
成员是由 Unity 编辑器设置的。 如果您使用default
初始化它们,则会删除警告。
[SerializeField] private GameObject connectScreen, playerNameScreen, playerNameButton = default;
[SerializeField] private InputField createRoomInput, joinRoomInput, playerNameInput = default;
这描述了如何为整个项目快速执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.