zoukankan      html  css  js  c++  java
  • Unity之CharacterController 碰撞问题总结

    CharacterController 不会受到scene的重力影响,自带物理碰撞检测,在脱离导航网格的应用场景下(比如飞行),是很有优势的Unity原生工具组件。如果在复杂的应用场景里,会有多种CC碰撞检测的需求,记录下我碰到的三种碰撞需求和解决方案。

    一、和场景碰撞器

    需要产生碰撞效果,让CC停止。只需要在场景里刷上碰撞器,并加上OnControllerColliderHit回调,处理逻辑。

    二、和UI碰撞器

    CC遇到UI上的BoxCollider也会产生碰撞效果,有个小招是把UI的Collider的物理效果去掉

    勾上IsTrigger,就不会和CC产生碰撞,然而这种方法实在上不了台面,还会影响UI。Unity的物理管理器提供了多种数据配置,可以设置层碰撞矩阵

    在相互不作用的层上勾去。

    三、CharacterController 和CharacterController之间的碰撞

    CC之间 大部分时候都不需要碰撞作用的吧,不理解为什么CharacterController没有一个明显的屏蔽基佬的标志,

    一开始看介绍以为CharacterController.detectCollisions 可以让CC之间相互影响,看圣典上是这么介绍

    Should other rigidbodies or character controllers collide with this character controller (By default always enabled)
    其他的刚体和角色控制器是否能够与本角色控制器相碰撞(默认值通常是enabled)

    然而用各种姿势试了试都没有什么卵用,最后用了万能的Physics.IgnoreCollision,看到这个接口的时候我都乐了,Unity Is Funny

        public void IgnoreCollision(Actor actor)
        {
            Component[] colliders = actor.GetFigTrans().GetComponents(typeof(Collider));
            for (int i = 0; i < colliders.Length; i++)
            {
                Physics.IgnoreCollision(m_MidlayerDancer.m_charactor_controller, colliders[i] as Collider);
            }
            colliders = GetFigTrans().GetComponents(typeof(Collider));
            for (int i = 0; i < colliders.Length; i++)
            {
                Physics.IgnoreCollision(actor.GetCharacterController(), colliders[i] as Collider);
            }
        }
    

      

  • 相关阅读:
    10gen发布MongoDB增量备份服务
    JSON.NET 5中的架构变更
    Snowbox 2.0 发布,POP3 邮件服务器
    资源监控工具 glances
    Druid 0.2.18 发布,阿里巴巴数据库连接池
    Groovy 更新到 2.0.8 and 2.1.3
    Apache Libcloud 0.12.4 发布,统一云计算接口
    Go1.1性能测试报告(和C差距在10%以内)
    Apache Camel 2.11.0 发布,规则引擎
    2010年01月01日0时0分 总结我的2009
  • 原文地址:https://www.cnblogs.com/shit/p/6227511.html
Copyright © 2011-2022 走看看