Есть код вращения:
using UnityEngine;
public class CubeFloat : MonoBehaviour
{
public float speed, tilt;
private Vector3 target = new Vector3(0, 1.39f, 0);
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, target, Time.deltaTime * speed);
if (transform.position == target && target.y != 0.1f)
target.y = 0.1f;
else if (transform.position == target && target.y == 0.1f)
target.y = 1.39f;
transform.Rotate(Vector3.up * tilt);
}
}
Ожидаемый результат: вращение объекта только по оси Y и не делать смещения по Z.
Фактический результат:
...
UPD: Вращение во круг своей оси работает, необходимо двигать только по Y. Движение ограничено, то есть, когда position.Y дошло до определенного значения, оно должно изменить направление. Предполагается, что кубик должен вращаться вверх-вниз.
У меня есть следующие предположения:
У тебя обьект, видимо, находится в другом обьекте. И как следствие -- используются локальные оси вместо глобальных. Или же ты в коде намадрил(влом разбиратся, все равно не похоже на толковое решение)
....
Сделай просто смену угла через задавание нового Rotation. Все.
На вскидку код будет что-то вроде:
var oldRot = transform.position.Rotation;
transform.position.Rotation = new Quanterion(oldRot.x, oldRot.y + Time.deltaTime * speed, oldRot.z, oldRot.w)
не проверял и юнити запускал давно, но должно заработать, думаю.
Или же сделай что-то вроде:
public class ExampleClass : MonoBehaviour {
public Transform target;
public float speed;
void Update() {
Vector3 targetDir = target.position - transform.position;
float step = speed * Time.deltaTime;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);
}
}
код взял с https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html
Логика должна быть какой-то такой
using UnityEngine;
public class CubeRotation : MonoBehaviour
{
public float rotationSpeed = 6.5f, moveSpeed = 8f, range = 10f;
Vector3 startPosition;
Transform cube;
void Start()
{
cube = GameObject.GetComponent<Transform>(); // получаем ссылку на компонент Trnasform
startPosition = cube.position; // запоминаем стартовые координаты
}
void Update()
{
cube.Rotate(Vector3.up * rotationSpeed * Time.deltaTime); // вращаем куб вокруг своей оси
if (cube.position.y == startPosition.y)
{
// двигаем куб вверх, если он только начал двигаться
cube.Translate(Vector3.up * Time.deltaTime * moveSpeed);
}
if (cube.position.y > startPosition.y || cube.position.y == startPosition.y - range)
{
while (cube.position != startPosition.y + range)
// двигаем куб вверх, пока он не достиг предела от начального положения до + range
Translate(Vector3.up * Time.deltaTime * moveSpeed);
}
else if (cube.position.y < startPosition.y || cube.position.y == startPosition.y + range)
{
// двигаем куб вниз, пока он не достиг предела от начального положения до - range
while (cube.position != startPosition.y - range)
{
Translate(Vector3.down * Time.deltaTime * moveSpeed);
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть коллекция вида ObservableCollection<BaseClass> Project {get;set;}
Panel1 открывается по нажатию на buttonНужно чтобы panel1 скрылась когда курсор выходит за ее границы
Имеется 2 формы, form1 - картинки с названиями велосипедов, форма AddBicycle - для добавления нового велосипеда в магазинПроблема заключается в том,...