C# OnMouseOver()和OnMouseExit()

C# OnMouseOver()和OnMouseExit(),c#,unity3d,C#,Unity3d,我正在尝试实例化一些飞机用作我的地形,并给它们OnMouseOver()以将它们更改为某种颜色,以及OnMouseExit()以将它们更改回原始颜色 我将一个平面实例化脚本附加到主摄影机,以生成平面预制,并将一个鼠标事件脚本附加到平面预制。我将它们全部实例化,并将事件传递给它们,但在游戏中,鼠标事件将应用于长条形平面、整个象限或不在鼠标光标位置的随机单个平面 我制作了一种新材料,并将其应用于该场所,然后将其转换为预制件,以替换创建平面时设置的标准材料 我已经开始尝试使用Physics.Check

我正在尝试实例化一些飞机用作我的地形,并给它们
OnMouseOver()
以将它们更改为某种颜色,以及
OnMouseExit()
以将它们更改回原始颜色

我将一个平面实例化脚本附加到主摄影机,以生成平面预制,并将一个鼠标事件脚本附加到平面
预制
。我将它们全部实例化,并将事件传递给它们,但在游戏中,鼠标事件将应用于长条形平面、整个象限或不在鼠标光标位置的随机单个平面

我制作了一种新材料,并将其应用于该场所,然后将其转换为预制件,以替换创建平面时设置的标准材料

我已经开始尝试使用
Physics.CheckSphere
使用鼠标位置将颜色更改应用到当前鼠标位置的平面上,但我不完全理解如何明确告诉特定位置的
游戏对象是什么

public class TerrainGeneration : MonoBehaviour {

    [SerializeField]
    private Transform groundTile;
    private Vector3 row;
    private int max = 10;

    // Use this for initialization
    void Start () {

        for ( int i = 0; i <= max; i++)
        {
            for (int x = 0; x <= max; x++) {

                row = new Vector3(i, 0, x);
                Instantiate(groundTile, row, Quaternion.identity);

            }    
        }
    }
}


public class MouseEvents : MonoBehaviour {

    private Color isTargeted;
    private Color notTargeted;
    private MeshRenderer groundTileMeshRenderer;
    private Vector3 mousePosition;
    private float mouseX;
    private float mouseY;

    void Start () {

        groundTileMeshRenderer = gameObject.GetComponent<MeshRenderer>();
        isTargeted = Color.cyan;
        notTargeted = groundTileMeshRenderer.material.color;

    }

    void Update()
    {
        mouseX = Mathf.RoundToInt(Input.GetAxis("Mouse X"));
        mouseY = Mathf.RoundToInt(Input.GetAxis("Mouse Y"));
        mousePosition = new Vector3(mouseX, 0, mouseY);

        if (Physics.CheckSphere(mousePosition, 1))
        {
            **//Get the specific gameObject located at the current mouse position
            //Set the gameObject as the target for the color change**
        }
    }

    void OnMouseOver()
    {
        groundTileMeshRenderer.material.color = isTargeted;
    }

    void OnMouseExit()
    {
        groundTileMeshRenderer.material.color = notTargeted;
    }
}
公共级地形化:单一行为{
[序列化字段]
私有转换地砖;
专用矢量3行;
私人int最大值=10;
//用于初始化
无效开始(){

对于(int i=0;i
根据需要标记游戏对象,然后您可以识别它们

如果您这样做,那么您可以像这样使用它们(仅举个例子):


因此,多亏了Unity论坛,我找到了答案。我的错误在实例化转换脚本中。因为我使用的是plane primitive 3d对象,所以我没有正确计算平面的大小。以下每行实例化的代码片段消除了由于平面太小而发生的重叠例如,arge可以简单地放置在
(0,0,0)
(0,0,1)
(0,0,2)

row = new Vector3(i * 10, 0, x * 10);
Instantiate(groundTile, row, Quaternion.identity);

我不认为我完全理解这个想法。我将标记应用于预置。这是我尝试过的代码,但什么都没有发生。公共虚拟无效OnTiggerEnter(Collider other){if(other.gameObject.tag==“GroundTile”){groundTileMeshrender.material.color=isTargeted;}else{groundtilemeshrender.material.color=notTargeted;}}不管我的问题的答案是什么,我还是很好奇为什么OnMouseOver()会影响大块的游戏对象,即使鼠标没有碰到它们。我认为这是因为实际上没有“碰撞”发生。我的例子就是如何使用标签。我会做一些研究,然后再回到这个问题上。在此期间,我必须离开这里看看:这是个好消息,很高兴你找到了它。将你的答案标记为已接受,以便其他人可以在将来使用此问答,以获得价值。
row = new Vector3(i * 10, 0, x * 10);
Instantiate(groundTile, row, Quaternion.identity);