Ограничение по перемещению по окружности

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Ограничение по перемещению по окружности

Сообщение kostya315 20 авг 2020, 17:42

Есть объект, который перемещается с помощью мыши, а так же точка, что-то вроде якоря.
Используемый код:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class legmove : MonoBehaviour
{
    public float speed = 10f;
    public GameObject barrier;//спрайт барьера
    public Rigidbody2D leg;//перемещаемый объект
    public Vector3 dot;//координаты точки
    public Transform centre;//координаты якоря

    bool click = false;
    Vector3 tap;//координаты нажатия

    void Update()
    {
        tap = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }
    void FixedUpdate()
    {
        if (click)
        {
            if (Vector2.Distance(centre.position, leg.position) < 4.5f)
            leg.velocity = (tap - leg.transform.position) * speed;
        }
        else
        {
            leg.velocity = (dot - leg.transform.position) * speed;
        }
    }
    private void LateUpdate()
    {
        if(click)
        {
            if (Vector2.Distance(centre.position, leg.position) >= 4.5f)
                leg.transform.position = centre.position + Vector3.ClampMagnitude(leg.transform.position - centre.position, 4.5f);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "dot")
        {
            dot = collision.transform.position;
            dot.z = -0.21f;
        }
    }
    private void OnMouseDown()
    {
        click = true;
        barrier.SetActive(true);
        leg.bodyType = RigidbodyType2D.Dynamic;
    }
    private void OnMouseUp()
    {
        click = false;
        barrier.SetActive(false);
        leg.bodyType = RigidbodyType2D.Kinematic;
    }
}
 

Как можно заменить
Синтаксис:
Используется csharp
leg.transform.position = centre.position + Vector3.ClampMagnitude(leg.transform.position - centre.position, 4.5f);
, чтобы ограничение работало с физикой?(в нынешнем варианте при достижении границы, объект начинает проходить сквозь стены, в то время как если не доходить до границы, все нормально, и через стены ничего не проходит)
kostya315
UNец
 
Сообщения: 8
Зарегистрирован: 18 авг 2020, 15:12

Re: Ограничение по перемещению по окружности

Сообщение kostya315 22 авг 2020, 00:15

В общем, не нашел ничего лучше, кроме как повесить poligon collider на обьект-барьер, сделав из него форму круга, в котором обьект может перемещаться, а так же перемещать обьект через transform.position к ближайшей точке в этом круге. Скорее всего костыль, но работает:D
kostya315
UNец
 
Сообщения: 8
Зарегистрирован: 18 авг 2020, 15:12


Вернуться в Editor

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

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