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;当然也可以用下面的方法 下面说两 ...
随机推荐
- VM网络无法连接--提示ethernet0无法连接到虚拟网络
打开 “编辑->虚拟网络设置"里面,点“恢复默认” 如果还不行 然后 开网络和共享中心 左击 本地连接(若是无线网络,则点击无线网络连接)----属性----共享---- 在:允许其 ...
- JAVA LinkedList和ArrayList的使用及性能分析
第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口.它代表着有序的队列.AbstractList 是一个抽象类,它继承于AbstractCollection ...
- ural 1018 Binary Apple Tree(树形dp | 经典)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- android 35 ListView增删改差
MainActivity package com.sxt.day05_11; import java.util.ArrayList; import java.util.List; import and ...
- GDB踪函数的完整调用过程 及原理
http://www.lenky.info/archives/2013/02/2202 Breakpoint , .so. (gdb) bt # .so. # .so. # .so. # .so. # ...
- 一致性哈希(Consistent Hash)
http://blog.csdn.net/cywosp/article/details/23397179/ http://www.codeproject.com/Articles/56138/Cons ...
- SpringSecurity 在MVC 中的简单使用(翻译的,稍加改动)
Spring Security允许开发人员轻松地将安全功能集成到J2EE Web应用程序中,它通过Servlet过滤器实现“用户自定义”安全检查. 在本教程中,我们将向您展示如何在Spring MVC ...
- jquery选择器取值和url正则匹配
用到的简单jquery知识,简单总结一下,一是能加深自己的记忆,二是方便自己以后查看.常言道"好记性不如烂笔头",要养成常总结.常记录的好习惯.慢慢的发现jquery很有意思,很强 ...
- 安卓工程修改包名后 Failed to find provider info for...问题
安卓工程修改包名后 Failed to find provider info for com.android...provider问题 原因: 1. 多处含包名文件须同时更改 2. Manifest里 ...
- SQL Server死锁日志各字段含义
使用跟踪标记 1204 --打开跟踪标记 DBCC TRACEON (1204,-1) --关闭跟踪标记 DBCC TRACEOFF (1204,-1) 处于死锁状态时,跟踪标记 1204 在等待的线 ...