Здравствуйте.Тут такое дело есть массив image(UI) компонентов, как сделать функцию возвращающую компонент в область которого попал курсор мышки, что то не могу сообразить как написать алгоритм.Буду благодарен за помощ!
Сообщение отредактировал Pakypc - Пятница, 21 Августа 2015, 16:35
Здавствуйте.такая вот проблемка делал самонаводящий патрон, в идеале должен патрон спавнится и лететь к цели, но патрон летит куда то в сторону.Подскажите где моя ошибка?
Код
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq;
public class NewShootPlayer : MonoBehaviour { private GameObject currentTarget; private Transform target;//цель для патрона public float speed = 10;// скорость патрона public float turnSpeed = 100; //скорость поворота патрона public float timeLive = 5;//время жизни патрона private Transform thisTransform;// трансформ персонажа
public void Awake(){ thisTransform = transform; }
// Update is called once per frame void Update () { if (target = null) { currentTarget = findTargets(); target = currentTarget.transform; } //timeLive -= Time.deltaTime; Vector3 movement = thisTransform.forward * speed * Time.deltaTime;//величина движения вперед if (target != null) { Vector3 direction = target.position - thisTransform.position;//направление на цель float maxAngle = turnSpeed*Time.deltaTime;//максимальный угол поворота в текущий кадр float angle = Vector3.Angle(thisTransform.forward,direction);// if(angle<=maxAngle){ thisTransform.forward = direction.normalized;// если угол меньше максимального, поворачиваем на цель }else{ thisTransform.forward = Vector3.Slerp(thisTransform.forward, direction.normalized,maxAngle/angle); } //float distanceToTarget = direction.magnitude; } thisTransform.position += movement;//двигаем ракету вперед } public GameObject findTargets(){ float closestMobDistance = 0;//переменная для проверки дистанции до моба GameObject nearestMob = null;//переменная для ближайшего моба List<GameObject> allMobs = GameObject.FindGameObjectsWithTag ("Mob").ToList ();//ищу мобов по тагу и добавляю в список foreach (GameObject mob in allMobs) {//перебираю мобов if((Vector3.Distance(mob.transform.position, transform.position)< closestMobDistance) || closestMobDistance == 0){ closestMobDistance = Vector3.Distance(mob.transform.position, thisTransform.position);//меряю дистанцию и записую в переменную nearestMob = mob;//устанавливаю как ближайшую } } //Debug.Log(" Ближайший моб----> " + nearestMob); return nearestMob;//возвращаю ближайшего моба
И еще такой вопрос, как я понял при создании выстрела на упреждение нужно вычислить угол упреждения (угол точки соприкосновения между вектором направлени патрона и вектором направления цели) так меня интересует есть ли какие то методы для его вычисления или это нужно создавать полноценный алгоритм вычисления ?
Сообщение отредактировал Pakypc - Пятница, 31 Июля 2015, 14:30
Может кто объяснить что за параметры нужно передавать в эти методы MoveTowards(vector current, vector target, float maxDistanceDelta) RotateTowards(vector current, vector target, float radianDeklta, float MagnitudeDelta) С таргетами понятно, а вот что за параметр в первом методе идет третим, во втором методе третий и четвнртый. Или есть у кого туториалы на русском по вот таким всяким методам...буду признателен за подсказки
Здравствуйте.Я все с той же проблемой...Не могу настроить патрон что бы летел к цели... немного переделал систему поиска цели,думал может в ней проблема а оказывается нет патрон стабильно еле двигаясь ползет куда то в старону(не в сторону моба).Я уже пересмотрел кучу примеров ну вроде все как у меня...уже просто не знаю в каком направлении искать ошибку. Цель -> моб у меня моздается динамически и постоянно двигается персонаж тоже передвигается и на ПКМ должен создавать патрон с префаба который в свою очередь выбирает ближайшую цель и двигается к ней. Это я для конкретики написал чего хочу добится... ниже новый код выстрела
Код
using System.Collections.Generic;
public class MyPlayerShoot : MonoBehaviour { public GameObject bulletPrefab; public float bulletSpeed = 30; public float shootPause = 1; private float timeLastShoot = 0; public float shootRadius = 10; private GameObject currentTarget; // Use this for initialization void Start () { }
Исходник кода копировал в текстовый документ после по блютузу с ноута на планшет скидывал...вобщем после долгого пути с коментами такая борода...но на работу кода они не влияют так что думаю не страшно:-)
ForseMode уже пробовал в 3 вариантах Impuls, Force, VelocityChange патрон всеравно кривой... Подскажите в каком направлении искать ошибку или ошибки
Это ivan2009 сижу с планшета на работе... прочитал я про линейную алгебру... написано что бы получить направление от точька А к точке Б нужно Б-А.. так и сделал. получил трансформ позишн патрона получил позишн моба отминусовал...сделал 2 варинта normalaized и нет. добавлял результат Б-А(как нормал так и не нормал) в первый параметр addForse летит патрон куда попало... уже пробовал и через чарактер контроллер через метод SimpleMove запускать, все раано летит куда попало... не могу понять в чем дело