单击时销毁 GameObject

Destroy GameObject when its clicked on

我正在我的游戏中制作建筑机械师,我希望能够清除地图周围的某些物体(树木、其他装饰),以便我有空间进行建造。我试过使用光线投射来找到被点击的对象并销毁它,但这不起作用。

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

public class ObjectDestroy : MonoBehaviour {
    // Start is called before the first frame update
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            RaycastHit hit;
            Debug.Log (Input.mousePosition);
            if (Physics.Raycast (ray, out hit)) {
                if (hit.collider.gameObject == gameObject) Destroy (gameObject);

            }
        }

    }
}

这是一个小示例脚本:

public class Destroyable : MonoBehaviour
{
    private void OnMouseDown()
    {
        Destroy(gameObject);
    }
}

您可以将此脚本附加到您想要销毁的游戏对象上,然后在播放模式下您可以单击它来销毁它。如果您只需要在游戏内编辑器中使用它,它是可以修改的。

注意:您需要在同一个游戏对象上有一个活动的 Collider。

编辑:

以下脚本显示了更改对象颜色的示例:

public class Destroyable : MonoBehaviour
{
    public Color mouseHoverColor = Color.green;
    private Color previousColor;
    private MeshRenderer meshRenderer;

    private void Start()
    {
        meshRenderer = GetComponent<MeshRenderer>();
        previousColor = meshRenderer.material.color;
    }

    private void OnMouseDown()
    {
        Destroy(gameObject);
    }

    private void OnMouseOver()
    {
        meshRenderer.material.color = mouseHoverColor;
    }

    private void OnMouseExit()
    {
        meshRenderer.material.color = previousColor;
    }
}

你不需要在每个对象上添加这个脚本,只需将它添加到管理器中,而且我认为你缺少 Raycast 参数。

要查看射线的去向,可以使用 Debug.Ray()

此外,我更希望您使用@MSauer 方式,因为它更符合您的要求,只需确保该对象包含碰撞器,我认为它们可以作为触发器并且点击仍会发生。