Wie in Unity Variable ändern wenn ein Objekt berührt wird?
Ich möchte, dass in meinem C#-Script, wenn Enemy schon 2 Sekunden den Spieler berührt, dann die Variable HP um 1 gesenkt wird. Wie mache ich das aber?
Mein jetziger Script funktioniert nicht:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HP : MonoBehaviour
{
int hp = 10;
void executeWait(float aux)
{
StartCoroutine(Wait(aux));
}
IEnumerator Wait(float seconds)
{
yield return new WaitForSeconds(seconds);
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "Enemy")
{
executeWait(2);
hp -= 1;
Debug.Log(hp);
}
}
}
Vielen Dank für jede Antwort.
Was passiert denn momentan? Rein gar nichts?
Ja, gar nichts
Hast du denn dein Enemy getagged und alle nötigen Collider, Rigidbodys etc auf den Objekten?
Ja habe ich
1 Antwort
Also ich würde das so machen :
public class HP : MonoBehaviour
{
private bool touched = false;
private float touchedTime = 0;
private int hp = 10;
private void OnCollisionEnter(Collision other)
{
if (other.transform.tag.Equals("Enemy"))
{
touched = true;
touchedTime = Time.time;
}
}
private void Update()
{
if (touched)
{
if (Time.time - touchedTime > 2)
{
hp--;
touched = false;
}
}
}
}
Hab den Code jetzt nicht getestet, aber sollte eigentlich so funktionieren.
Und sorry für die späte Antwort
Und ja ich weiß es ist nicht die Performanteste art immer abzufragen ob es getoched wurde. Aber dafür die einfachste