C# Unity预制脚本已禁用
我的预置有一个脚本,但是,每次生成它时,脚本都被禁用。我尝试过GetComponent().enable=true(不工作)我附加了一个映像-->(),下面是我的代码。FYI预置是使用默认的UNET LobbyManager生成的 LobbyManager生成预置,我使用单独的脚本来控制预置。脚本附加到预置,但生成时它丢失了,因此我查找了预置并试图通过代码附加它C# Unity预制脚本已禁用,c#,unity3d,networking,augmented-reality,C#,Unity3d,Networking,Augmented Reality,我的预置有一个脚本,但是,每次生成它时,脚本都被禁用。我尝试过GetComponent().enable=true(不工作)我附加了一个映像-->(),下面是我的代码。FYI预置是使用默认的UNET LobbyManager生成的 LobbyManager生成预置,我使用单独的脚本来控制预置。脚本附加到预置,但生成时它丢失了,因此我查找了预置并试图通过代码附加它 GameObject imageTracker_1, imageTracker_2; public GameObject[] user
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;
}
GameObject imageTracker_1、imageTracker_2;
公共游戏对象[]用户;
公共游戏对象myTextObj,来源,canvasUI;
公共浮动距离原点;
//公共文本myText;
私人空间
{
用户[0]=GameObject.FindWithTag(“重生”);
用户[1]=GameObject.FindWithTag(“完成”);
}
void Start()
{
如果(!isLocalPlayer)
{
摧毁(这个);
回来
}
origin=GameObject.Find(“PositionOrigin”);
//用于查找文本,“GetComponent”需要附加或失败。
canvasUI=GameObject.Find(“Canvas”);
//myText=canvasUI.getComponentChildren();
//myText.text=“区域外”;
myTextObj.SetActive(false);
//我们跟踪场景中的vuforia图像,并将其作为一个孩子附加到化身上
//imageTracker_1=GameObject.FindWithTag(“重生”);
//GameObject imageTracker_2=GameObject.FindWithTag(“完成”);
//transform.SetParent(imageTracker_1.transform,false);
//transform.parent=imageTracker_1.transform;
}
私有void更新()
{
分配增值税();
distanceFromOrigin=Vector3.距离(origin.transform.position,transform.position);
//在启动期间,游戏对象将返回NULL,这将确保在每一帧中游戏对象不等于NULL
如果(原点| |图像跟踪器| 1 | | myTextObj==null)
{
myTextObj=GameObject.Find(“OutOfBound”);
origin=GameObject.Find(“PositionOrigin”);
}
}
无效转让增值税()
{
int k=0;
while(k<用户长度){
GameObject avatar=GameObject.Find(“player_avatar”+k);
avatar.transform.SetParent(用户[k].transform,false);
k++;
Log(“父母的化身:+avatar”);
}
for(int a=0;a
}我假设您的脚本源自
网络行为
——在与服务器建立活动连接之前,该行为将被禁用。这可能是问题所在吗?(见附件)
此外,当预置被实例化时,脚本会在Start()
函数期间从预置中删除自身。这就是为什么它不见了
调用销毁(this)
将删除脚本组件,但不会删除游戏对象
(我自己也曾陷入过大约100次这样的陷阱)
不确定这是否是你的意图,因为游说经理正在创建你的预置。但如果是,你可能想使用
destroimmediate(gameObject)代码>改为。是否检查了是否有任何错误?在较新版本的Unity中,它会自动禁用有错误的组件@MoNarimani我添加了一个图像,脚本未激活。错误只是没有定义的对象。但是,我假设是因为脚本处于非活动状态,因此我无法设置对象
将出错,因为myTextObj
在检查器中为null
,您的类从哪个类继承?也许您是从一个网络类继承的,该类在播放器不是主机时会自动禁用?谢谢您的回答,是的,直到用户有一个活动连接,然后生成预置。预置有脚本组件,但生成时会丢失。调用即时(游戏对象);已删除预置。如果我删除Destroy();脚本将与每个预置一起使用,但是本地用户将无法控制模型。