Преместване по точки от масив
Здравейте, скъпи потребители на форума, кажете ми как да накарам тълпите да се движат по точки. По-рано имаше скрипт, в който всяка точка на тълпи се регистрираше. Реших да автоматизирам, така че данните да се локализират по тага и да се въвеждат в масива, а Waypoints вече да са избрани от него на брояча. Проблем - тълпите по етикет са въведени в масива, но не се движат, пише, че не можете да конвертирате GameObject в Transform. Може би има други решения?
използване на UnityEngine; използване на System.Collections;
публичен клас AI2 : MonoBehavior публична трансформация[] wayPoint = нова трансформация[10]; //създаване на масив, съдържащ нашите пътни точки int currentWayPoint = 0; // променлива WAYpoint, от която започват тълпите
//Врагове float rotationSpeed = 6.0f; //Лична променлива, може да се редактира само в код public float accelerate = 1.8f;
void Start () //намиране на всички наши точки от пътя на заредената сцена на играта wayPoint[0] = GameObject.Find("WayPoint11").transform; //отброяване от "0", а не от 1. wayPoint[1] = GameObject.Find("WayPoint12").transform; wayPoint[2] = GameObject.Find("WayPoint13").transform; wayPoint[3] = GameObject.Find("WayPoint14").transform; wayPoint[4] = GameObject.Find("WayPoint15").transform; wayPoint[5] = GameObject.Find("WayPoint16").transform; wayPoint[6] = GameObject.Find("WayPoint17").transform; wayPoint[7] = GameObject.Find("WayPoint18").transform; wayPoint[8] = GameObject.Find("WayPoint19").transform; wayPoint[9] = GameObject.Find("WayPoint10").transform; >
// Актуализацията се извиква веднъж на кадър void Update () //когато зомбитата преминат последната пътна точка, waypoint10, унищожи зомбитата if (currentWayPoint == 10) Унищожи (this.gameObject); > иначе ходене();
> > //тази функция прави ход void walk() //посока с лице //завъртане с лице към следващата WayPoint, към която опонентите отиват Quaternion rotation = Quaternion.LookRotation(wayPoint[currentWayPoint].position - transform.position); //контролира колко бързо опонентите обръщат лицата си към новата точка transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationSpeed);
//движение Вектор3 wayPointDirection = wayPoint [currentWayPoint].position - transform.position; float speedElement = Vector3.Dot(wayPointDirection.normalized, transform.forward); плавна скорост = ускоряване * speedElement; transform.Translate(0, 0, Time.deltaTime * скорост); >
//Използване на задействания на колайдер за следващата точка на пътя и друга void OnTriggerEnter(Колайдер на колайдер) //ако враговете се появят в тези точки на пътя, тогава кажете на враговете да отидат до следващата точка на пътя if (coll ) currentWayPoint++;
Сега правя нов скрипт, приложен по-долу
използване на UnityEngine; използване на System.Collections;
//[System.Serializable] публичен клас AI3: MonoBehaviour
int currentWayPoint=0; // брояч
публична точка на GameObject[]; public int CountWaypoint; //Дължина на масив public float rotationSpeed = 1.8f;
публично плаващо ускорение = 1.8f;
void Update() waypoint = GameObject.FindGameObjectsWithTag("WayPoint"); CountWaypoint = waypoint.Length; //дължина на масива
for(currentWayPoint=0; currentWayPoint Allanian UNetsПубликации: 15Регистрирани: 07 март 2015 г., 23:59
Re: Преместване по точки от масив
Re: Преместване по точки от масив
Пренаписах малко, замених масива с лист. Е, самият въпрос, азсъздаде масив от точки по етикет, създаде брояч за избор от 1 точка до последната, но как да напиша движение за тълпи? пътната точка беше трансформация, а сега е GameObject. И така несъвместимостта на типове, от няколко дни се боря, може ли без transform.position? и как иначе.
използване на UnityEngine; използване на System.Collections.Generic; //за List using System.Linq; //за ToList
публичен клас AI4: MonoBehavior
public List waypointsList;//масив от точки в играта public int waypointsCount = 0; //брояч на точки в играта int currentWayPoint = 0; // променлива WAYpoint, от която започват тълпите
public float mobSpeed = 2.0f; //максимална скорост на тълпата public float mobRotationSpeed = 2.5f; // скорост на завъртане на тълпата
публичен GameObject Target; // текуща цел
waypointsList = нов списък(GameObject.FindGameObjectsWithTag("WayPoint")); waypointsCount = waypointsList.Count; //брой точки в масива
if (Target != null) //ако имаме цел
//движение - не работи ( Vector3 wayPointDirection = . position - transform.position; float speedElement = Vector3.Dot (wayPointDirection.normalized, transform.forward); float speed = mobSpeed * speedElement; transform.Translate (1, 1, Time.deltaTime * speed);
> друго //ако няма цел for(int t = 0; t Allanian UNetsСъобщения: 15Регистриран: 07 март 2015 г., 23:59