Пятница, 29 Марта 2024, 09:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » маршрут движения (правильная траектория)
маршрут движения
shustr1k76Дата: Суббота, 19 Марта 2016, 22:36 | Сообщение # 1
почетный гость
Сейчас нет на сайте
привет всем!
помогите с такой проблемой, есть 4 точки куда должен подойти игрок. Он должен подойти под правильной траекторией. Я думаю нужно сделать промежутные точки
вот скрипт движения персонажа к объекту, в паблик я поместил таргет, куда нужно идти. нужно добавить еще 3 таргета, и рандомно выбрать таргет, и подойти к нему под правильной траекторией. сразу скажу код не мой, и поэтому прошу помочь, с кодом, а точней с передвижением и тд! буду при много благодарен!!!

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

Код
public Animator anim;
   public  Transform[] point;
    public float moveSpeed = 3;
    public int rotationSpeed = 10;
    
    public float _maxDistans = 0;
    private Transform myTransform;
    private Vector3 relativePos;
    
    void Awake () {
  myTransform = transform;        
    }
    void Start()
    {
  anim = GetComponent<Animator> ();
    }
public Transform _getNext()
    {
  return point [Random.Range (0, point.Length)];

    }
    void Update () {

  
    }
    void gotopoint()
    {
  if (_getNext() != null) {
   
   
   float distance = Vector3.Distance(_getNext().transform.position, transform.position); //вычесление дистанции
   
   if (distance>_maxDistans) {
    Debug.DrawLine(_getNext().position,myTransform.position,Color.yellow); // Траектория движения
    anim.SetBool ("idel", true);
    //target.position.y = myTransform.position.y;
    Vector3 targetPos = _getNext().position;
    targetPos.y = transform.position.y;             
    relativePos = targetPos - myTransform.position;
    
    myTransform.rotation= Quaternion.Slerp(myTransform.rotation,
                    Quaternion.LookRotation(relativePos),
                    rotationSpeed*Time.deltaTime);   
    myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; // Движение объекта
    
   
   } else
   {
    //_getNext() = null;
    anim.SetBool ("walk", true);
    anim.SetBool ("idel", false);
   }

  }
  }
}
    


Сообщение отредактировал shustr1k76 - Воскресенье, 20 Марта 2016, 00:17
MystHuntДата: Суббота, 19 Марта 2016, 22:54 | Сообщение # 2
был не раз
Сейчас нет на сайте
пум Вроде то, что тебе нужно

Сообщение отредактировал MystHunt - Суббота, 19 Марта 2016, 22:54
shustr1k76Дата: Понедельник, 21 Марта 2016, 06:16 | Сообщение # 3
почетный гость
Сейчас нет на сайте
сделал по видео
имеется два скрипта
первый, его поместил на четыре объекта, на каждый объект закинул 3 оставшихся.
Код

public class checkpoint : MonoBehaviour {

    public Transform[] toPoint;
    public Transform getNext()
    {
  return toPoint[Random.Range(0, toPoint.Length)];
    }
}

решил сделать поворот, в ту сторону куда нужно, но проблема в том, что персонаж поворачивается туда сюда, он доходит поворачивается, потом как бы возвращается в то положение в котором пришел и опять пытается повернутся
Код

public class controlPlayer : MonoBehaviour {
    NavMeshAgent agent;
    public Animator anim;
    public Transform Checkpoint;
   private Transform myTransform;
    public Transform shtanga;
    public Transform turnik;
    public Transform myach;
    public Transform grusha;
    public float maxDistence = 0.3f;
    
    // Use this for initialization

    

    void Start () {
  anim = GetComponent<Animator> ();
  agent = GetComponent<NavMeshAgent> ();
  Invoke ("move", 5f);
  

    }
    void move()
    {    

  checkpoint point = Checkpoint.GetComponent<checkpoint> ();
  Checkpoint = point.getNext ();
  anim.SetBool ("idel", true);
  agent.destination = Checkpoint.position;
  Invoke ("move", 5f);

    }
    // Update is called once per frame
    void Update () {
float distanceshtanga = Vector3.Distance (shtanga.transform.position, myTransform.position);
  float distanceturnik = Vector3.Distance (turnik.transform.position, myTransform.position);
  float distancesmyach = Vector3.Distance (myach.transform.position, myTransform.position);
  float distancesgrusha= Vector3.Distance (grusha.transform.position, myTransform.position);

  print (distanceshtanga);
  
 if (distanceshtangafor < 1.0f) { //  вот тут
    myTransform.rotation = Quaternion.Slerp (myTransform.rotation, Quaternion.LookRotation (shtangafor.position - myTransform.position), rotationSpeed * Time.deltaTime);

   anim.SetBool ("idel", false);
   anim.SetBool ("for", true);
  } else anim.SetBool ("bla", false);
  if (distancesmyach < maxDistence) {
   anim.SetBool ("idel", true);
  }
  if (distancesgrusha < maxDistence) {
   anim.SetBool ("idel", true);
  }
  if (distanceturnik < maxDistence) {
   anim.SetBool ("idel", true);
  }
    
  if (agent.velocity.magnitude > 0.5f) {
   anim.SetBool ("idel", true); // сдесь понятно если расстояние больше то работает анимация хотьбы
  }
   else {
   anim.SetBool ("idel", false); // сдесь она выключается когда подошел
  }
    }


Сообщение отредактировал shustr1k76 - Суббота, 26 Марта 2016, 17:13
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » маршрут движения (правильная траектория)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг