Поворот персонажа по направлению движения

Программирование для iPhone & Android

Поворот персонажа по направлению движения

Сообщение ArtGor 14 июн 2019, 02:04

Я новичок и я столкнулся с такой проблемой.
Есть скрипт,где я рассчитал вектор движения и двигаю по нему объект соответственно,рассчитывал через сенсорный джойстик.
Делал я это через оси x и y.В общем,не могу сообразить как повернуть объект по оси z по направлению движения,помогите пожалуйста.Вот скрипт:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

   
    public float speedMove;  
    private Vector3 moveVector;
    private JScontroller mContr;

    void Start() {
        mContr = GameObject.FindGameObjectWithTag("Joystick").GetComponent<JScontroller>();

    }
       
        void Update ()
    {
       moveVector = Vector3.zero;
       moveVector.x = mContr.Horizontal() * speedMove;
       moveVector.y = mContr.Vertical() * speedMove;
       transform.Translate(moveVector * speedMove * Time.deltaTime);
    }
}
ArtGor
UNец
 
Сообщения: 21
Зарегистрирован: 14 июн 2019, 01:48

Re: Поворот персонажа по направлению движения

Сообщение waruiyume 14 июн 2019, 03:13

Quaternion.LookRotation
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Поворот персонажа по направлению движения

Сообщение ArtGor 14 июн 2019, 13:08

waruiyume писал(а):Quaternion.LookRotation

Чёт не получается.Если я ставлю Quaternion.LookRotation(moveVector),то объект крутится по осям x и y.
В API показанно
Синтаксис:
Используется csharp
 Vector3 relativePos = target.position - transform.position;
        Quaternion rotation = Quaternion.LookRotation(relativePos);
        transform.rotation = rotation;

но у меня нет цели,вектор вычисляется с джойстика.
Вот я и не понимаю какое значение поставить,как его вычислить вообще,как не пытаюсь, крутится по x-y
ArtGor
UNец
 
Сообщения: 21
Зарегистрирован: 14 июн 2019, 01:48

Re: Поворот персонажа по направлению движения

Сообщение ArtGor 14 июн 2019, 15:02

решил проблему добавив
Синтаксис:
Используется csharp
Quaternion rotation = Quaternion.LookRotation(moveVector , transform.TransformDirection(Vector3.forward));
        transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);

Но возникла другая заминка,тк объект поворачивается,то и направления движения изменяются,т.е если персонаж повернут на 90 градусов,то лево становится низом,а право становится верхом.
ArtGor
UNец
 
Сообщения: 21
Зарегистрирован: 14 июн 2019, 01:48

Re: Поворот персонажа по направлению движения

Сообщение ArtGor 14 июн 2019, 15:17

Ну и ещё раз исправил,возможно костылём.
Создал пустышку и кинул в дочерние спрайт игрока,а в скрипте добавил переменную для добавления этого спрайта,ну и двигаю пустышку отдельно,спрайт поворачиваю так же отдельно
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    public GameObject rtObj;
    public float speedMove;
    private Vector3 moveVector;
    private JScontroller mContr;

    void Start()
    {
        mContr = GameObject.FindGameObjectWithTag("Joystick").GetComponent<JScontroller>();

    }

    void Update()
    {
        moveVector = Vector3.zero;
        moveVector.x = mContr.Horizontal() * speedMove;
        moveVector.y = mContr.Vertical() * speedMove;
        transform.Translate(moveVector * speedMove * Time.deltaTime);

        Quaternion rotation = Quaternion.LookRotation(moveVector , transform.TransformDirection(Vector3.forward));
        rtObj.transform.rotation = new Quaternion(0, 0, rotation.z, rotation.w);
    }
}
 

Вот полный скрипт,мб кому-нибудь понадобится.
Прям блог получился маленький ;)
ArtGor
UNец
 
Сообщения: 21
Зарегистрирован: 14 июн 2019, 01:48


Вернуться в iPhone & Android

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6