Единичный вектор направления - Форум Игроделов
Пн, 20 Май 2024, 02:35 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Единичный вектор направления
Единичный вектор направления
NapalmRainДата: Сб, 21 Фев 2015, 13:50 | Сообщение # 1
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
Доброго все времени суток!
Есть система стрельбы из лука.
Код
Force = -ArrowObj.transform.forward * maxDist*350;
    ArrowObj.transform.parent = null;
    ArrowCollider.enabled = true;
    ArrowRB.isKinematic = false;
    ArrowRB.AddForce(force);

В момент выстрела стреле передаётся сила с направлением от неё. Что бы стрела полетела.
Но вот незадача, появилась необходимость направлять стрелу не прямо перед собой, А в ту точку куда смотрит камера. для этого получаю координату места, куда упёрса взгляд:
Код

if (Physics.Raycast (cameraParent.transform.position, lookDirection, out hit, 50)) {
     TargetForFire = hit.point;
    } else {
     TargetForFire = cameraParent.transform.position+Vector3.forward*50;
    }

И пытаюсь направить стрелу туда
Код
fireDirection = ArrowObj.transform.TransformDirection(TargetForFire);
    Debug.Log (fireDirection);
    force = fireDirection * maxDist*50;
но получаю какую-то ерунду...
Стрела летит куда угодно, но не в том направлении, куда смотрит камера.

Буду благодарен за любую подсказку...

Добавлено (21 Фев 2015, 13:50)
---------------------------------------------
Разобрался с направлением, теперь бы понять как его превратить именно в вектор единичной длины

Код
fireDirection = ArrowObj.transform.positopn-TargetForFire;


Сообщение отредактировал NapalmRain - Сб, 21 Фев 2015, 13:05
 
СообщениеДоброго все времени суток!
Есть система стрельбы из лука.
Код
Force = -ArrowObj.transform.forward * maxDist*350;
    ArrowObj.transform.parent = null;
    ArrowCollider.enabled = true;
    ArrowRB.isKinematic = false;
    ArrowRB.AddForce(force);

В момент выстрела стреле передаётся сила с направлением от неё. Что бы стрела полетела.
Но вот незадача, появилась необходимость направлять стрелу не прямо перед собой, А в ту точку куда смотрит камера. для этого получаю координату места, куда упёрса взгляд:
Код

if (Physics.Raycast (cameraParent.transform.position, lookDirection, out hit, 50)) {
     TargetForFire = hit.point;
    } else {
     TargetForFire = cameraParent.transform.position+Vector3.forward*50;
    }

И пытаюсь направить стрелу туда
Код
fireDirection = ArrowObj.transform.TransformDirection(TargetForFire);
    Debug.Log (fireDirection);
    force = fireDirection * maxDist*50;
но получаю какую-то ерунду...
Стрела летит куда угодно, но не в том направлении, куда смотрит камера.

Буду благодарен за любую подсказку...

Добавлено (21 Фев 2015, 13:50)
---------------------------------------------
Разобрался с направлением, теперь бы понять как его превратить именно в вектор единичной длины

Код
fireDirection = ArrowObj.transform.positopn-TargetForFire;

Автор - NapalmRain
Дата добавления - 21 Фев 2015 в 13:50
seamanДата: Сб, 21 Фев 2015, 15:30 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
вектор единичной длины

Vector3.Normalize
 
Сообщение
Цитата
вектор единичной длины

Vector3.Normalize

Автор - seaman
Дата добавления - 21 Фев 2015 в 15:30
NapalmRainДата: Сб, 21 Фев 2015, 18:18 | Сообщение # 3
 
Сообщений: 473
Награды: 0
Репутация: 31
Статус: Offline
seaman, да, решение было более чем на поверхности... Спасибо))

Добавлено (21 Фев 2015, 17:54)
---------------------------------------------
Один вопрос остался не решённым: получение точки, находящейся ровно через Эн метров перед тобой...
На случай, если взгляд не найдёт никакое препятствие, нужно получить импровизированную точку на конце луча:

Код
if (Physics.Raycast (cameraParent.transform.position, lookDirection, out hit, 100)) {
    TargetForFire = hit.point;
   } else {
    Debug.DrawRay(cameraParent.position, lookDirection*50);
    TargetForFire = lookDirection*50;
    //TargetForFire = lookDirection;
   }

DrawRay при этом рисует луч именно туда, куда мне нужно, но как получить конечную точку этого "луча".. уже зашился совсем.

Добавлено (21 Фев 2015, 18:18)
---------------------------------------------
Всё, стоило пожаловаться, вопрос снять:

Код
TargetForFire = cameraParent.position+(cameraParent.forward*100);
 
Сообщениеseaman, да, решение было более чем на поверхности... Спасибо))

Добавлено (21 Фев 2015, 17:54)
---------------------------------------------
Один вопрос остался не решённым: получение точки, находящейся ровно через Эн метров перед тобой...
На случай, если взгляд не найдёт никакое препятствие, нужно получить импровизированную точку на конце луча:

Код
if (Physics.Raycast (cameraParent.transform.position, lookDirection, out hit, 100)) {
    TargetForFire = hit.point;
   } else {
    Debug.DrawRay(cameraParent.position, lookDirection*50);
    TargetForFire = lookDirection*50;
    //TargetForFire = lookDirection;
   }

DrawRay при этом рисует луч именно туда, куда мне нужно, но как получить конечную точку этого "луча".. уже зашился совсем.

Добавлено (21 Фев 2015, 18:18)
---------------------------------------------
Всё, стоило пожаловаться, вопрос снять:

Код
TargetForFire = cameraParent.position+(cameraParent.forward*100);

Автор - NapalmRain
Дата добавления - 21 Фев 2015 в 18:18
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Единичный вектор направления
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024