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);
}
}

  

最新文章

  1. linux mysql root密码重置
  2. javascript中 for循环的应用
  3. 在 xampp 环境下安装 laravel
  4. nodeJS中exports和mopdule.exports的区别
  5. 组合模式(Composite Pattern)
  6. Python之Django--ORM连表操作
  7. Windows中搭建已存在的Octopress环境
  8. 以Self Host的方式来寄宿Web API
  9. C++的那些事:面向对象
  10. StringBuilder和string.Format性能对比
  11. 记一次DG搭建过程中ORA-09925: Unable to createaudit trail file 错误
  12. 【Centos7】卸载OpenJDK
  13. Android 自定义控件高度设置onMeasure方法
  14. Bootstrap3 排版-地址
  15. nginx Access-Control-Allow-Origin 多域名跨域设置
  16. 【CSS3】响应式布局
  17. 面试题-JAVA算法题
  18. 【Linq】常用语法汇总
  19. [Java]Object有哪些公用方法?
  20. Web 进化

热门文章

  1. 【python】安装指定模块
  2. [转载] Java CheckBoxTree
  3. JSONArray的应用
  4. Linux Yum 安装JDK
  5. kettle系列-kettle管理平台部署说明
  6. 使用国内pypi源来安装python包
  7. C#序列化
  8. JS string 截取
  9. win7(x64)下安装cocos2d并编译安卓项目
  10. 字符串和datatime.time类型转为秒