人物角色群体攻击判定(一)
我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢?
1. 使用触发器(多体攻击) | 方便调试,可视化(推荐) |
2. 运用点乘和叉乘,判断敌人的角度和位置(单,多) | 一般 |
3. 使用Physics的Physics.OverlapSphere(群体攻击) | 一般 |
4. 使用Physics的LineCast(单体攻击) | 一般 |
我们先介绍下使用触发器如何实现敌人攻击, 当敌人进入攻击区域就加入一个集合当中, 退出攻击区域就从集合中删除. 玩家点击攻击对集合中的敌人进行伤害
核心代码实现:
using UnityEngine; using System.Collections; using System.Collections.Generic; public class Player : MonoBehaviour { public float speed = 2; public Dictionary<string,GameObject> enemyList = new Dictionary<string,GameObject>(); //敌人进入触发区域 public void OnTriggerEnter(Collider obj) { if (!enemyList.ContainsKey (obj.gameObject.name)) { enemyList.Add (obj.gameObject.name,obj.gameObject); } Debug.Log ("敌人进入:" + obj.gameObject.name); Debug.Log ("敌人的总个数:" + enemyList.Count); //打开头顶标示 obj.gameObject.transform.FindChild ("T").gameObject.SetActive(true); } //敌人退出触发区域 public void OnTriggerExit(Collider obj) { enemyList.Remove (obj.gameObject.name); Debug.Log ("敌人退出:" + obj.gameObject.name); Debug.Log ("敌人的总个数:" + enemyList.Count); obj.gameObject.transform.FindChild ("T").gameObject.SetActive(false); } }
效果图:
如果你感兴趣,你可以把你妹妹介绍给我