VolkOrievith Дата: Сб, 19 Окт 2013, 18:13 | Сообщение # 1
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Я думаю многие использовали функцию Quaternion.Slerp(from, to, speed). Вот тот-же принцип, но лучше(более расширенно управление этой функцией, нужно поворачивать два объекта: себя по горизонтале, дуло по вертикале, без дула - никак): Код
var DownDistanse : float; var UpDistanse : float; var LeftDistanse : float; var RightDistanse : float; var TurnForceX : float; // сила вращения по горизонтале var TurnForceY : float; // сила вращения по вертикале var Gunpoint : GameObject; // дуло var Target : GameObject; // цель function Update (){ DownDistanse = Vector3.Distance(transform.position + Gunpoint.transform.TransformDirection(Vector3(0,-5,0)), Target.transform.position); UpDistanse = Vector3.Distance(transform.position + Gunpoint.transform.TransformDirection(Vector3(0,5,0)), Target.transform.position); RightDistanse = Vector3.Distance(transform.position + transform.TransformDirection(Vector3(5,0,0)), Target.transform.position); LeftDistanse = Vector3.Distance(transform.position + transform.TransformDirection(Vector3(-5,0,0)), Target.transform.position); transform.Rotate (0,(LeftDistanse - RightDistanse) * Time.deltaTime * TurnForceX, 0); // вычитаем из левой дистанции правую, умножаем на силу поворота, и поворачиваем себя на полученную величину. Gunpoint.transform.Rotate ((UpDistanse - DownDistanse) * Time.deltaTime * TurnForceY, 0, 0); // Такую-же манипуляцию проделываем с дулом. }
Что-то непонятно? - Спрашивайте.
Сообщение Я думаю многие использовали функцию Quaternion.Slerp(from, to, speed). Вот тот-же принцип, но лучше(более расширенно управление этой функцией, нужно поворачивать два объекта: себя по горизонтале, дуло по вертикале, без дула - никак): Код
var DownDistanse : float; var UpDistanse : float; var LeftDistanse : float; var RightDistanse : float; var TurnForceX : float; // сила вращения по горизонтале var TurnForceY : float; // сила вращения по вертикале var Gunpoint : GameObject; // дуло var Target : GameObject; // цель function Update (){ DownDistanse = Vector3.Distance(transform.position + Gunpoint.transform.TransformDirection(Vector3(0,-5,0)), Target.transform.position); UpDistanse = Vector3.Distance(transform.position + Gunpoint.transform.TransformDirection(Vector3(0,5,0)), Target.transform.position); RightDistanse = Vector3.Distance(transform.position + transform.TransformDirection(Vector3(5,0,0)), Target.transform.position); LeftDistanse = Vector3.Distance(transform.position + transform.TransformDirection(Vector3(-5,0,0)), Target.transform.position); transform.Rotate (0,(LeftDistanse - RightDistanse) * Time.deltaTime * TurnForceX, 0); // вычитаем из левой дистанции правую, умножаем на силу поворота, и поворачиваем себя на полученную величину. Gunpoint.transform.Rotate ((UpDistanse - DownDistanse) * Time.deltaTime * TurnForceY, 0, 0); // Такую-же манипуляцию проделываем с дулом. }
Что-то непонятно? - Спрашивайте. Автор - VolkOrievith Дата добавления - 19 Окт 2013 в 18:13