Joystick , mobile controller , transform.rotation
| |
Germetic | Дата: Воскресенье, 22 Марта 2015, 16:08 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Всем привет ! , нужно реализовать управление как на данном видео : Клик <=== или тут : Клик <=== играюсь с этим уже день 3й . Вот мой текущий код :
Если крутить по позиции джойстика , персонаж , при опускании пальца с джойстика - крутится с исходную позицию (Не удивительно , вить координаты джойстика возвращаются в 0.0) Если крутить по условии Код if ((h>0.5)||(h<-0.5)){ - персонаж крутится только 1 раз , дабы крутануть его еще раз - надо опускать джойстик .
Помогите с решением проблемы , реально идей уже нету Т_Т
И опыт сын ошибок трудных
Сообщение отредактировал Germetic - Воскресенье, 22 Марта 2015, 16:08 |
|
| |
MANMANA | Дата: Воскресенье, 22 Марта 2015, 20:03 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| Приведенный ниже куб просьте на кубик и посмотрите, что он делает Если такой код подойдет, то в нижеизложенном коде догадаетесь подставить свои: translation это ваш ud, Input.GetAxis ("Vertical") это ваш Joystick.hor и т.д. Код #pragma strict function Start () {
}
function Update () { var translation : float = Input.GetAxis ("Vertical"); var rotation : float = Input.GetAxis ("Horizontal"); if (translation>0) { transform.rotation = Quaternion.Euler (0, 0, 0); }
else if (translation<0) transform.rotation = Quaternion.Euler (0, 180, 0);
if (rotation>0) { transform.rotation = Quaternion.Euler (0, 90, 0); }
else if (rotation<0) transform.rotation = Quaternion.Euler (0, 270, 0);
// transform.Rotate (0, rotation, 0); // Move translation along the object's z-axis transform.Translate (Vector3.forward*10*Time.deltaTime); // Rotate around our y-axis //transform.Rotate (0, rotation, 0); }
Это насколько я понял поставленную задачу.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Germetic | Дата: Воскресенье, 22 Марта 2015, 20:40 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Контроллер строго поворачивает на 90 градусов , повороты очень резкие . Да и с самого начала персонаж двигается безостановочно прямо
И опыт сын ошибок трудных
|
|
| |
MANMANA | Дата: Воскресенье, 22 Марта 2015, 20:53 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| ааааа, так Вы платное написание скрипта заказывали? а вот - бесплатный совет: используйте лерп для плавных переходов. Вы также всегда можете исправить вот эту строку transform.Translate (Vector3.forward*10*Time.deltaTime); ,чтобы у Вас все было хорошо.Добавлено (22 марта 2015, 20:53) --------------------------------------------- вы также всегда можете двигать объект в мировых координатах, предвариительно плавно развернув его. вы также можете развернуть персонаж анимацией посредством топтания на месте
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Germetic | Дата: Вторник, 24 Марта 2015, 21:08 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| В общем решил попробовать решить проблему через Lerp , но не тут то было. Персонаж не может вращаться по оси Y больше чем в диапозоне -90 U 90
А вот сам код : [/spoiler]Код #pragma strict var v:float; var h:float; var pozzy : Quaternion; var newrot:Vector3; var rot :Quaternion; var rotationSpeed:float = 2; static var lr:float; static var ud:float; var jumprange:float; var movespeed:float; var hrot: float; // перменная которая крутит персонажа internal var animator:Animator; function Start () { animator = GetComponent(Animator); lr= Joystick.hor; ud= Joystick.ver;
} function FixedUpdate(){ animator.SetFloat("Speed", v,0.1f,Time.deltaTime); animator.SetFloat("Direction", h,0.1f,Time.deltaTime); }
function Update () {
v = ud; h = lr; ud= Joystick.ver; lr= Joystick.hor; pozzy = Quaternion.Euler(0,transform.rotation.y-180,0); newrot = Vector3(0,transform.rotation.y + 90*h,0);
gameObject.transform.position += gameObject.transform.forward * movespeed *v * Time.deltaTime;
if((h > 0.2)||(h < -0.2)){ gameObject.transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(Vector3(0,transform.rotation.y + (90 * h),0)), Time.deltaTime * 2); }
if (v < -0.2){ gameObject.transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(Vector3(0,transform.rotation.y-180,0)), Time.deltaTime); } }
И опыт сын ошибок трудных
|
|
| |
|