unityunity wheel colliderr的大小怎么获取

Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解 - 简书
Unity3D-Collider(碰撞器)与Tirgger(触发器)--详解
什么是碰撞器?
描述了物体可被碰撞的边界,以及碰撞过程中相互影响效果。碰撞效果:两个游戏对象碰在一起,通过物理引擎产生类似现实的效果
碰撞器的种类:
1、盒碰撞器(Box Collider)2、椭圆碰撞器(Sphere Collider)3、胶囊碰撞器(Capsule Collider)4、车轮碰撞器(Wheel Collider)专用于车辆5、网格碰撞器(Mesh Collider)6、地形碰撞器(Terrain Collider)
1、盒碰撞器(Box Collider)盒子碰撞器是一个立方体外形的基本碰撞体,该碰撞体可以调整为不同大小的长方体,可以做门,墙等
Paste_Image.png
2、椭圆碰撞器(Sphere Collider)
椭圆碰撞器是一个基本球形的基本碰撞体,球形碰撞体的三维大小可以均匀的调节,适用于落石,球形障碍物
Paste_Image.png
3、胶囊碰撞器(Capsule Collider)是由一个圆柱体和与其相连的两个半球体组成
Paste_Image.png
4、车轮碰撞器(Wheel Collider)是一种针对地面车辆的特殊碰撞体,有内置的碰撞检测、车轮物理系统及有滑胎摩擦的参考体。
Paste_Image.png
5、网格碰撞器(Mesh Collider)通过获取网格对象并在其基础上构建碰撞碰撞。更加精细,但是会使用更多系统资源。开启Convex参数的网格碰撞体才可以与其他网格碰撞体发生碰撞
Paste_Image.png
通常两个网格碰撞体之间不会发生碰撞,但是它们都可以与基本碰撞体发生碰撞如果要让它发生碰撞:开启Convex属性
Paste_Image.png
1.碰撞的方法
球跟胶囊的代码
胶囊的代码
情形一当两个游戏对象拥有刚体和碰撞器,不管脚本挂哪个游戏对象都可以进入Oncollision,两者都挂在碰撞器脚本都会调用各自身脚本上的OnCollision方法。
Paste_Image.png
Paste_Image.png
情形二碰撞体球带有刚体,有碰撞器,有脚本,一开始就会进入自身的碰撞器方法打印与地面的接触。被碰撞物胶囊有碰撞器,有脚本,但是没有刚体,一开始不会进入自身的碰撞器方法。当两个物体发生碰撞,两者脚本中的碰撞器方法都会被触发打印
Paste_Image.png
打印结果为:首先一开始发现只有有刚体的球打印了自己的碰撞器方法
Paste_Image.png
当球碰到胶囊的时候两者都触发打印
Paste_Image.png
情形三碰撞体球带有刚体,有碰撞器,有脚本,一开始就会进入自身的碰撞器方法打印与地面的接触。被碰撞物有脚本,没有刚体(有刚体也是一样)跟碰撞器,不会打印任何方法一开始打印:
Paste_Image.png
Paste_Image.png
Paste_Image.png
二者相碰,拥有刚体与碰撞器并且身上有碰撞器方法的小球遇到没有碰撞器的胶囊(不管有没有刚体都一样1)会直接穿过去。
Paste_Image.png
情形四球与胶囊都只有碰撞器跟脚本,没有刚体
Paste_Image.png
Paste_Image.png
打印结果:当两者没有刚体而只有碰撞的时候,两者是不会发生碰撞的,互相穿过。因此二者都没有打印结果,是空的
Paste_Image.png
最终结论:
1、只要有刚体有碰撞器,并且与其他碰撞器碰撞就会进入自身的碰撞器方法2、没有刚体,有碰撞器的物体被一个拥有刚体的碰撞器碰撞,都会调用自身的碰撞器方法。3、没有刚体的两个碰撞器相撞不会调用任何碰撞器方法最终结论:碰撞器(Collider)不需要刚体(Rigidbody)刚体(Rigidbody)要发生碰撞,一定需要碰撞器(Collider)碰撞器决定了碰撞发生时的边界条件刚体决定了碰撞发生后的物体的运动效果没有碰撞器的刚体,会在物理模拟中相互穿透。
2、触发器的方法
Paste_Image.png
Paste_Image.png
情形一1、当两方带有触发器跟脚本,没有刚体的时候,二者不会打印触发器方法
Paste_Image.png
Paste_Image.png
2、其中一方是触发器,另一方是碰撞器,二者也不会打印触发器方法,都不会打印东西。
Paste_Image.png
一样不会打印东西
Paste_Image.png
情形二给球添加一个刚体,且是个触发器的时候,球会直接与地面产生交互,穿透地面,并打印触发方法。
Paste_Image.png
打印触发方法:
Paste_Image.png
情形三给球的刚体勾上Is kinematic
Paste_Image.png
此时当球与方块碰撞的时候,当球与方块会打印各自的触发器方法。
Paste_Image.png
情形四当球与方块都有刚体和触发器和脚本的时候,二者都会调用触发方法
Paste_Image.png
Paste_Image.png
打印结果:
Paste_Image.png
情形五只要一方是触发器,另一方是有碰撞体就会触发各自的触发器方法
打印结果:
Paste_Image.png
1、想要打印触发器方法,必须有一方是触发器,必须有一方带有刚体。二者缺一不可。2、双方都是触发器,或者其中一方是触发器,另一方是碰撞器,都不会打印。3、只要一方是触发器,并且有刚体组件,不管另一方是碰撞体还是触发器都会打印各自的触发器方法。4、一般我们将触发器方法写在角色碰到的物体上,角色一般不参与触发方法。只写碰撞方法。5287人阅读
unity(50)
有时间的直接看这个插件的代码,原理也是发射线检测,代码逻辑什么的比下面的文章来的好的多,如果有空我也可以整理一下。
在纯物理环境中,为了获得碰撞体碰撞的位置,我们可以使用Collider2D.OnCollisionEnter2D(Collision2D)来接受碰撞,Collision2D中存有碰撞信息Collision2D.contacts(The specific points of contact with the incoming Collider2D), contacts的类型是ContactPoint2D[],,通过ContactPoint2D,我们可以获得世界坐标系中两个碰撞体碰撞的位置。
当然,出发Collider2D.OnCollisionEnter2D(Collision2D)是有条件的,且较触发器更为苛刻,官网文档给出的条件(Unity ManualPhysicsPhysics OverviewColliders)如下:
我现在有特殊的需求,一个静态碰撞体和一个鼠标拖动的超小碰撞体(近似认为是一个点),要求他们碰撞的位置。当然,我设置碰撞体为IsKinematic的时候,OnCollisionEnter2D就会失效,所以无法用上面的方法获得碰撞点,那么来思考一下使用OnTriggerEnter2D是否好使?查看文档可以知道,OnTriggerEnter触发的时候,并不会记录点信息,故我们需要自己思考如何获得碰撞点。为了使用触发器来获得碰撞点,我也试了很多方法,试过将刚体的Collision Detection置为Continuous,试过修改差值方式等,均不好使。。。每次OnTriggerEnter2D触发的时候,一个触发器已经嵌入到另一个触发器之中,ORZ, 所以能得到的信息就是在触发的这一帧的位置。不过上一帧的位置我们也能得到,自己测试了一下,想在LateUpdate中记录上一帧的位置,不过这个位置也就是触发时候的位置,所以还需要一个变量记录真正的上一帧的位置。现在得到了两个有用的变量:触发器触发时候的位置 currentPos以及上移帧的位置 lastPos,静态碰撞体的边缘就在这两个位置之间,我从lastPos像currentPos发射一条射线:
Vector3 origin = m_LastLastP
Vector3 end = GameContext.MouseFollowP
Vector3 direction = end -
float distance = Vector3.Distance(origin, end);
RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, 1 && LayerMask.NameToLayer("Target"));
Debug.DrawRay(origin, direction, Color.red, 2);
Debug.Assert(hit.collider != null, "未检测到起点");
if (hit.collider != null)
m_StartPoint = hit.
这就得到了我所需要的碰撞点,就是这样,Oh la la!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:84682次
积分:1565
积分:1565
排名:千里之外
原创:62篇
转载:15篇
评论:10条
(1)(2)(2)(3)(2)(3)(4)(6)(10)(6)(19)(1)(4)(1)(1)(1)(2)(5)(4)(7)
邮箱:zhiheng.
豆瓣:/people//
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Unity3D 2D入门——sprite尺寸、获取对象 - CSDN博客
Unity3D 2D入门——sprite尺寸、获取对象
先介绍一个链接,吃豆人的:
http://forum./thread-.html
关于地图的制作,我只想记录一个关于尺寸的获取方式:
(1)位置(未测):
& & & & & 假设从根级(也就是场景级别)到脚本所在的级别为
& & & & & Background -& Deck -& Target
& & & & & 脚本被附在 Target 对象上,那么脚本中用以下代码获取 Target 的位置(理论上是这样,未实测,在实际使用过程中发现,Unity应该是先完成了缩放、旋转以后,再进行移动作为最后一步)
Vector3 posTarget = transform.localPosition
+ transform.parent.localPosition
+ transform.parent.parent.localP
(2)尺寸:
& & & & &这里假设脚本所在的对象为场景级别,也就是根级别。由于我们使用的是 Sprite 完成 2D 元素的表示,那么与 3D 不同,稍微麻烦。有两种方式来获取尺寸:
& & & & & 1)利用碰撞体获取(未测):
& & & & & & & & 创建一个 BoxCollider2D, 然后用如下代码获取(未测试,此法为各个博客搜集的,而我不想手动创建那么多碰撞体,因&
& & & & & & & & 为我的地图采用的是寻址方式,而不是碰撞检测方式)
Vector2 sizeBox = GetComponent&BoxCollider2D&().& & & & & 2)直接利用Sprite获取(亲测):
& & & & & & & & 这也是博主使用的方式,需要使用物体的缩放因子以及sprite的Bound,
& & & & & & & & 通过此方式获取的尺寸与 localPosition 中的位置是相对应的(位置在0~1的物体尺寸为1),实现代码如下
float x = transform.localScale.x * GetComponent&SpriteRenderer&().sprite.bound.size.x;
(新增:transform.localScale使用的是本地的缩放因子,也是本人的场景需求。transform.lossyScale可以获取世界坐标系下的缩放因子,以适应世界坐标系下的尺寸)
获取对象的方法(只提供亲测的方式)
(1)获取当前对象的子对象
Transform walls = transform.Find(&Walls&);(2)获取同级别的对象(测试条件:脚本对象以及目标对象均为场景级别对象)
GameObject go = GameObject.Find(&Hand&);
本文已收录于以下专栏:
相关文章推荐
参考文章:
Unity3D 获取一个游戏对象的尺寸
Unity3D 2D入门——sprite尺寸、获取对象
unity与3DMax的单位问题
1、获取父物体时获取自...
第一次用 Unity2D ,拖了一个 Sprite到场景中,发现问题,640 宽度的图片,却不能占满 640x960 分辨率的屏幕。
到Momo的博客看到相关的文章
http://www....
unity3d 更换sprite renderer中sprite的图片 
所更换图片尺寸与原图片相同
using UnityE
using System.C
using UnityEngine.UI;
public class Demo : MonoBehaviou...
版权声明:本文为博主原创文章,未经博主允许不得转载。出自 游戏开发实验室_孙广东
孙广东 
在将图片导入Unity后 做的一些设置经常会得到警告信息。所以要了解一...
我们平时在做项目时,经常遇到按钮的点击而且还要区分悬浮,点击,禁用的状态,美术要针对一张图片做多个状态图片,资源图片的数量也就增大了,那么打出的包的大小也就跟着上去了,所以我们可以针对原始图片进行Sh...
Unity中经常使用到精灵,尤其是2D游戏中制作动画等!今天我们就学习下精灵的切割和导出吧!
废话不多说,先建议空的工程。
1,打开Unity建工程,同时导入素材进行资源分类,工程不在于大小,这是...
/unity/2016-07/Unity-Sprite-VS-Image.html
Unity3D最初是一个3D游戏引擎,而从4.3开始,系统加...
作者ChevyRay ,日,snaker7译
 原文地址:/introduction-to-coroutines/
Sprite被为设置Multiple的情况下,如何根据子Sprite的名字设置精灵图片呢:
找不到直接根据名字取子Sprite的方法,但是我们可以通过
 Sprite[] sprites = Reso...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 unity boxcollider 的文章

 

随机推荐