Посмотри на целевого врага и орбиту - PullRequest
0 голосов
/ 04 ноября 2018

Раньше у меня был сценарий, который я мог смотреть на игрока, но только тогда, когда я нажимал на вкладку, но не мог переключаться между врагами или чем-то еще. В течение всего дня я искал ответы и пришел к выводу, что было бы замечательно. Теперь я могу найти вещи, помеченные врагами и перебирать их, но я не смог найти способ посмотреть на врага, продолжать смотреть на них и уметь двигайся по кругу.

public class debug : MonoBehaviour
 {

 public List<Transform> targets;
 public Transform selectedTarget;
 public string targetTag = "Enemy";
 private Transform myTransform;

 //Use this for initialization
 void Start()
 {
     targets = new List<Transform>();
     selectedTarget = null;
     myTransform = transform;
     AddAllEnemies();
 }

 public void AddAllEnemies()
 {
     GameObject[] go = GameObject.FindGameObjectsWithTag(targetTag);
     foreach (GameObject enemy in go)
     {
         AddTarget(enemy.transform);
     }
 }

 public void AddTarget(Transform enemy)
 {
     targets.Add(enemy);
 }

 /*private void SortTargetsByDistance()
 {
     targets.Sort(delegate (Transform t1, Transform t2) {
         return (Vector3.Distance(t1.position, myTransform.position).CompareTo)
             (Vector3.Distance(t2.position, myTransform.position));
     });
 } */
 private void SortTargetsByDistance()
 {
     targets.RemoveAll(target => target == null);
     targets.Sort(delegate (Transform t1, Transform t2) {
         return (Vector3.Distance(t1.position, myTransform.position).CompareTo)
             (Vector3.Distance(t2.position, myTransform.position));
     });
 }

 private void TargetEnemy()
 {
     if (selectedTarget == null)
     {
         SortTargetsByDistance();
         selectedTarget = targets[0];
     }
     else
     {
         int index = targets.IndexOf(selectedTarget);
         if (index < targets.Count - 1)
         {
             index++;
         }
         else
         {
             index = 0;
         }

         selectedTarget = targets[index];
     }
 }

 //Update is called once per frame
 void Update()
 {
     if (Input.GetKeyDown(KeyCode.Tab))
     {
         TargetEnemy();
     }
     }
 }

Я пытаюсь использовать transform.LookAt(TargetEnemy); в void update, но получаю сообщение об ошибке, в котором говорится, что преобразование из группы методов в преобразование невозможно. Я действительно застрял на этом, теперь любая помощь приветствуется.

Редактировать: я большой манекен, вместо этого я использовал transform.LookAt(selectedTarget);, и персонаж на долю секунды поворачивается и смотрит на врага. Теперь мне нужно, чтобы игрок смотрел на цель и двигался вокруг нее.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Здравствуйте, спасибо всем, кто заглянул, и спасибо @ SonicBlue22 за ваш ответ. Я понял это через пару часов.

    void Update()
    {
        if (Input.GetKeyUp(KeyCode.Tab))
        {
            TargetEnemy();
            transform.LookAt(selectedTarget);
        }

        if (selectedTarget != null)
        {
            transform.LookAt(selectedTarget);
        }

        if (Input.GetKeyUp(KeyCode.Q))
        {
            selectedTarget = null;
            return;
        }

    }

}
0 голосов
/ 05 ноября 2018

Transform.LookAt

Вам нужно передать это Transform, а не void.

TargetEnemy();
transform.LookAt(selectedTarget);

Кроме того, вы можете TargetEnemy() вернуть Transform.:

private Transform TargetEnemy()
 {
     /* stuff */

     return selectedTarget;
 }
transform.LookAt(TargetEnemy());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...