单击时销毁 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 方式,因为它更符合您的要求,只需确保该对象包含碰撞器,我认为它们可以作为触发器并且点击仍会发生。
我正在我的游戏中制作建筑机械师,我希望能够清除地图周围的某些物体(树木、其他装饰),以便我有空间进行建造。我试过使用光线投射来找到被点击的对象并销毁它,但这不起作用。
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 方式,因为它更符合您的要求,只需确保该对象包含碰撞器,我认为它们可以作为触发器并且点击仍会发生。