@art303

Что я сделал не так?

вот вроде бы все должно работать, а свет крутиться только в раёне 90+-2 градуса
что я сделал не так и как это нормально реализуется?(нужно, чтоб лампа качалась туда-сюда)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class lightrotate : MonoBehaviour
{
    public Light mylight;
    float rotate = 90;
    public Vector3 rotation;
    public float odin = 1;
    public float rot;
    // Start is called before the first frame update
    void Start()
    {
        
        Time.fixedDeltaTime = 1f / 30;
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        rotation = transform.eulerAngles;
        rot = Mathf.Abs(rotate - rotation.x);
        if(rot >= 30)
        {
            odin *= -1;
        }
        transform.eulerAngles += new Vector3(odin * 2, 0, 0);
    }
}
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
Nikcet
@Nikcet
А нельзя повесить на лампу физику и толкать ее простым rigidBody.AddTorque(..., ForceMode.Impulse) время от времени?
Ответ написан
Ну так у тебя в коде прямо так и написано:
if(rot >= 30)
        {
            odin *= -1;
        }

Если предположить, что rot = 90, то при первом FixedUpdate он у тебя крутанётся до 88, тк rot >= 30.
При следующем FixedUpdate, тк rot всё ещё >=30, у тебя "odin" будет инвертирован и крутанётся уже обратно до 90.
Попробуй вот так:
void FixedUpdate()
    {
        rotation = transform.eulerAngles;
        rot = Mathf.Abs(rotate - rotation.x);
        var dir = rot >= 30 ? -1 : 1; // Только для примера
        transform.eulerAngles += new Vector3(dir * 2, 0, 0);
    }

+ Лучше перейди на Update обычный.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы