前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity3d+moba+草丛视野

Unity3d+moba+草丛视野

作者头像
立羽
发布2023-08-24 13:26:09
1650
发布2023-08-24 13:26:09
举报
文章被收录于专栏:Unity3d程序开发

1 功能描述

类似lol中英雄躲草丛:

1.当我方单位(包括我)进入草丛,自己变为半透明,并且能探测到草丛中敌方单位。

2.当我方单位离开草丛,恢复不透明,如果草丛中有敌人,且该草丛中没有别的友军,丢失该敌军视野。

3.当敌方进入草丛,该草丛没有我方单位,敌方全透明,不能被外面我方单位探测到。

4.当敌方离开草丛,可以被探测到。

2 详细设计

草丛增加BoxCollider,触发选项勾上。单位增加BoxCollider,触发选项勾上,并且增加刚体。草丛上绑定GrassCtrl脚本,通过OnTriggerEnter,OnTriggerExit检测到进出草丛的单位,并且把这些单位的保存在list中做统一处理。

上图所示,草地为白色cube模拟,敌人A躲在草丛中,即使在我的视野中(图中绿框),也不会被探测到。而友军A视野之内(图中红框)有敌人B,所以小地图上显示3个点(我,友军A,敌人B)。

代码语言:javascript
复制
List<UnitCtrl> m_listWeUnit = new List<UnitCtrl>();//这个草丛中我方单位
    List<UnitCtrl> m_listOtherUnit = new List<UnitCtrl>();//敌方单位

GrassCtrl中的类成员,保存进入该草丛的我方单位和敌方单位。

2.1 单位进入草丛时

代码语言:javascript
复制
public void OnTriggerEnter(Collider other)
    {
        UnitCtrl unit = other.GetComponentInParent<UnitCtrl>();
        unit.m_isInGrass = true;
        if (unit.m_camp == MainMgr.self.m_camp)
        {
            //加入我方阵营表
            m_listWeUnit.Add(unit);
            unit.transparentSet(true);

            foreach (var item in m_listOtherUnit)//探测草丛中活着的敌人
            {
                item.visibleSet(true);
                item.transparentSet(false);//即使是尸体也要更新状态
                item.m_viewCtrl.unitShowInMiniMap();//活着的敌人才能出现在小地图中
            }
        }
        else 
        {
            m_listOtherUnit.Add(unit);
            if (m_listWeUnit.Count > 0)//里面有友军,这个敌人只透明
            {
                unit.transparentSet(true);
            }
            else if (m_listWeUnit.Count == 0)//没有友军,消失在屏幕视野中
            {
                unit.visibleSet(false);
                unit.m_viewCtrl.unitHideInMinimap();
            }
        }
        
}

2.2单位离开草丛时

代码语言:javascript
复制
public void OnTriggerExit(Collider other)
    {
        UnitCtrl unit = other.GetComponentInParent<UnitCtrl>();
        unit.m_isInGrass = false;
        if (unit.m_camp == MainMgr.self.m_camp)
        {
            m_listWeUnit.Remove(unit);

            if (m_listWeUnit.Count == 0)//草丛里没有友军,草丛中的敌人不可见
            {
                foreach (var item in m_listOtherUnit)
                {
                    item.visibleSet(false);
                    item.m_viewCtrl.unitHideInMinimap();
                }
            }
        }
        else
        {
            m_listOtherUnit.Remove(unit);
        }
        unit.transparentSet(false);
        unit.visibleSet(true);
}

3 运行情况

当我进入草丛中,探测到草丛中的敌方A,把它显示出来,并在小地图显示它icon。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 功能描述
  • 2 详细设计
    • 2.1 单位进入草丛时
      • 2.2单位离开草丛时
      • 3 运行情况
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档