unity3D 中如何判断一个gameobject是不是存在?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3D 中如何判断一个gameobject是不是存在?相关的知识,希望对你有一定的参考价值。

好像如果直接destroy某个物体的话,在场景中没有这个物体的情况下就会报错……所以想要判断一下if某个物体存在的时候删除,但是不知道具体应该怎么写……麻烦球问一下要怎么判断QWQ

unity3D 中判断一个gameobject是否存在代码如下:

//删除对象前先判断对象是否存在

if(target)

//target为Component组件类型就删除组件,常用的Transform、Rigidbody、MeshFilter,如

为GameObject 就删除对象

Destroy(target);

Debug.Log(target==null);//false

//或者只删除对象

unity3D技巧

1.Reset():只会在editor模式下触发。

2.Awake():即在脚本初始化的时候执行一次。

3.OnEnable():脚本依附在GameObject上后,场景被启动时,只有在.SetActive(true)情况才会执行。

4.Start():脚本开始运作执行一次。

5.FixedUpdate():不受帧率的影响,按固定时间执行,常用于运动。

6.Update():每一秒执行相应的次数,这里的次数即帧数,是根据硬件设备以及内部函数复杂度决定的,可能上一秒60帧,这一秒就是80帧,不唯一。

参考技术A

首先定义GameObject,之后用if(Gameobjeect)判断

public GameObject player;
//并不是只有Update才行
void Update()
if (player)  //放入你的代码

参考技术B //删除对象前先判断对象是否存在
if(target)
//target为Component组件类型就删除组件,常用的Transform、Rigidbody、MeshFilter,如果为GameObject 就删除对象
Destroy(target);
Debug.Log(target==null);//false
//或者只删除对象
//Destroy(target.gameObject);
//或者使用DestroyImmediate方法立即删除对象
//DestroyImmediate(target);
//Debug.Log(target==null);//true
本回答被提问者和网友采纳

RPG游戏中如何判断敌人是否在玩家的攻击范围之内

 1 // 方式1:通过主角和场景中的所有敌人比较
 2 private void AtkCondition1(float _range,float _angle)
 3 {
 4     // 搜索所有敌人列表(在动态创建敌人时生成的)
 5     // 列表存储的并非敌人的GameObject而是自定义的Enemy类
 6     // Enemy类的一个变量mGameObject则用来存储实例出来的敌人实例
 7     foreach (var go in GameManager.GetInstance.gMonsterDict)
 8     {
 9         // 敌人的坐标向量减去Player的坐标向量的长度(使用magnitude)
10         float tempDis1 = (go.Value.mGameObject.transform.position - mGameObject.transform.position).magnitude;
11         // 敌人向量减去Player向量就能得到Player指向敌人的一个向量
12         Vector3 v3 = go.Value.mGameObject.transform.position - mGameObject.transform.position;
13         // 求出Player指向敌人和Player指向正前方两向量的夹角,其实就是Player和敌人的夹角(不分左右)
14         float angle = Vector3.Angle( v3, mGameObject.transform.forward);
15         if (tempDis1 < _range && angle < _angle)
16         {
17             // 距离和角度条件都满足了
18         }
19     }
20 }
21 // 方式2:通过主角和射线检测到的敌人比较
22 private void AtkCondition2(float _range,float _angle)
23 {
24     // 球形射线检测周围怪物,不用循环所有怪物类列表,无法获取“Enemy”类
25     Collider[] colliderArr = Physics.OverlapSphere(mGameObject.transform.position, _range, LayerMask.GetMask("Enemy"));
26     for (int i = 0; i < colliderArr.Length; i++)
27     {
28         Vector3 v3 = colliderArr[i].gameObject.transform.position - mGameObject.transform.position;
29         float angle = Vector3.Angle(v3, mGameObject.transform.forward);
30         if (angle < _angle)
31         {
32             // 距离和角度条件都满足了
33         }
34     }
35 }

参考:https://blog.csdn.net/chy_xfn/article/details/52512343

以上是关于unity3D 中如何判断一个gameobject是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 如何把gameobject上的脚本删除

unity3d 如何把gameobject上的脚本删除

Unity3D中GameObject 详细介绍

Unity 如何使 GameObject Speed 获得速度

Unity3D 将 GameObject 渲染为线框

Unity3D中使用GameObject.Find()应该注意的问题