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

  

Unity之CharacterController 碰撞问题总结的更多相关文章

  1. unity触发器和碰撞器

    Unity中检测碰撞的方法有两种,一种是触发器一种是碰撞器,现在我来解释一下两种的区别. 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit ...

  2. 【Unity】物理碰撞实验

    http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...

  3. Unity 几种碰撞模式

    1.OnControllerColliderHit  事件 (角色控制器使用) 2.Physics.Raycast 函数 3.OnTriggerEnter 事件 (碰撞物体使用,给碰撞物体添加碰撞器, ...

  4. Unity 碰撞检测中碰撞器与触发器的区别

    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...

  5. Unity屏幕射线碰撞

    Layers层: 从Layers设置看来,最多支持32层.  图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加. 当摄像机Culling Mask属性 Nothing= –1 Eveni ...

  6. 【Unity笔记】碰撞器(Collision)与触发器(Trigger)的区别

    当碰撞器Collision组件身上的属性IsTrigger勾选为True时,该碰撞器就成了触发器. 区别:1.能够产生的回调和函数不同.碰撞器:MonoBehaviour.OnCollisionEnt ...

  7. Unity -- Collider(碰撞器与触发器)

    (2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样) 在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体.2.接收碰撞的物体. ...

  8. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  9. Unity 碰撞器

    Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...

随机推荐

  1. 正确解读free -m

    如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. $ free -m total used free shared buffers cachedMem: 1002 ...

  2. c/c++ string

    string类的定义.操作. #include<iostream> #include<string> using namespace std; int main() { // ...

  3. 【原创】node+express+socket搭建一个实时推送应用

    技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...

  4. 建表过程-列名&列类型&修改表B

    怎么建表? 主键 名称 重量 价格 生产日期 保质期 产地 种类                       分析:我们只要把第一行的表头建好后,这张表也就完成了.  术语:建表的过程就是声明字段过程 ...

  5. October 29th Week 44th Saturday 2016

    I am a slow walker, but I never walk backwards. 我走得慢,但我从不后退. I walked very slow, sometimes I even sl ...

  6. jquery简单的轮播效果!

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. gloolooer

    V1.2gloolooer金[http://sh.yun.ftn.qq.com/ftn_handler/0a9043ee7aa120d3c864281211dff2f08efe5e2d42438ec5 ...

  8. TFS API : 四、工作项查询

    TFS API : 四.工作项查询 本节将讲述如何查询工作项,将用户统计数据. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] f ...

  9. 同感,C#对JSON序列化和反序列化有点蹩脚

    http://www.cnblogs.com/baisoft/p/5860676.html

  10. PHP 判断点是否在多边形内

    如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...