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


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

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    Yii框架中ActiveRecord使用Relations
    MySQL外键约束On Delete、On Update各取值的含义
    30种mysql优化sql语句查询的方法
    PHP数组常用函数
    yii CListView中使用CArrayDataProvider自定义数组作为数据
    java日常统计
    软件工程概论———登录界面的设计
    Java课堂疑问解答与思考5
    Java课堂疑问解答与思考4
    字符串加密
  • 原文地址:https://www.cnblogs.com/plateFace/p/4717777.html
Copyright © 2020-2023  润新知