• NavMesh名字、层索引、层值之间的转换


        // Nav层名字-->层的值,1、2、4、8、16
        public static int AgentLayerNameToValue(string name)
        {
            int idx = NavMesh.GetNavMeshLayerFromName(name);
            return 0x1 << idx;
        }
    
        // Nav层名字-->层索引,0、1、2、3、4
        public static int AgentLayerNameToIndex(string name)
        {
            return NavMesh.GetNavMeshLayerFromName(name);
        }
    
        // 获取角色当前所在的层值,1、2、4、8、16
        public static int GetAgentLayer(NavMeshAgent agent)
        {
            NavMeshHit hit;
            // 不要使用agent.raduis为采样范围,因为当该值为0时,函数将返回0
            bool reach = NavMesh.SamplePosition(agent.transform.position, out hit, 1f, -1);
            return hit.mask;
        }
    
        public static Vector3 SampleNavMeshPosition(Vector3 logicPosition, out bool reachable)
        {
            NavMeshHit hit;
            reachable = NavMesh.SamplePosition(logicPosition, out hit, 1f, -1);
            return reachable ? hit.position : logicPosition;
        }
    
        // 开启导航层
        public static void EnableNavMeshLayer(NavMeshAgent agent, string layerName)
        {
            if (agent == null)
                return;
    
            int layerValue = NavMesh.GetNavMeshLayerFromName(layerName);
            if (layerValue == -1)
                return;
    
            int mask = agent.walkableMask | 0x1 << layerValue;
            WalkArbiter.SetWalkableMask(agent, mask);
        }
    
        // 关闭导航层
        public static void DisableNavMeshLayer(NavMeshAgent agent, string layerName)
        {
            if (agent == null)
                return;
    
            int layerValue = NavMesh.GetNavMeshLayerFromName(layerName);
            if (layerValue == -1)
                return;
    
            int mask = agent.walkableMask & ~(0x1 << layerValue);
    
            WalkArbiter.SetWalkableMask(agent, mask);
        }
    
        // 检查某个层是否为开启
        public static bool IsNavMeshLayerOpen(NavMeshAgent agent, string layerName)
        {
            int layerValue = NavMesh.GetNavMeshLayerFromName(layerName);
            if (layerValue == -1)
                return true;
    
            int ret = agent.walkableMask & (0x1 << layerValue);
            return ret > 0 ? true : false;
        }
  • 相关阅读:
    Docker 版本升级
    Docker Swarm 常用命令
    Docker Swarm 介绍 or 工作原理
    Docker OpenvSwitch 应用部署
    Docker OpenvSwitch 介绍 or 工作原理
    Solr配置与简单Demo[转]
    使用solrj操作solr索引库,solr是lucene服务器
    Apache Solr配置
    使用solr搭建你的全文检索
    [转]flume-ng+Kafka+Storm+HDFS 实时系统搭建
  • 原文地址:https://www.cnblogs.com/sifenkesi/p/4391074.html
Copyright © 2020-2023  润新知