使GameObject坚不可摧

时间:2019-05-15 09:55:13

标签: c# visual-studio unity3d

我正在使用Unity中的Raycasts制作射击游戏。我有一个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 个答案:

答案 0 :(得分:2)

听起来像您想对以某种方式破坏了哪些对象进行排序。最简单的方法当然是首先不要在该对象上调用Destroy方法。

但是,由于您在注释中进行了解释,因此您希望拍摄并破坏一些物体,但不是全部。在您的情况下,我将创建一个脚本,该脚本可以检查标记,图层或在每个对象的脚本中调用方法。

例如,您尝试类似的操作:

ObjectProperties : MonoBehaviour{
    public boolean CanBeDestroyed = true;
}

将该脚本添加到拍摄对象。

然后,当射线投射击中一个对象时,对拍摄的对象使用GetComponent,以尝试从该对象获取ObjectProperties。如果对象命中的ObjectProperties不为空,并且该ObjectProperties的{​​{1}}设置为true。然后您可以销毁该物体。

答案 1 :(得分:0)

最简单的方法是使用标签。通过突出显示对象来创建标签。在检查器中,打开标签选项卡。然后创建一个标签并将其分配给您的对象。您需要做的最后一件事是检入代码,使您击中的对象具有哪个标签。

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

希望有帮助。