Программная имитация сервомотора.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Программная имитация сервомотора.

Сообщение xrou 04 мар 2019, 08:39

Всем привет.
Нужно сделать сервомотор, написал скрипт

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Serva : MonoBehaviour
{
    public bool ROOT;
    public Serva ParentScript;
    public Vector3 Axis;
    public bool UseLimit;
    public float Limit_MIN;
    public float Limit_MAX;
    public float Angle;
    private float PrevParentAngle;

    void Start()
    {
    }

    void Update()
    {
        if (!ROOT)
        {
            if (Axis.x == 1)
            {
                if (UseLimit == true)
                {
                    if (Angle >= Limit_MIN && Angle <= Limit_MAX)
                    {
                        transform.localRotation = Quaternion.Euler(Angle, 0, 0);
                    }
                    else if (Angle < Limit_MIN)
                    {
                        transform.localRotation = Quaternion.Euler(Limit_MIN, 0, 0);
                    }
                    else
                    {
                        transform.localRotation = Quaternion.Euler(Limit_MAX, 0, 0);
                    }
                }
                else
                {
                    transform.localRotation = Quaternion.Euler(Angle, 0, 0);
                }
                PrevParentAngle = ParentScript.Angle;
            }
            else if (Axis.y == 1)
            {
                if (UseLimit == true)
                {
                    if (Angle >= Limit_MIN && Angle <= Limit_MAX)
                    {
                        transform.localRotation = Quaternion.Euler(0, Angle, 0);
                    }
                    else if (Angle < Limit_MIN)
                    {
                        transform.localRotation = Quaternion.Euler(0, Limit_MIN, 0);
                    }
                    else
                    {
                        transform.localRotation = Quaternion.Euler(0, Limit_MAX, 0);
                    }
                }
                else
                {
                    transform.localRotation = Quaternion.Euler(0, Angle, 0);
                }
            }
            else if (Axis.z == 1)
            {
                if (UseLimit == true)
                {
                    if (Angle >= Limit_MIN && Angle <= Limit_MAX)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, Angle);
                    }
                    else if (Angle < Limit_MIN)
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, Limit_MIN);
                    }
                    else
                    {
                        transform.localRotation = Quaternion.Euler(0, 0, Limit_MAX);
                    }
                }
                else
                {
                    transform.localRotation = Quaternion.Euler(0, 0, Angle);
                }
            }
        }
        else
        {
            transform.localRotation = Quaternion.Euler(0, 0, 0);
        }
    }
}
 


но проблема в том, что в таком скрипте серва моментально перескакивает из текущего положения в заданное, а физическая серва затрачивает на это некоторое время.
Два вопроса:
1.Как сделать перебор всех углов от текущего к заданному?
2.Как замедлить выполнение команды, чтобы это выглядело физически правдоподобно?
и желательно с возможность регулировки скорости.

UPD я не могу напрямую применить скорость, т.к. основной параметр это угол поворота.
xrou
UNец
 
Сообщения: 27
Зарегистрирован: 10 сен 2018, 08:56



Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21