可调整大小的GameObject带来的麻烦

时间:2018-11-12 17:49:04

标签: c# unity3d

我试图通过鼠标拖动来制作可调整大小的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 :(得分:0)

假设这是您的四边形,以 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 ,它越大,触摸边界越容易。

要进行触摸,可以使用内置方法(仅在连接了对撞机时才可用)OnMouseDownOnMouseDragOnMouseUp

取决于您的缩放过程,但是可以使用.bounds值通过简单的数学操作来完成,该值从OnMouseDown开始,以OnMouseDrag进行缩放,以OnMouseUp结束。 / p>