Четверг, 28 Марта 2024, 17:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Joystick , mobile controller , transform.rotation (Помощь с реализацией вращения персонажа)
Joystick , mobile controller , transform.rotation
GermeticДата: Воскресенье, 22 Марта 2015, 16:08 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет ! , нужно реализовать управление как на данном видео :
Клик <===
или тут :
Клик <===
играюсь с этим уже день 3й .
Вот мой текущий код :


Если крутить по позиции джойстика , персонаж , при опускании пальца с джойстика - крутится с исходную позицию (Не удивительно , вить координаты джойстика возвращаются в 0.0)
Если крутить по условии
Код
if ((h>0.5)||(h<-0.5)){
- персонаж крутится только 1 раз , дабы крутануть его еще раз - надо опускать джойстик .

Помогите с решением проблемы , реально идей уже нету Т_Т wacko


И опыт сын ошибок трудных

Сообщение отредактировал 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);
}
}


И опыт сын ошибок трудных
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Joystick , mobile controller , transform.rotation (Помощь с реализацией вращения персонажа)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг