C# 单击对象

C# 单击对象,c#,unity3d,C#,Unity3d,所以我把游戏中的地图分成了不同的区域。每个阵列都在区域阵列中组成一个单独的阵列。我现在被困在能够点击对象上。当玩家点击游戏中的对象时,他点击的地图部分会弹出一定数量,当他点击另一部分时,该部分会弹出,而另一部分会回到原来的位置。当我点击那个物体时,它会被销毁,但它甚至不会在游戏中被选中 using UnityEngine; using System.Collections; public class AreaSelection : MonoBehaviour { public GameO

所以我把游戏中的地图分成了不同的区域。每个阵列都在区域阵列中组成一个单独的阵列。我现在被困在能够点击对象上。当玩家点击游戏中的对象时,他点击的地图部分会弹出一定数量,当他点击另一部分时,该部分会弹出,而另一部分会回到原来的位置。当我点击那个物体时,它会被销毁,但它甚至不会在游戏中被选中

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);
}
“当用户在GUI元素或碰撞器上按下鼠标按钮时,将调用OnMouseDown。”

--

这意味着您需要在该脚本所连接的游戏对象上使用碰撞器。OnMouseDown只会在它所连接的游戏对象上触发。因此,如果您在某种管理器上安装了此脚本,而该管理器没有碰撞器、大小或任何东西,那么您将无法使用OnMouseDown。如果您想走另一条路,我建议您将逻辑重新定位到
Update()
方法,类似这样:

(来自矿山的2d项目) ```

请注意,必须在inspector中设置公共LayerMask,使其仅命中要命中的对象


使用此脚本,您应该能够从屏幕向鼠标发送光线投射,如果它击中图层任务中具有选定图层的任何游戏对象,它会将该对象放入选定对象中(一旦您拥有游戏对象,您可以对其执行任何操作)。

您试图对游戏对象阵列区域执行什么操作?因为它是一个公共变量,所以它将被序列化,我猜您将把其他区域放在那里。你不需要初始化它(Areas=newgameobject[20];)。另外,每个区域是否都将包含所有其他区域?为了什么?有一种区域管理器控制并包含所有区域不是更好吗?我需要在每个对象上放置一个碰撞器吗?或者,如果我有一个游戏对象,其中包含所有地图对象,比如一个文件夹,“我能在那个对象上放一个对撞机就可以了吗?”Madusasilva显然,如果你在一个对象上放一个对撞机,那么附加到该对象的脚本就会收到OnMouseDown事件。我用一个更广泛、更实用的例子更新了答案。
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;
        }
    }
}