我正在使用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);
}
}
答案 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;
}
}
希望有帮助。