【发布时间】:2018-10-09 15:43:48
【问题描述】:
我的预制件有一个脚本,但是,每次生成它时,该脚本都会被禁用。我试过 GetComponent().enable = true (不工作)我附上了一张图片 --> (Prefab) 这是我的代码。 FYI prefab 是使用默认的 UNET LobbyManager 生成的。
LobbyManager 生成预制件,我使用单独的脚本来控制预制件。该脚本已附加到预制件,但在生成时它丢失了,因此我寻找了预制件并尝试通过代码附加它。
GameObject imageTracker_1, imageTracker_2;
public GameObject[] user;
public GameObject myTextObj, origin, canvasUI;
public float distanceFromOrigin;
//public Text myText;
private void Awake()
{
user[0] = GameObject.FindWithTag("Respawn");
user[1] = GameObject.FindWithTag("Finish");
}
void Start()
{
if (!isLocalPlayer)
{
Destroy(this);
return;
}
origin = GameObject.Find("PositionOrigin");
//used for finding text, "GetComponent<Text>" needs to be attached or fails.
canvasUI = GameObject.Find("Canvas");
//myText = canvasUI.GetComponentInChildren<Text>();
// myText.text = "Out of area";
myTextObj.SetActive(false);
// we track the vuforia image within the scene and attach the avatar as a child
//imageTracker_1 = GameObject.FindWithTag("Respawn");
//GameObject imageTracker_2 = GameObject.FindWithTag("Finish");
//transform.SetParent(imageTracker_1.transform, false);
//transform.parent = imageTracker_1.transform;
}
private void Update()
{
assigningAvatarToParent();
distanceFromOrigin = Vector3.Distance(origin.transform.position, transform.position);
//during start the gameObject will return NULL, this will make sure during every frame the gameObject does not equal null
if (origin || imageTracker_1 || myTextObj == null)
{
myTextObj = GameObject.Find("OutOfBound");
origin = GameObject.Find("PositionOrigin");
}
}
void assigningAvatarToParent()
{
int k = 0;
while (k < user.Length){
GameObject avatar = GameObject.Find("player_avatar" + k);
avatar.transform.SetParent(user[k].transform, false);
k++;
Debug.Log("avatar for parents: " + avatar);
}
for (int a = 0; a < user.Length; a++)
{
GameObject avatar = GameObject.Find("player_avatar" + a);
if (avatar.GetComponent<playerIdentity>() == null){
avatar.AddComponent<playerIdentity>();
origin = GameObject.Find("PositionOrigin");
canvasUI = GameObject.Find("Canvas");
myTextObj.SetActive(false);
}
}
return;
}
}
【问题讨论】:
-
您检查是否有任何错误?在较新版本的 Unity 中,它会自动禁用有错误的组件。
-
你也可以在这里问:gamedev.stackexchange.com
-
感谢您的链接。 @MoNarimani 我添加了一张图片,脚本未激活。并且错误只是未定义的对象。但是,我认为它是因为脚本处于非活动状态,因此我无法设置对象。
-
看起来
myTextObj.SetActive(false);会出错,因为myTextObj在检查器中是null -
你的类继承自哪个类?也许你是从一个网络类继承的,当播放器不是主机时会禁用它自己?
标签: c# unity3d networking augmented-reality