单击对象

时间:2017-02-03 15:14:15

标签: c# unity3d

所以我将游戏中的地图划分为不同的区域。每个都在Area数组中成为一个单独的数组。我目前坚持能够点击该对象。当玩家点击游戏中的对象时,他点击的地图部分应弹出一定量,当他点击另一部分时该部分应该弹出而另一部分应该回到其原始位置。当我点击它时,我目前正在销毁该对象,但它甚至不会在游戏中被选中。

using UnityEngine;   
using System.Collections;

public class AreaSelection : MonoBehaviour {
public GameObject[] Areas;

void Start()
{
    Areas = new GameObject[20];
}
void Update()
{
}
void OnMouseDown()
{
    Destroy(this.gameObject);
}

1 个答案:

答案 0 :(得分:3)

  

"当用户在GUIElement或Collider上按下鼠标按钮时,将调用OnMouseDown。"

- Documentation

这意味着您需要在此脚本附加到GameObject上的Collider。 OnMouseDown只会在它附加的GameObject上触发。因此,如果您将此脚本放在某个没有碰撞器或大小或任何东西的管理器上,那么您将无法使用OnMouseDown。如果您想转到我推荐的另一条路线,您可以将逻辑重新定位到Update()方法,如下所示:

(来自我的二维项目) ```

RaycastHit2D hit;
public LayerMask mask;
Vector2 mousePos;
GameObject selectedObject;


void Update() {

    // If mouse left click is pressed
    if (Input.GetMouseButtonDown(0)) {
        mousePos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
        hit = Physics2D.Raycast(mousePos, Vector2.zero, mask);

        if (hit.collider != null)
        {
            selectedObject = hit.collider.gameObject;
        }
    }
}

请注意,您必须将检查器中的公共LayerMask设置为仅按下您要命中的对象。

使用此脚本,您应该能够从屏幕向您的鼠标发送Raycast,如果它在LayerMask中使用所选图层命中任何GameObject,它会将该对象放入SelectedObject(并且一旦您拥有了游戏对象,您就可以做任何你想做的事。)