Unity问答——怎么知道屏幕中目前有多少个敌人?
这篇博客源自我在泰课在线的回答。链接:http://www.taikr.com/group/1/thread/92
问:怎么知道屏幕中目前有多少个敌人?
答:
思路一:仅适用于2D游戏,因为这个方法没有考虑Z轴。如果物体被其它物体遮挡,没有被摄像机渲染,不应该算是显示在 屏幕中。
如何遍历每个敌人的屏幕坐标,判断是否位于屏幕内?
(1)如何得到游戏对象的屏幕坐标?
Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
(2)如何遍历敌人?
方法一:给敌人都加个Tag——Enemy,根据Tag查找。
GameObject[] gos = GameObject.FindGameObjectsWithTag("Enemy");
遍历gos, 根据(1),计算敌人的屏幕坐标,如果在屏幕内(跟Screen.width和Screen.height对比),累加,得到总数。
或者在敌人所挂脚本每帧运行的时候,判断敌人是否在屏幕内,如果不在,就Destroy掉。这样就避免了在得到敌人数组时在进行遍历判断。
方法二:弄个敌人对象的集合,生成时就加到集合里,销毁时就从集合里Remove掉。方法类似方法一。
思路二:适用于2D游戏和3D游戏
MonoBehaviour.OnBecameVisible() 变得不可见
MonoBehaviour.OnBecameInvisible() 当不可见
MonoBehaviour.OnWillRenderObject() 将要渲染
MonoBehaviour提供的这三个方法,都可以用来判断。
具体做法:在OnBecameVisible或者OnWillRenderObject中,根据Tag判断游戏对象是否是敌人,如果是, 则enemyNum++;在OnBecameInvisible中enemyNum--。若想知道是哪些敌人,就弄个集合,在OnBecameVisible或者OnWillRenderObject中Add, 在OnBecameInvisible中Remove。
Unity问答——怎么知道屏幕中目前有多少个敌人?的更多相关文章
- Unity在Android和iOS中如何调用Native API
本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...
- android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)
final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- Unity脚本在层级面板中的执行顺序测试4-附加整理
测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...
- Cocos2D-x权威指南:通过节点控制屏幕中的全体渲染对象
本节,已经能够利用我们眼下所学的知识做出一些有趣的东西.之前已经说过,CCNode类没有贴图,也就是说在屏幕上单独建立一个节点是没有不论什么效果的,可是能够通过这个"无形"的节点来 ...
- 获取屏幕中某个点的RGB值与CAD屏幕像素值
'获取CAD屏幕像素的比值 Function ViewScreen() As Double Dim ScreenSize As Variant ScreenSize = ThisDrawing.Get ...
- 选择屏幕中的下拉框和dialog中下拉框设计
REPORT YTEST014. PARAMETERS: auart LIKE vapma-auart AS LISTBOX VISIBLE LENGTH 6. AT SELECTION-SC ...
- Android 获取View在屏幕中的位置【转】
Android 获取View在屏幕中的位置 https://blog.csdn.net/lonely_fireworks/article/details/7849643
- HTML+CSS,让div在屏幕中居中(水平居中+垂直居中)方法总结
最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单. 水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法 下面说两 ...
随机推荐
- 《Linux设备驱动开发详解(第2版)》配套视频登录51cto教育频道
http://edu.51cto.com/course/course_id-379-page-1.html http://edu.51cto.com/course/course_id-379-page ...
- Android如何在Framework层使用解锁代码
import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import com.andr ...
- Delphi Format中的换行符号是什么
Delphi Format中的换行符号是什么 #,s1]); s3#'%s',[s,s1]); ShowMessage(s2); ShowMessage(s3); end; #13#10两边 ...
- hdu 2222 Keywords Search ac自己主动机
点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- iOS安全攻防(三):使用Reveal分析他人app
使用Reveal分析他人app 准备工作 1)已越狱的设备,而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装) 2)本地已安装了Reveal 操作步骤 1)拷贝 ...
- agentzh --春哥--调试专家
https://github.com/agentzh/perl-systemtap-toolkit https://github.com/openresty http://openresty.org/ ...
- 深入分析 Java I/O 的工作机制--转载
Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道.在当今这个数据大爆炸时代, ...
- js 高阶函数 filter
filter用于过滤array中的一些值,通过带入的函数返回的ture 或false 保留或去除,返回一个新的array filter 使用演示:判断筛选出array中的素数: //判断素数自定义函数 ...
- Bootstrap V3使用Tab标签
Bootstrap V3使用Tab标签 >>>>>>>>>>>>>>>>>>>> ...
- heibernate增删改查总结一下自己的不足
难点也就我不熟悉的是数据库语句的书写,要加强复杂查询语句的书写 /* 简单的在共享类中已经可以用的了 * 总结: * * --------------------------------------查 ...