Сделать GameObject неразрушимым - PullRequest
0 голосов
/ 15 мая 2019

Я делаю стрелялку с использованием Raycasts в Unity. У меня есть GameObject, который является кубом (основание для моей игры). Этот куб можно уничтожить, используя метод Destroy(). Как сделать его неразрушимым, чтобы он не разрушался даже после использования метода Destroy()?

Это мой сценарий с пистолетом FPS:

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

public class Gun : MonoBehaviour
{
    public float damage = 20f;
    public float range = 150f;
    //public GameObject ground;
    public Camera fpsCamera;
    void Start()
    {
        //DontDestroyOnLoad(ground);
    }
    void Update()
    {
        if (Input.GetButtonDown("Fire1")) {
            Shoot();
        }
    }
    void Shoot()
    {
        RaycastHit hitObject;
        if (Physics.Raycast(fpsCamera.transform.position, fpsCamera.transform.forward, out hitObject, range) && hitObject.transform.name != "Ground") {
            Destroy(hitObject.transform.gameObject);
        }
    }

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Звучит так, будто вы хотите отсортировать, какие объекты как-то уничтожены.Самый простой способ - это, конечно, не вызывать метод Destroy для этого объекта.

Однако, поскольку вы объясняете в комментариях, что вы хотите стрелять и уничтожать некоторые объекты, но не все.В вашем случае я бы сделал скрипт, который либо проверяет тег, слой, либо вызывает метод в скрипте для каждого объекта.

Например, вы пытаетесь сделать что-то похожее на это:

ObjectProperties : MonoBehaviour{
    public boolean CanBeDestroyed = true;
}

Добавьте этот скрипт к объектам, в которые вы стреляете.

А затем, когда ваша лучевая трансляция попадает в объект, используйте GetComponent на объекте, который выстрелили, чтобы попытаться получить ObjectProperties от этого объекта.Если при попадании объекта значение ObjectProperties не равно нулю, а для ObjectProperties установлено значение CanBeDestroyed, равное true.Тогда вы можете уничтожить объект.

0 голосов
/ 16 мая 2019

Самый простой способ достижения этого - использование тегов.Создайте тег, выделив объект.В Инспекторе откройте вкладку «Теги».Затем создайте тег и назначьте его вашему объекту.Последнее, что вам нужно сделать, это проверить в коде, какой тег имеет объект, по которому вы ударили.

if (Physics.Raycast(fpsCamera.transform.position, fpsCamera.transform.forward, out hitObject, range) && hitObject.transform.name != "Ground") { switch (hitObject.tag) { case "immortal": //Nothing happens break; case "veryweak": //Objects with this tag get destroyed Destroy(hitObject.transform.gameObject); break; default: //Objects that do not have a tag and do not match any of the above get destroyed Destroy(hitObject.transform.gameObject); break; } }

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...