Стены без Rigidbody2D для андроид

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

Стены без Rigidbody2D для андроид

Сообщение kostya315 18 авг 2020, 21:13

Делаю небольшую игру на андроид, где было реализовано передвижение обьекта через transform.position (тк нужно было отслеживать положение пальца на экране). Необходимо, чтобы при столкновении с другим обьектом(стенкой), он не проходил сквозь него. Пробовал через rigidbody, ставил Collision Detection на Continuous - не останавливается и проходит сквозь стенку. Как реализовать остановку о стенку?
код:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class legmove : MonoBehaviour
{
    bool cl = false;
    public GameObject barrier; //спрайт ограничения
    public Transform centre; // центральная точка
    public legmove leg;//дубликат для проверки точки привязки обьекта с тем же сскриптом
    public Transform dot;//точка привязки
   
    Vector3 point;
    void FixedUpdate()
    {
        if (!cl)
        {
            this.transform.position = new Vector3(dot.transform.position.x, dot.transform.position.y, -0.03f); //перемещение обьекта к привязанной точке
        }
        if (cl)
        {
            for (int i = 0; i < Input.touchCount; i++)
            {
                if (Input.GetTouch(i).phase == TouchPhase.Moved )
                {
                    Vector3 p = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
                    point = centre.transform.position;
                    p.z = this.transform.position.z;
                    this.transform.position = p;
                    this.transform.position = point + Vector3.ClampMagnitude(transform.position - point, 4.5f);//ограничение для перемещения
                }
            }
        }
    }
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "wall")
        {
            cl = false;
        }
    }




    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "dot" && collision.transform != leg.dot)
        {
            dot = collision.transform;
        }
    }
    private void OnMouseDown()
    {
        barrier.SetActive(true);
        cl = true;
    }
    private void OnMouseUp()
    {
        cl = false;
        barrier.SetActive(false);
    }
}

 
kostya315
UNец
 
Сообщения: 8
Зарегистрирован: 18 авг 2020, 15:12

Re: Стены без Rigidbody2D для андроид

Сообщение 1max1 18 авг 2020, 22:43

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

Re: Стены без Rigidbody2D для андроид

Сообщение kostya315 18 авг 2020, 22:55

1max1 писал(а):Тебе нужно двигать физикой, а не трансформом, иначе нормально никак.

Я пытался адаптировать скрипт под такое перемещение, но в итоге скрипт вел себя крайне нестабильно, из-за чего я не мог даже просто подвинуть обьект к стенке, тк он улетал куда-то. Но возможно я просто что-то делал не так.
kostya315
UNец
 
Сообщения: 8
Зарегистрирован: 18 авг 2020, 15:12

Re: Стены без Rigidbody2D для андроид

Сообщение 1max1 19 авг 2020, 09:00

Вот пример захвата объекта с коллайдером и рб2д:
Синтаксис:
Используется csharp
using UnityEngine;

class ObjectMove : MonoBehaviour
{
    Rigidbody2D target = null;

    Vector3 localPoint = Vector3.zero;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (target = Physics2D.Raycast(mp, Vector2.zero).transform?.GetComponent<Rigidbody2D>())
            {
                localPoint = target.transform.InverseTransformPoint(mp);
            }
        }
        else if (Input.GetMouseButtonUp(0))
        {
            target = null;
        }
    }

    void FixedUpdate()
    {
        if (target != null)
        {
            target.velocity = (mp - target.transform.TransformPoint(localPoint)) * 10.0f;
        }
    }

    Vector3 mp => Camera.main.ScreenToWorldPoint(Input.mousePosition);
}

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

Re: Стены без Rigidbody2D для андроид

Сообщение kostya315 19 авг 2020, 22:40

1max1 писал(а):Под тачи, думаю, переделаешь как тебе надо.

Еще раз спасибо тебе. Очередной раз убеждаюсь в том, что кодер из меня такой себе:D Адаптировать под тачи смог.
kostya315
UNец
 
Сообщения: 8
Зарегистрирован: 18 авг 2020, 15:12


Вернуться в Editor

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

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