Итак, у меня есть префаб, который представляет собой предметный предмет и таймер, прикрепленный к основной камере. Когда игрок сталкивается с предметом, мне нужно уничтожить предмет, а затем добавить время к таймеру.
Сценарий обработки 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;
}
}
}