Unity Prefab скрипт отключен - PullRequest
       10

Unity Prefab скрипт отключен

0 голосов
/ 09 октября 2018

Мой префаб имеет скрипт, однако каждый раз, когда он генерируется, скрипт отключается.Я пробовал GetComponent (). Enable = true (не работает) Я прикрепил изображение -> ( Prefab ) и вот мой код.Префаб 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;
}

}

1 Ответ

0 голосов
/ 09 октября 2018

Я предполагаю, что ваш сценарий является производным от NetworkBehaviour, которые отключены, пока не будет установлено активное соединение с сервером.Может ли это быть проблемой?(см. Документация UNet )

Кроме того, когда создается экземпляр Prefab, ваш скрипт удаляет себя из него во время функции Start().Вот почему он отсутствует.

Вызов Destroy(this); удалит компонент сценария, но не удалит GameObject (и я сам попал в эту ловушку примерно 100 раз).

Неконечно, если это было вашим намерением, так как LobbyManager создает ваш префаб.Но если это так, вы можете использовать DestroyImmediate(gameObject);.

...