Понедельник, 25 Ноября 2024, 18:58

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
поворот в сторону движения
priesteviДата: Четверг, 09 Февраля 2017, 16:28 | Сообщение # 1
был не раз
Сейчас нет на сайте
доброго времени суток уважаемые! вот нелёгкая занесла меня на форум ибо уже всю голову сломал пытаясь понять в каком направлении идти. собственно сделал капсулу на нее повесил скрипт движения и дописал туда кусок кода что бы капсула поворачивалась в сторону движения но после ее поворота оси как то проворачиваются что ли и нажимая движение влево капсула поворачивается туда и едет вниз.
я так понимаю что оси ввода поворачиваются вместе с капсулой но что то не могу понять уже часов 5 как это исправить
п.с. камера статичная как в диабло

Код

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour
{
public Transform capsule;
public float capsuleAngleRotation;
float speed = 10;
Rigidbody rb;

void Start ()
{
rb = GetComponent <Rigidbody> ();
}

void FixedUpdate ()
{
Vector3 dir = new Vector3 (Input.GetAxis ("Horizontal"), 0, Input.GetAxis ("Vertical"));
rb.MovePosition (rb.position + transform.TransformDirection(dir) * speed * Time.deltaTime);

Quaternion rot = Quaternion.Euler(dir);
transform.rotation *= rot;
rb.transform.forward = rb.transform.forward + dir;
}

}


Сообщение отредактировал priestevi - Четверг, 09 Февраля 2017, 16:29
falcowareДата: Четверг, 09 Февраля 2017, 16:55 | Сообщение # 2
старожил
Сейчас нет на сайте
priestevi,
Я так понимаю есть два вектора.

Вектор движения VTMOVE.
И вектор объекта. VTOBJ.

Что если вектор Х вычислить так:

Х = X + (-Х + У)/NTIME * TIME;

Тогда вектор Х станет вектором У через NTIME. Ну и вычислить тройку векторов потом с учетом изменения вектора Х?
WiteДата: Четверг, 09 Февраля 2017, 19:08 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Euler Это углы эйлера, те самые которые мы привыкли использовать от 0 до 360. Передавая туда вектор вы максимум получате 1 градус по одной оси. Если вектор нормализован.
Домножая один Кватернион на другой мы получаем вращение второго в локальных координатах первого.

В данной ситуации вам нужно двигать вашего героя так rb.MovePosition(rb.position+transform.forward)*speed*Time.deltaTime;
То-есть просто прямо.

Ваш вектор dir надо передовать в функцию Quaternion.LookRotation(dir.normalized,Vector3.up).
Если ваш герой двигается не в одной плоскости и наклоняется то тогда вам нужна нормаль пола (вектор куда смотрит в этот момент кусок пола на ктором вы стоите) и вместо Vector3.up подставлять эту нормаль. Ее можно найти рэйкастом.
ReanДата: Четверг, 09 Февраля 2017, 20:21 | Сообщение # 4
участник
Сейчас нет на сайте
priestevi, не совсем понятно относительно чего выбирается направление: камеры, персонажа или фиксированные направления.
В большинстве согласен с Wite. Не совсем корректно используются углы Эйлера и/или перемещение.

Ниже приведу два варианта.

1. Камера фиксирована, персонаж перемещается в направлении нажатой клавиши (W, A, S, D - вверх, влево, вниз, вправо соответственно):
Пример:

Код:


2. Камера фиксирована, перемещение персонажа при помощи вращения и движения прямо/назад (W, S - прямо и назад; A, D - поворот влево и вправо соответственно)
Пример:

Код:


Сообщение отредактировал Rean - Четверг, 09 Февраля 2017, 22:52
priesteviДата: Пятница, 10 Февраля 2017, 11:49 | Сообщение # 5
был не раз
Сейчас нет на сайте
всем спасибо за ответы! сейчас сяду переделывать и обязательно сообщу результат
Rean ваш первый вариант это именно тот результат которого я хочу добиться
итак в общем все работает по примеру товарища Rean`а спасибо за помощь, я бы в этих нюансах сам не разобрался скорее всего.
Вот итоговый код если вдруг кому то пригодится

Добавлено (10 февраля 2017, 11:49)
---------------------------------------------
в моем сферическом мире капсула теперь во время движения перестала находиться перпендикулярно земле на экваторе, подскажите пожалуйста как сделать что бы капсула была перпендикулярно земле? в самом начале где у меня еще было кривое вращение там перпендикуляр соблюдался при движении по всей окружности
вот пример мира


как стало работать


Сообщение отредактировал priestevi - Пятница, 10 Февраля 2017, 09:03
  • Страница 1 из 1
  • 1
Поиск:

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