Как ограничить вращение объекту?

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

Как ограничить вращение объекту?

Сообщение BANANARAGE 05 апр 2021, 14:53

Как ограничить вращение объекту?
Делаю турель и хочу что бы она поворачивалась от -30 до 30 по оси z.
Но вообще не могу понять ка это сделать.
Прошу вас о помощи.
Вот код;
Синтаксис:
  1. using System.Collections; 
  2. using System.Collections.Generic; 
  3. using UnityEngine; 
  4.  
  5. public class Turret : MonoBehaviour 
  6. [SerializeField] private float range = 4f; 
  7. [SerializeField] private LayerMask layers; 
  8. private Collider2D target; 
  9.  
  10. private void Update() 
  11. Check(); 
  12. Look(); 
  13.  
  14. void Check() 
  15. target = Physics2D.OverlapCircle(transform.position, range, layers); 
  16.  
  17. void Look() 
  18. if (target != null) 
  19. Vector2 direction = target.transform.position - transform.position; 
  20. float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 180; 
  21. transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 
  22.  
  23. private void OnDrawGizmosSelected() 
  24. Gizmos.DrawWireSphere(transform.position, range); 
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Как ограничить вращение объекту?

Сообщение Tolking 05 апр 2021, 15:13

angle = mathf.clamp(angle,-30,30);
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как ограничить вращение объекту?

Сообщение BANANARAGE 05 апр 2021, 15:40

Tolking писал(а):angle = mathf.clamp(angle,-30,30);

Сделал, но он теперь только в диапазоне 0 и -30 работает, а когда уходишь он резко уходит на -30
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Как ограничить вращение объекту?

Сообщение 1max1 05 апр 2021, 17:05

Синтаксис:
Используется csharp
    public float minAngle = -20.0f;
    public float maxAngle = 30.0f;

    void Update()
    {
        var ea = transform.localEulerAngles;

        if (Mathf.DeltaAngle(ea.z, minAngle) > 0.0f)
            ea.z = minAngle;

        if (Mathf.DeltaAngle(ea.z, maxAngle) < 0.0f)
            ea.z = maxAngle;

        transform.localEulerAngles = ea;
    }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как ограничить вращение объекту?

Сообщение BANANARAGE 05 апр 2021, 17:22

1max1 писал(а):
Синтаксис:
Используется csharp
    public float minAngle = -20.0f;
    public float maxAngle = 30.0f;

    void Update()
    {
        var ea = transform.localEulerAngles;

        if (Mathf.DeltaAngle(ea.z, minAngle) > 0.0f)
            ea.z = minAngle;

        if (Mathf.DeltaAngle(ea.z, maxAngle) < 0.0f)
            ea.z = maxAngle;

        transform.localEulerAngles = ea;
    }


А как ваш скрипт внедрить в мой?
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03

Re: Как ограничить вращение объекту?

Сообщение 1max1 05 апр 2021, 17:34

Наверное написать после всего в апдейте.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как ограничить вращение объекту?

Сообщение BANANARAGE 05 апр 2021, 17:41

1max1 писал(а):Наверное написать после всего в апдейте.

Спасибо большое, я ставил все в начале и совсем не подумал поставить в конце
BANANARAGE
UNец
 
Сообщения: 37
Зарегистрирован: 10 мар 2021, 01:03


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

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

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