Проблема при перемещении группы игровых объектов - PullRequest
1 голос
/ 07 апреля 2020

Я создал через сценарии строки дочерних прямоугольников со случайной шириной. Все они названы как Line0, rectangle0, rectangle1, line2, restangle0, et c. Все они имеют присоединенный блок коллайдера 2d, линии и прямоугольники.

Теперь я пытаюсь переместить эти линии, только по оси x, с помощью следующего кода. Иногда это работает, но иногда только один раз на строку, иногда несколько раз на строку, некоторые строки не перемещаются, это совершенно случайно, и я не могу понять, почему.

К строкам прикреплен скрипт для управления перемещениями, уже пробовал с локальным расположением и такими же результатами:

public class line : MonoBehaviour
{

    float startPosX;
    float startPosY;

    bool isHeld = false;

    void Start()
    {

    }

    void Update()
    {
        if (isHeld == true)
        {    
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);

            this.transform.position = new Vector3(mousePos.x - startPosX, this.transform.position.y, 0);    
        }
    }

    public void OnMouseDown()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos;
            mousePos = Input.mousePosition;
            mousePos = Camera.main.ScreenToWorldPoint(mousePos);
            //Debug.Log(mousePos.ToString());

            startPosX = mousePos.x - this.transform.position.x;
            startPosY = mousePos.y - this.transform.position.y;
            isHeld = true;
        }
    }

    private void OnMouseUp()
    {
        isHeld = false;
    }
}

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте это:

using UnityEngine;

public class Line : MonoBehaviour
{
    Vector3 startPosition;
    Vector3 mouseStartPosition;

    public void OnMouseDown()
    {
        mouseStartPosition = MousePosition();
        startPosition = transform.position;
    }

    void OnMouseDrag()
    {
        float x = startPosition.x + MousePosition().x - mouseStartPosition.x;
        transform.position = new Vector3(x, transform.position.y, transform.position.z);
    }

    Vector3 MousePosition()
    {
        Vector3 position = Input.mousePosition;
        position.z = 10f;
        return Camera.main.ScreenToWorldPoint(position);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...