Unity3d+moba+草丛视野

1 功能描述

类似lol中英雄躲草丛:

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

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

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

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

2 详细设计

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

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

List<UnitCtrl> m_listWeUnit = new List<UnitCtrl>();//这个草丛中我方单位
    List<UnitCtrl> m_listOtherUnit = new List<UnitCtrl>();//敌方单位

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

2.1 单位进入草丛时

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单位离开草丛时

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。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四夕立羽

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值