Может кто сказать как узнать угол под каким наш рейкаст попадает в поверхность коллайдер, к примеру нужно спавнить под нужным углом объект
Угол между вектором нормали в точке попадания рейкаста и вектором из точки испускания в точку попадания того же рейкаста. RaycastHit.normal узнаем, а Второй вектор описывается в примере
Здавствуйте.такая вот проблемка делал самонаводящий патрон, в идеале должен патрон спавнится и лететь к цели, но патрон летит куда то в сторону.Подскажите где моя ошибка?
Код
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
Почему так катастрофически мало информации по Rigidbody2d? Отлично понимаю, как сделать вращение за целью через MoveRotation, но те же самые способы на rb2D дают кучу ошибок про аргументы с инвалидностью. Поделитесь, кто-нибудь, ссылками на статьи по организации вращения за объектом в 2D (через MoveRotation или AddTorque) Transform не нужен, только физика.
Неужели я единственный знаю о существовании Rigidbody2d и пытаюсь его использовать??? #Хийвэл бүү ай, айвал бүү хий.
Сообщение отредактировал Бозингар - Суббота, 01 Августа 2015, 13:52
Вообще не по теме. Я не спрашиваю, где тут ближайшая столовая - я спрашиваю, как варить борщ. Ну да ладно, разберусь. Спасибо за попытку помочь. #Хийвэл бүү ай, айвал бүү хий.
Ко мне пришла мысль по смене дня и ночи (На ссылочки кстать пока не жмакал ) Создаем Sky-Sphere Красим 1половину в ночь другую в день и при помощи скрипти вертим .А вот с погодой пока мыслей не было
Добавлено (01 августа 2015, 15:14) --------------------------------------------- Или переодически с помощью скрипта сменять SkyBoxes наверное можно ?
Объясню ситуацию подробнее: Есть карта, в изометрии, вид сверху. На ней размещены спрайты - игрок и бот. Задача бота - поворачивать и следовать за игроком. И всё-бы было легко и быстро, не будь необходимости все повороты и движения осуществлять физикой, т.е, через Rigidbody2d.
Уже создавал пробовал разные варианты, но бот либо хаотично носится по карте, либо крутится на одном месте. А нужно - что-бы следовал именно за игроком, а не за своей задницей, вот в чем проблема. #Хийвэл бүү ай, айвал бүү хий.