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是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章