Войти
ПрограммированиеФорумФизика

Персонаж поворачивается не по нужной оси.

Страницы: 1 2 Следующая »
#0
18:54, 24 июня 2018

Делаю игру для фана на Unity. Вообщем. Персонаж не поворачивается по нужной оси. То есть, есть 2 "оси" в скрипте - это "Mouse X (Вправо,влево)" и "Mouse Y (Вверх, вниз)". Mouse X поворачивает модель персонажа как нужно, но Mouse Y вместо того, чтобы наклонять персонажа вниз и вверх, она наклоняет его вправо и влево. Если нужно будет видео, я запишу.
Скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour {
  public enum RotationAxes {
    MouseXAndY = 0,
    MouseX = 1,
    MouseY = 2
  }
  public RotationAxes axes = RotationAxes.MouseXAndY;

  public float sensitivityHor = 11f;
  public float sensitivityVert = 11f;

  public float minimumVert = -45f;
  public float maximumVert = 45f;

  private float _rotationX = 0;

  void Start () {
   
  }

  void Update () {
    if (axes == RotationAxes.MouseX) {
      transform.Rotate (0, Input.GetAxis ("Mouse X") * sensitivityHor, 0);
    }
    else if (axes == RotationAxes.MouseY) {
      _rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;

      _rotationX = Mathf.Clamp (_rotationX, minimumVert, maximumVert);

      float rotationY = transform.localEulerAngles.y;

      transform.localEulerAngles = new Vector3 (_rotationX, rotationY, 0);
    }
    else {
    }
  }
}


#1
18:55, 24 июня 2018

Добавлю. Персонаж наклоняется по X влево и вправо, а должен наклоняться по Z, чтобы вниз и вверх.

#2
20:22, 24 июня 2018

Blinopop
> _rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;
вроде как тут минус не нужен
правило буравчика правого,на юнити левый буравчик , в системе координат там поумножай правильно на (-1) координаты

#3
20:32, 24 июня 2018

Попробовал я убрать минус, но по прежнему модель двигается также, только трясется. Координаты менять пробовал, не получается. Или я неправильно вообще начал модель делать или в скрипте что-то. Хотя я пробовал заново импортировать модель, двигать ее.

#4
20:43, 24 июня 2018

Blinopop
_rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;
слева икс= получить игрек-мышь

поворот икс = минус  ввод.получить-ось. У

может
_rotationX -= Input.GetAxis ("Mouse X") * sensitivityVert;
слева икс = получить икс-мышь
или
_rotationY -= Input.GetAxis ("Mouse Y") * sensitivityVert;
слева игрек = получить игрек-мышь

икс и игрек см внимательнее где в каком месте должны быть

#5
20:52, 24 июня 2018

Попробовал, все равно не получилось. Какой-то дебилизм я сделал. Но спасибо за помощь)

#6
21:27, 24 июня 2018

ок
если ты делал по уроку
можешь зарядить кулаком в нос автору урока .
потому что он наверное неправильно урок сделал а еще и ты запутаный.

#7
21:37, 24 июня 2018

Хехе)

#8
17:55, 25 июня 2018

Blinopop
> Mouse Y вместо того, чтобы наклонять персонажа вниз и вверх

обычно персонажа не нужно наклонять
(движение мышкой вверх/вниз управляет камерой)

#9
18:00, 25 июня 2018

Ну у меня персонаж типа летает (Ромбик) и как бы мне нужно чтобы он поворачивался куда угодно за камерой. Вправо и влево по Mouse X нормально, а по Mouse Y вниз и вверх он наклоняться должен вниз и вверх, а он наклоняется вправо и влево. Если вам нужно будет , я сниму видео.

#10
20:15, 25 июня 2018

см понятия
правая тройка декартовая система координат
левая тройка.
повороты вокруг осей . обычно это чёткие шаги типа 45град 90град 135град 180град , шаги 30 45 90 180 360 градусов.
см математика формулы —векторное произведение векторов .
Изображение
это правая тройка.
правило - если первый вектор поворачивать ко второму вектору по кратчайшему пути (по наименьшему углу) против часовой стрелки и это видится из конца третьего вектора —это система правой тройки.
если ситуация наоборот—это левая тройка.
правая рука.левая рука. правило буравчика правая нарезка.левая нарезка.

на картинке здесь
а это ось икс
b это ось игрек
c это ось зэт .

то есть алгоритм
взять ось икс.
начать поворачивать ось икс к оси игрек (в вашем обычном понимании обыденная система XY)
если кратчайший поворот (по наименьшему пути) от конца вектора зэт видится против часовой стрелки
это есть правая тройка.

обратная ситуация это левая тройка.

указательный палец (ось икс) вращается против часовой стрелки
к среднему пальцу(к оси игрек)
это видится от конца большого пальца(это мы смотрим от конца вектора зэт )

но на самом деле эта картинка плохая и мерять лучше по жесту FUCK YOU

то есть
большой палец=ось икс
указательный палец =ось игрек
большой палец ось икс поворачиваем к указательному пальцу ось игрек а смотрим от конца среднего пальца FUCK YOU=ось зэт
кратчайший поворот - против часовой стрелке.

#11
20:34, 25 июня 2018

Хорошо. Понятия я просмотрел, подучил. Но извините , как это относится к делу?) Я просто туплю.

#12
20:43, 25 июня 2018

Blinopop
> Но извините , как это относится к делу?) Я просто туплю.
Это супер секретное знание ,технологическое ноу-хау и такими секретами производства не разбрасываются.Это вобще надо проводить как платная консультация.Потому как — не можешь усвоить-твои проблемы а нас не колышет.

относится это прямо к делу.
3д-программы имеют основа —правая тройка
юнити имеет основа—-левая тройка
  открой юнити и осмотри там расположение системы XYZ  — в юнити тройка левая.
левая рука жест fuck you
большой палец=ось икс
указательный=игрек
поворот по кратчайшему пути икс к игреку
смотрим от конца оси зэт (от конца среднего пальца)
левая рука
юнити

после того как провел импорт в юнити
  юнити есть левая тройка
  внутри юнити появилось тело которое имеет правую тройку

координаты тела надо обратить с правой на левую.

надо написать программку проворота осей.

правая тройка=(-1)*левая тройка
левая тройка=(-1)*правая тройка


_rotationX -= Input.GetAxis ("Mouse Y") * sensitivityVert;

вот эта строка .
вращение икс = минус ввод.получить-ось (мышь-игрек)

то есть
(координата игрек)*(-1)=координата икс

_rotationX -
этот минус должен быть?или нет?

#13
20:55, 25 июня 2018

Да, должен. Я читаю книгу "Unity в действии" и по ней все делаю.

#14
21:00, 25 июня 2018

_rotationX -= Input.GetAxis ("Mouse Y")

слева от равенства икс
справа от равенства игрек

это верно?

может справа от равенства надо MouseX
маус икс
а не маус игрек

или слева от равенства надо игрек заместо икс

?

Страницы: 1 2 Следующая »
ПрограммированиеФорумФизика

Тема в архиве.