2015-12-20 9 views
1

Игровой объект имеет силу, прилагаемую к нему в положительном направлении, а затем через некоторое время он прилагает к нему силу в отрицательном направлении.Set gameObject active Unity C#

Если сила применяется в отрицательном направлении, это означает, что игра закончилась, и я хочу отобразить совершенно другой gameObject, который является игрой над gameObject, называемой icetextureONfile. Мой метод не работает. Я получаю ошибку. Тип «UnityEngine.GameObject» не содержит определения для icetextureONfile ». Я с трудом REFE

public void FixedUpdate() { 

// No action happened yet 
    gameObject.icetextureONfile.SetActive (false); 

// Increase the kick timer 
    kickTimer += Time.fixedDeltaTime; 

    // If the next kick time has came 
    if (nextKick < kickTimer) { 
     // Schedule the kick back corresponding to the current kick 
     nextKickBacks.Enqueue (nextKick + 100f); 

     // Apply the kick force 
     rb.AddForce (transform.up * thrust, ForceMode.Impulse); 

     // Plan the next kick 
     nextKick = kickTimer + Random.Range (MinKickTime, MaxKickTime); 
    } 

    // If there are more kick backs to go, and the time of the closest one has came 
    if (0 < nextKickBacks.Count) { 
     if (nextKickBacks.Peek() < kickTimer) { 
      // Apply the kick back force 
      rb.AddForce (-transform.up * thrust, ForceMode.Impulse); 

      // Game object was kicked down, set active game over object 
      gameObject.icetextureONfile.SetActive (true); 
      // Dequeue the used kick back time 

nextKickBacks.Dequeue(); 
     } 
    } 
} 
+0

Где вы определяете 'icetextureONfile'? Каков тип 'gameObject'? – rhughes

+0

Мне никогда не приходилось определять gameObjects, прежде чем я обычно просто присоединяю скрипт к ним, и поэтому соединение выполняется. Я не знал, что существуют разные типы gameObject, я думал, что gameObject является самым низким знаменателем? –

+0

Вы прикрепляли объект через редактор? Если это так, попробуйте 'icetextureONfile.gameObject.SetActive (true);' – rhughes

ответ

1

Если Ваше желание, чтобы отключить одну, а затем активировать другой вы можете просто добавить это к классу убедиться, что его не внутри функции

public GameObject iceTexture; 

затем перетащить поместите этот объект в пятно, указанное в сценарии в единстве, называемом iceTexture. Затем просто убедитесь, что вы деактивируете объект, к которому прикреплен скрипт, и активируйте объект iceTexture.

gameObject.SetActive(false); 
iceTexture.SetActive(true); 

This page может вам помочь.

+0

я не могу себе представить, почему это не устанавливает свой объект активным (ложь), как он должен публиковать GameObject icetextureONfile; \t недействительного Start() { \t \t \t \t icetextureONfile.SetActive (ложь); \t} –

+0

Честно говоря, он должен. Вы перетащили объект в слот, предоставленный скриптом? –

+0

Нет, я действительно не знал, что это значит, можете ли вы объяснить, где находится слот? –

0

Этот синтаксис работает для меня

GameObject.Find ("icetextureONfile").SetActive(false); 

В отличие от того, что находится в документации Unity

gameObject.SetActive(false); 

Первый работал для меня, второй не сделал. Я не отличный программист, поэтому, возможно, это просто вопрос контекста.

Редактировать Общеизвестно, что трудно SetActive (истина), после того, как объект уже SetActive (ложь). Это связано с тем, что прикрепленный скрипт также деактивируется. Смотрите форумы Unity, чтобы узнать, почему это кошмар.

Чтобы преодолеть это, я выбрал другой маршрут, который выполняет одно и то же.

Я установил размер объекта равным 0, пока не понадобился.

GameObject.Find ("icetextureONfile").transform.localScale = new Vector3(0, 0, 0); 

GameObject.Find ("icetextureONfile").transform.localScale = new Vector3(0.02f, 0.02f, 0.02f); 

Обратите внимание, что 0.02 - это размер моего объекта в частности и не может быть того же размера, что и у вас.

Смежные вопросы