Беда с изменяемым размером GameObject - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать изменяемый размер GameObject (в моем случае Quad) с помощью перетаскивания мышью. Я хочу, чтобы это работало следующим образом:

  1. проверить, находится ли позиция мыши на «границе» GameObject
  2. ждать, пока курсор окажется за пределами "рамки"
  3. просто измените его размер (как в графическом программном обеспечении)

Хотя у меня нет проблем с первым и третьим шагом, у меня запутанная проблема со вторым.

То, что в настоящее время делает мой код:

  1. проверить, находится ли позиция мыши на «границе» GameObject
  2. ...
  3. просто измените размер

Это значит, что у меня нет второго шага. Я думал, что могу просто решить эту проблему, ожидая выполнения второго условия, но это не сработало.

Итак ... как мне заставить работать так, как я хочу?

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class ResizeObject : MonoBehaviour
{
    public GameObject ground;

    void Update()
    {
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z));

        // If I click on the quad in a "border" area
        if (Input.GetMouseButton(0) && mousePosition.x >= ground.transform.localScale.x / 2 - 0.1 && mousePosition.x <= ground.transform.localScale.x / 2)
        {
            // Wait until this condition (cursor is outside a border area) will be true???
            if (mousePosition.x > ground.transform.localScale.x / 2)
            {
                // Reisze a quad
                ground.transform.localScale = new Vector3(ground.transform.localScale.x / 2 + mousePosition.x, 1, 1);
            }
        }
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

Предположим, что это ваш квад, с центром в c , где h - половина его высоты, а w - половина его ширины.

 -------  -
|       | |  h
|   c   | -
|       |
'-------'
    |---|
      w

Я не помню, есть ли у четверки свойство SpriteRenderer, но если оно есть, вы можете использовать .bounds для получения w и h . В противном случае вы можете просто прикрепить BoxCollider2D (как триггер, если он вам не нужен) и использовать .bounds для получения этих значений.

Имея эти значения, вы можете определить значение d . Давайте назовем положение мыши m , вы будете касаться границы, когда хотя бы одно из следующих условий выполнено:

  • c.x - w - d
  • c.x + w - d
  • c.y - h - d
  • c.y + h - d

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

Чтобы сделать касание, вы можете использовать встроенные методы (которые можно использовать только при подключенном коллайдере) OnMouseDown, OnMouseDrag и OnMouseUp.

Процесс масштабирования зависит от вас, но его можно выполнить с помощью простых математических вычислений, используя значения .bounds, начиная с OnMouseDown, масштабируя с OnMouseDrag и заканчивая OnMouseUp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...