我们制作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);} }
效果图: