Как прикрепить основную камеру к скриптовому компоненту префаба? - PullRequest
0 голосов
/ 21 октября 2019

Итак, у меня есть префаб, который представляет собой предметный предмет и таймер, прикрепленный к основной камере. Когда игрок сталкивается с предметом, мне нужно уничтожить предмет, а затем добавить время к таймеру.

Сценарий обработки itemdrop выглядит следующим образом:

   public LifeTimer LifeTimer;

   // Destroy sprite once player collides into it 
   void OnCollisionEnter2D(Collision2D col){
       if(col.gameObject.name=="Player"){
           Destroy(gameObject);
           LifeTimer.currentTime += 10;

       }
   }

Таймер жизни - это ссылка на мой сценарий, который прикреплен к основной камере.

public class LifeTimer : MonoBehaviour
{


    // Once level initializes, start current time to starting time
    public float currentTime = 0f;
    public float startingTime = 10f;

    [SerializeField] Text lifeTimerText;

    void Start(){
        currentTime = startingTime;
    }

    void Update(){

        // Decrement time per second every second
        currentTime -= 1*Time.deltaTime;
        // Set currentime to text on screen
        lifeTimerText.text = currentTime.ToString ("0");

        // Load Game Over Screen when time goes to 0
       if(currentTime <= 0){
            Application.LoadLevel(0);
        }
    }
}

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

Спасибо за любые указания

Рабочий раствор:

public class itemdrop : MonoBehaviour
{
    LifeTimer lifeTimer;

   void Start(){
       lifeTimer = Camera.main.GetComponent<LifeTimer>();

   }

   // Destroy sprite once player collides into it 
   void OnCollisionEnter2D(Collision2D col){
       if(col.gameObject.name=="Player"){
           Destroy(gameObject);
           lifeTimer.currentTime += 10;
       }
   }


}

1 Ответ

2 голосов
/ 21 октября 2019

Вы можете получить доступ к MainCamera с помощью Camera.main Просто получите ссылку на объект Camera в методе Start() с помощью Camera.main и вызовите ссылку.

Отредактируйте сценарий ItemDrop следующим образом:

public LifeTimer LifeTimer;

void Start() {
    LifeTimer = Camera.main.GetComponent<LifeTimer>();
}

// Destroy sprite once player collides into it 
void OnCollisionEnter2D(Collision2D col){
   if(col.gameObject.name=="Player"){
       Destroy(gameObject);
       LifeTimer.currentTime += 10;

   }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...