人物角色群体攻击判定(一)

我们制作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);

    }
}

 

效果图:

2015-08-10_1327452015-08-10_1328372015-08-10_1331162015-08-10_133126

posted @ 2015-08-10 13:37  盘子脸  阅读(941)  评论(0编辑  收藏  举报