Уничтожить GameObject при нажатии на - PullRequest
0 голосов
/ 28 марта 2019

Я делаю строительную механику в своей игре и хочу иметь возможность убирать определенные объекты вокруг карты (деревья, другие элементы декора), поэтому у меня есть место для строительства.Я пытался использовать лучевое наведение, чтобы найти объект, на который нажимают, и уничтожить его, но это не работает.

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);

            }
        }

    }
}

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вот небольшой пример скрипта:

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

Вы можете прикрепить этот скрипт к объекту GameObject, который вы хотите уничтожить, а затем во время Play-Mode вы можете щелкнуть по нему, чтобы уничтожить его.Его можно изменить, если он вам нужен только в вашем внутриигровом редакторе.

Примечание: вам нужен активный коллайдер на том же игровом объекте.

Редактировать:

СледующееСкрипт показывает пример изменения цвета объекта:

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;
    }
}
1 голос
/ 28 марта 2019

Вам не нужно добавлять этот скрипт на каждый объект, просто добавьте его в менеджер, а также, я думаю, вам не хватает параметров Raycast.

Чтобы увидеть, куда направляется ваш луч, вы можете использовать Debug.Ray()

Кроме того, я бы предпочел, чтобы вы использовали способ @MSauer, поскольку он намного чище для того, что вы хотите, просто убедитесь, что объект содержит коллайдер, я думаю, что он может быть триггером, и щелчок все равно будет происходить.

...