Как заставить объект вращаться по оси?

234
14 апреля 2017, 19:19

Всем привет. Этот код вращает мой объект по "y" оси. А как я могу поменять на "x"?

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

public class Corei7_anim : MonoBehaviour {

public float speed, tilt; private Vector3 target = new Vector3(0, 0, 0); // Use this for initialization void Start () { } // Update is called once per frame void Update () { transform.Rotate(Vector3.up * tilt); }}

Answer 1

Как-то так:

Transform transform;
void Start()
{
    transform = GameObject.GetComponent<Transform>();
    // Получаем ссылку на компонент Transfrom после первого кадра
    // Start() можно заменить на Awake(), если хочется
    // Тогда будем получать ссылку до старта сцены
}
void Update()
{
    transform.Rotate(Vector3.up * 4f * Time.deltaTime);
    // Вращаем объект вокруг своей оси
    // Важно понимать какой вектор отвечает за ось
    // Глянем в доки. Vector3.up - это вектор (0, 1, 0). Отлично, подходит
}

P.S. Со скриптом в GetComponent() мог немного накосячить, давно не пишу на шарпе и не работаю с Unity, но вроде всё верно. Также постоянно в Update() писать transfrom.Rotate() без взятия ссылки на компонент Transfrom - пример плохого кода. Потому что transform в Unity автоматически выполняет функцию взятия ссылки на компонент, но не сохраняет её. То есть вы выполняете лишнюю операцию каждый кадр.

Если у вас модель с неправильно настроенным вращением, то нужно использовать другие вектора. Если вам сложно понять вокруг какого вектора будет двигаться модель,вы можете нарисовать этот вектор с помощью функции Debug.DrawRay()

Например, так:

Debug.DrawRay(transform.position, Vector3.forward, Color.red);

Таким образом в редакторе будет отображён луч из объекта по направлению Vector3.forward

Документацию к Debug.DrawRay() можно найти тут

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

Но это тоже не самый лучший вариант. Гораздо лучше починить модель в каком-нибудь 3D редакторе и сделать импорт модели заново.

В любом случае, какой вариант выбирать - решать вам.

Answer 2

Решение:

transform.Rotate(Vector3.forward * tilt);

Возможные значение forward, fwd, up, down, left, right. (Так же есть one и zero но ничего не поменялось)

READ ALSO
Как заставить IIS обрабатывать SOAPAction?

Как заставить IIS обрабатывать SOAPAction?

Работал работал себе SOAP под IIS 6 на NET 20, и спустя последнюю неделю начал выдавать такую ошибку (для запроса Soap 1

209
с# запрос на выборку из mysql

с# запрос на выборку из mysql

Есть запрос к БД:

192
Удаление дочернего елемента WPF Viewport3D

Удаление дочернего елемента WPF Viewport3D

ЗдравствуйтеВ Viewport3D добавляю линию, линия рисуется без проблем, методом из библиотеки 3DTools

217
Работа с планировщиком заданий Windows

Работа с планировщиком заданий Windows

Добрый вечер, столкнулся с такой проблемойСоздаю задание в планировщике задач

237