Я создаю неслучайно сгенерированную игру раннер и пытаюсь закодировать вступление босса и бороться. Таким образом, игра состоит из астронавта (игрока), который все время остается на экране (поэтому он, фон и камера никогда не двигаются, так что игрок может двигаться, но он зажат.
Все опасности приходят к игроку, и он должен избегать их или победить их до последней опасности, которой является босс. Босс находится в конце линии и идет вдоль оси z к игроку, и я хочу, чтобы он остановился, когда он столкнется с квадом, так что босс статичен, и они могут сражаться.
После этого я хочу, чтобы босс двигался вверх и вниз и стрелял в игрока с помощью функций Lerp.
Код выглядит так:
public class BossController : MonoBehaviour {
public float speed;
public float health;
public Animator anim;
public Transform startMarker;
public Transform endMarker;
private Rigidbody rb;
private HUDController hud;
private bool startIntro = false;
private float startTime;
private float journeyLength;
void Start () {
startTime = Time.time;
journeyLength = Vector3.Distance (startMarker.position, endMarker.position);
anim = GetComponent<Animator> ();
rb = GetComponent<Rigidbody> ();
rb.velocity = transform.forward * -speed;
}
void Update(){
//transform.position += transform.forward * -speed * Time.deltaTime;
if (startIntro) {
rb.velocity = new Vector3(0,0,0);
Fight ();
}
}
void Fight(){
float distCovered = (Time.time - startTime) * speed;
float fracJourney = distCovered / journeyLength;
while(true)
{
transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fracJourney);
transform.position = Vector3.Lerp(endMarker.position, startMarker.position, fracJourney);
}
}
void OnTriggerEnter(Collider other){
if (other.gameObject.CompareTag ("bossEntry")) {
startIntro = true;
//anim.SetTrigger ("quad");
}
}
}
Сначала я попробовал с твердым телом, и когда оно сталкивается, скорость твердого тела равна 0, и это работает как ДОЛГО, КАК комментируется метод Fight (). Так может это из-за функций lerp?
Когда это не комментируется, когда босс ударяет по коллайдеру, все зависает, и я больше не могу использовать Unity, и мне нужно перезапустить программу.
Пожалуйста, помогите!
Редактировать: я удалил цикл while (true), и теперь босс падает прямо вниз, когда сталкивается с квадом вместо того, чтобы прыгать. Босс находится под пустым объектом, а начальный и конечный маркеры также находятся под пустым объектом. Каждый компонент привязан к пустому объекту (родителю).