将“画布”中的Gameobject设置为Network Player Prefab

时间:2018-11-27 18:38:23

标签: c# unity3d

我的项目使用网络管理器加载播放器预制件。我有一个游戏对象(一堆文本和1个面板)作为Canvas的子代。画布不是预制件,也不是播放器预制件的子代。

我在玩家预制件下有一个脚本,试图获取游戏对象的活动状态,但是我无法在玩家预制件下设置游戏对象(除非游戏对象是预制件)或使用代码“ finditwithatag”。

if (Input.GetKey(KeyCode.Return) && PlayerStatMenuTimer>=1 && GameObject.FindGameObjectWithTag("PlayerStatsMenu").activeSelf==false)
{
    //code here
}

上面的代码(在玩家的预制脚本功能“ Update”下)找不到我的游戏对象“ PlayerStatsMenu”。它总是给我一个错误,说:

“ NullReferenceException:对象引用未设置为对象PlayerController.Update()的实例(位于Assets / Evermore / PlayerController.cs:104)”

我在做什么错?还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

您使用的是GameObject.FindGameObjectWithTag而不是GameObject.Find

编辑:而且,它是GameObject.FindGameObjectsWithTag。如果找不到异议,则返回一个空数组。没有索引器,您将无法访问数组,因此,我确定您应该在代码或问题中仔细检查该函数的拼写。

答案 1 :(得分:0)

CapstoneGameObject.FindWithTag查找具有特定标签的GameObject。标签是与GameObject名称分开的属性。如果将GameObject的tag属性设置为正确的值(例如,通过编辑器),则应该可以找到它。

也:这两种方法都只能找到活动的GameObject。您无法通过标签找到无效的GameObject,因此根据定义,条件GameObject.FindGameObjectsWithTag永远不会为真。

也许最好的方法是使标记的对象始终处于活动状态,并让它有一个孩子,然后您可以根据需要激活和停用它。