Unity3D: перемещение игровых объектов с помощью мыши и проверка содержимого

Как я могу переместить объект (например, цвет заливки игрового объекта с помощью GUITexture) с помощью щелчка мыши / касания к сетке и проверить, содержит ли цвет заливки для каждой плитки?

Если вы используете Camera.main.ScreenToWorldPoint, то не можете проверить содержимое. Текущий мой код для проверки работает нормально, но игровой объект не перемещается с помощью мыши :(

Изображение ссылки: https://i.imgur.com/cHoS0YV.png

Мой код следующий:

void OnMouseDown()
    {
        Vector2 mousePos = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
        transform.position = mousePos;
        Debug.Log("OnMouseDown: transform.position: " + transform.position);
    }
    void OnMouseDrag()
    {
        Vector2 mousePos = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y);
 
        transform.position = mousePos;
        Debug.Log("transform.position: " + transform.position);
 
        foreach (var x in GameBoard.Instance.listTileInGrid)
        {
            if (x.RectTile.Contains(mousePos))
            {
                Debug.Log("change color");
                x.ColorId = 1;
            }
        }
    }

Заранее спасибо!

Обновить:

я меняю:

transform.position = mousePos;

to

transform.guiTexture.transform.position = Camera.main.ScreenToViewportPoint(Input.mousePosition);

person 691138    schedule 14.03.2013    source источник
comment
Тег единства зарезервирован для Microsoft Unity. Пожалуйста, не злоупотребляйте им.   -  person Lex Li    schedule 14.03.2013
comment
спасибо за ответ, я решил проблему здесь: transform.guiTexture.transform.position = Camera.main.ScreenToViewportPoint(Input.mousePosition); answers.unity3d.com/questions/416536/   -  person 691138    schedule 14.03.2013
comment
Пожалуйста, создайте ответ и отметьте его как отвеченный, чтобы этот вопрос не остался без ответа.   -  person Joetjah    schedule 14.03.2013
comment
Если вы решили это самостоятельно, было бы здорово, если бы вы могли записать свои выводы и решение в качестве ответа, чтобы другие, столкнувшиеся с той же проблемой, тоже могли это увидеть.   -  person Flexo    schedule 18.03.2013


Ответы (1)


Это довольно просто. Для этого вы можете использовать функцию Vector3.Lerp. Используйте raycasting, чтобы получить положение щелчка мыши или положение касания. Затем используйте начальную и конечную позицию в функции lerp. Начальная позиция — это позиция, в которой сейчас находится игровой объект, а конечная позиция — это позиция щелчка/касания. Вы можете найти статью The Game Contriver о том же здесь

Переместить в положение касания / щелчка — игра Контривер

person gameOne    schedule 22.10.2014