C# Unity预制脚本已禁用

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

我的预置有一个脚本,但是,每次生成它时,脚本都被禁用。我尝试过GetComponent().enable=true(不工作)我附加了一个映像-->(),下面是我的代码。FYI预置是使用默认的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;
}
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();脚本将与每个预置一起使用,但是本地用户将无法控制模型。