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);
}
}
Unity之CharacterController 碰撞问题总结的更多相关文章
- unity触发器和碰撞器
Unity中检测碰撞的方法有两种,一种是触发器一种是碰撞器,现在我来解释一下两种的区别. 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit ...
- 【Unity】物理碰撞实验
http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...
- Unity 几种碰撞模式
1.OnControllerColliderHit 事件 (角色控制器使用) 2.Physics.Raycast 函数 3.OnTriggerEnter 事件 (碰撞物体使用,给碰撞物体添加碰撞器, ...
- Unity 碰撞检测中碰撞器与触发器的区别
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- Unity屏幕射线碰撞
Layers层: 从Layers设置看来,最多支持32层. 图层的值开始依次 0^2,1^2, 2^2, 3^3 依次增加. 当摄像机Culling Mask属性 Nothing= –1 Eveni ...
- 【Unity笔记】碰撞器(Collision)与触发器(Trigger)的区别
当碰撞器Collision组件身上的属性IsTrigger勾选为True时,该碰撞器就成了触发器. 区别:1.能够产生的回调和函数不同.碰撞器:MonoBehaviour.OnCollisionEnt ...
- Unity -- Collider(碰撞器与触发器)
(2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样) 在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体.2.接收碰撞的物体. ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- Unity 碰撞器
Unity引擎的碰撞器 常见的有Box Collider,Capsule Collider等等 IsTrigger(触发器) 在这些碰撞器中有一个属性 Is Trigger(是否使用触发器) 触发器事 ...
随机推荐
- sql奇进偶舍函数
create function sslr(@num numeric(20,10),@i int) --@i保留的小数位 --@num传入的数据 returns varchar(2 ...
- tomcat端口被占用问题完美解决方案!
启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are alrea ...
- 1.1Axure简介
1.部件:点击部件右上角的?,可以看到相关注释,注释底部有网站链接,可查看部件的详细介绍.
- 总结一下项目中遇到的分页问题,使用bootstrap-table来做的后台分页,大家可以借鉴一下 (分页第一篇)
前台进入bootstrap的js和css文件,我就不多少了,另外要引进bootstrap-table的js和css 废话不多说,直接代码. 框架为ssm,代码很清楚 <div class=& ...
- python的异常处理
在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...
- js实现返回顶部功能的解决方案
很多网站上都有返回顶部的效果,主要有如下几种解决方案. 1.纯js,无动画版本 window.scrollTo(x-coord, y-coord); window.scrollTo(0,0); 2.纯 ...
- mysql介绍及安装
一.MySQL介绍 1.标志 MySQL的海豚标志的名字叫"sakila",它是由MySQL AB的创始人从用户在"海豚命名"的竞赛中建议的大量的名字表中选出的 ...
- Power服务器中KVM克隆新虚拟机
查看当前所有虚拟机:virsh list --all 克隆新虚拟机:virt-clone -o guest01 -n guest02 -f /var/lib/libvirt/images/guest ...
- 优化Linux内核参数
转自:http://www.centoscn.com/CentOS/config/2013/0804/992.html vim /etc/sysctl.conf 1.net.ipv4.tcp_max_ ...
- js 倒计时
/** * 启动,秒杀倒计时. time格式:DDHH24MISS 例如: time="11223344"; * */function timer(time) { var d = ...