unity3D中,给物体unity添加刚体体后,为什么不

求助:模型加了box collider和刚体运行时却没发生任何碰撞【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:79,434贴子:
求助:模型加了box collider和刚体运行时却没发生任何碰撞收藏
模型A(预设)加了box collider和刚体,全是默认设置,然后代码中通过不断设置translate.position改变模型位置,然后发现两个模型可以穿过。。是因为不能直接设置translate.position吗?
openinstall免打包渠道统计,一个渠道统计链接同时兼容安卓iOS移动广告效果监控的好帮手
刚体应该加力进行位移~如果在update周期直接设置position还是会按照最后设定的position来安放位置,如果是累加position,那么一旦经过fixedupdate周期会被弹出,造成抖动~。
吊炸了!哈哈
登录百度帐号推荐应用四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础。牛顿有句话我很喜欢:“如果说我看得比较远的话,那是因为我站在巨人的肩膀上。”
做游戏设计也是一样的,我们写策划文档需要Word、Excel、Visio等办公软件,写程序需要Visual Studio、Eclipse等各种集成开发环境、美术需要3dsMax、Maya、Photoshop……正因为有了这些强大工具,我们的生产力才会越来越高效。所以用记事本写代码、用Windows画图画蒙娜丽莎什么的,只是个人能力的体现,保留一份敬佩的心情就好了,可别真应用到实际工作中哦,老板会疯掉的^_^。
话说不知道当年那个给牛顿带来启迪的苹果,到底是掉在了地上还是真的掉在了牛顿的头上,总之它就是往下掉了。运用基本的初中物理知识我们就知道这是因为地球对苹果施加了重力。同样的还有在“愤怒的小鸟”中,我们把小鸟用弹弓弹向空中之后,始终都会掉落在地面上。在大部分物理引擎中,都可以使用刚体(RigidBody)来模拟这种效果,Unity也不例外。
看下官方文档中对刚体的说明:当一个游戏对象被赋予刚体组件之后,游戏引擎就会对其进行物理效果模拟。同时我们也可以给这个对象施加各种作用力,让它运动起来。另外如果要实现重力的效果,那么相应的游戏物体都必须附上刚体组件。
我在Unity中导入了一个苹果的模型来实验一下重力的效果,选中模型并添加刚体组件。(主菜单→Component(组件)→Physics(物理)→RigidBody(刚体),添加组件的操作都很类似,以后不再赘述。)可以看到属性列表并不是很复杂,稍微介绍一下:
Mass(质量): 学过物理的同学们都知道的吧,质量越大,惯性越大。这里的单位可以自己统一规定,但是官方给出的建议是场景中的物体质量最好不要相差100倍率以上。估计是防止两个质量相差太大的物体碰撞后会产生过大的速度,从而影响游戏性能吧。
Drag(阻力):这里指的是空气阻力,当游戏物体收到某个作用力的时候,这个值越大越难移动。如果设置成无限的话,物体会立即停止移动。
Angular Drag(角阻力): 同样指的是空气阻力,只不过是用来阻碍物体旋转的。如果设置成无限的话,物体会立即停止旋转。
Use Gravity(使用重力): 勾选了这个项,游戏对象就会受到重力影响。
Is Kinematic(是否动态): 勾选这个选项会使游戏对象不受物理引擎的影响,但这不等同于没有刚体组件。这通常用于需要用动画控制的刚体,这样就不会因为惯性而影响动画了。
Interplate(差值类型):如果看到刚体移动的时候一直抽风或者运动的不是很平滑,可以选择一种平滑方式: None(无差值):不使用差值平滑。 Interpolate(差值):根据上一帧来平滑移动。 Extrapolate(推算):根据推算下一帧物体的位置来平滑移动。
Collision Detection(碰撞检测方式): Discrete(离散):默认的碰撞检测方式。但若当物体A运动很快的时候,有可能前一帧还在B物体的前面,后一帧就在B物体后面了,这种情况下不会触发碰撞事件,所以如果需要检测这种情况,那就必须使用后两种检测方式。 Continuous(连续):这种方式可以与有静态网格碰撞器的游戏对象进行碰撞检测。 Continuous Dynamic(动态连续):这种方式可以与所有设置了2或3方式的游戏对象进行碰撞检测。
Freeze Position/Rotation(冻结位置/旋转): 可以对物体在X、Y、Z三个轴上的位置/旋转进行锁定,即使受到相应的力也不会改变,但可以通过脚本来修改。
了解完刚体组件的设置参数后,直接点击测试运行游戏按钮(记得把摄像机对准苹果),结果发现苹果的确是往下坠了,但是并没有停在地面上,而是穿过去了,囧。检查一下发现原来忘了添加碰撞器,于是找个球形碰撞器附加到苹果上就OK了。貌似Unity还自动匹配了碰撞器的大小,省得我自己再调整,真是体贴呀。
如上图所示,绿色的曲线就代表了苹果所带有的球体碰撞器,此时如果运行游戏的话可以发现苹果正确地落到了地上。但是还有个问题,因为我场景里的地形不是水平的,所以苹果落地以后会慢慢慢慢滚向湖中心……给地形添加了碰撞材质貌似苹果还是义无反顾地向湖中心奔去,如果有哪位高人路过还望指点一二。
最后顺便再提一下恒力组件(Constant Force),由于比较容易理解我就不做详细介绍了。一共有4个参数,分别是Force/Relative Force(世界/相对作用力)、Torque/Relative Torque(世界/相对扭力)。
这些参数代表了附加在刚体上的XYZ轴方向恒力的大小,另外还要注意必须是刚体才可以添加恒力。有兴趣可以自己尝试一下给物体一个Y轴方向的力,物体就会像火箭一样飞向天际,哈哈。
本文已收录于以下专栏:
相关文章推荐
本文转载自/thread--1.html
转载请注明出处
刚体能让你的游戏对象被物理引擎所控制,它能通过受到推力和扭力来实现真实的物...
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:
Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩...
Unity 刚体和 Collider
刚体允许你的游戏对象在物理引擎下运动。在现实途径下刚体可以接受力和力矩使物体移动。任何游戏对象必须包含刚体受重力作用下的附加力,通过脚本,或与其他物体通过NVIDIA PhysX物理引擎。
选项:
...
刚体:Rigidbody;
void Start () {?
GetComponent().AddForce(Vector3.up*3);//给刚 体施加?力
GetComponent().AddEx...
Rigidbody属性
Mass表示物体的质量,数值类型为float,默认值为1。大部分物体的质量属性接近于0.1才符合日常生活感官感受,超过10 ,则失去了仿真效果。
Drag表示平移阻力,其数...
在界面中的层次栏中单击Create按钮选择(plan)地板.场景中会出现一块地板。然后再单击cube(立方体),然后点击cube对象属性栏中会出现cube的属性,单击最下面的Add
Componen...
独立开发也很多很多年头了.一直被身边的朋友吐槽我什么都不说
在csdn也有几个年头了.
最近又被一些国外友人吐槽我. 稀字如金
所信就借这个博客写点东西吧.哈哈这个也算是我人生的第一篇博文啊
Unity内置了NVIDIA的Physx物理引擎,Physx是mu'qian
1.风力区域(设置局部风)
添加方法GameObject->Create Other->Wind Zone
其中属性中Wind Main-是设置风力的大小
2.给桥添加碰撞体
首先,需要创建一...
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
unity——Rigidbody类
游戏对象添加Rigidbody组件后即具备物理属性,当其受力和扭矩影响时可产生更加真实的行为。当操作刚体参数的时候,你应该在FixedUpdate 函数中使用它,物理模拟以离散的时间步执行。FixedUpdate函数在每一步之前被立即调用。使用刚体时应注意,父物体和子物体不应同时具有刚体,也 不应该缩放刚体的父级。
var velocity : Vector3
刚体的速度向量
var angularVelocity : Vector3
刚体的角速度向量。
var drag : float
物体的阻力
var angularDrag : float
物体的角阻力
var mass : float
刚体的质量
var useGravity : bool
是否受重力影响
var isKinematic : bool
是否是运动学刚体。运动学刚体不受力、碰撞或关节控制,完全由动画或代码(Transform)驱动,但运动学刚体可以通过碰撞或关节影响其他刚体的运动。非运动学刚体则受力、碰撞或关节控制。
var freezeRotation : bool
冻结旋转,使物理因素不能改变物体的旋转
var collisionDetectionMode :CollisionDetectionMode
刚 体的碰撞检测模式。为了获得最佳效果,对于快速移动的物体,应设置动态连续碰撞检测模式(ContinuousDynamic),以防止物体还没检测到碰 撞就穿越了被碰撞物体;对于被碰撞物体,应设置连续碰撞检测模式(Continuous,连续碰撞检测是基于网格几何体的静态碰撞)。由于碰撞检测模式的 选择对物理性能有很大的影响,默认情况下,应采用非连续碰撞检测模式(Discrete)。
var centerOfMass : Vector3
重心。如果你不在脚本中设置重心,它将从所有附加到刚体上的碰撞器自动计算。重心的设置关系到物理运动的真实性。
var worldCenterOfMass : Vector3
在世界坐标中刚体的重心。(只读)
var detectCollisions : bool
碰撞检测是否启用(默认总是启用的)。
var position : Vector3
刚体的位置,只在物理步结束才应用到变换,不能用于连续移动。
var rotation : Quaternion
刚体的旋转,只在物理步结束才应用到变换,不能用于连续旋转。
var interpolation : RigidbodyInterpolation
刚体插值,用以平滑物理运动的显示效果,默认是关闭的(None)。物理运动以离散的时间步运行,而显卡以可变的帧率渲染,这可能导致物体抖动。对于主角或相机跟随的物体,建议使用插值。
function AddForce (force : Vector3, mode :ForceMode = ForceMode.Force) : void
添加一个力到刚体。作为结果刚体将开始移动。
枚举类型ForceMode
添加一个可持续力到刚体,使用它的质量。
Acceleration
添加一个可持续加速度到刚体,忽略它的质量。
添加一个瞬间冲击力到刚体,使用它的质量。
VelocityChange
添加一个瞬间速度变化给刚体,忽略它的质量。
function AddForce (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void
添加一个力到刚体。作为结果刚体将开始移动。
function AddRelativeForce (force : Vector3,mode : ForceMode = ForceMode.Force) : void
添加一个力到刚体。相对于本地坐标。
function AddRelativeForce (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void
添加一个力到刚体。相对于本地坐标。
function MovePosition (position : Vector3): void
移动刚体到position。
function AddTorque (torque : Vector3, mode: ForceMode = ForceMode.Force) : void
添加一个转矩到刚体。作为结果刚体将绕着torque轴旋转,torque的长度决定转速。
function AddTorque (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void
添加一个转矩到刚体。作为结果刚体将绕着torque轴旋转,torque的长度决定转速。
function AddRelativeTorque (torque :Vector3, mode : ForceMode = ForceMode.Force) : void
添加一个转矩到刚体,相对于本地坐标。
function AddRelativeTorque (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void
添加一个转矩到刚体,相对于本地坐标。
function MoveRotation (rot : Quaternion) :void
旋转刚体到rot。
向物体表面施加力
function AddForceAtPosition (force :Vector3, position : Vector3, mode : ForceMode = ForceMode.Force) : void
在position位置应用force力。作为结果这个将在这个物体上应用一个力矩和力。为了效果的真实性,position的位置应在刚体的表面。
function AddExplosionForce (explosionForce: float, explosionPosition : Vector3, explosionRadius : float, upwardsModifier: float = 0.0F, mode :ForceMode = ForceMode.Force) : void
应用一个力到刚体来模拟爆炸效果。爆炸力将随着到刚体的距离线形衰减。
explosionForce
explosionPosition
explosionRadius
爆破半径,为0时表示无穷大
upwardsModifier
可以理解为爆炸产生的向上冲击波的衰减值。值越大,威力越小。
function ClosestPointOnBounds (position :Vector3) : Vector3
计算刚体表面离position最近的点。可用于计算作用到刚体表面上一个点的爆炸力。
function GetRelativePointVelocity(relativePoint : Vector3) : Vector3
获取刚体上的点相对本地坐标系的速度。获取的速度有考虑刚体的角速度。
function GetPointVelocity (worldPoint :Vector3) : Vector3
获取刚体上的点相对世界坐标系的速度。获取的速度有考虑刚体的角速度。
function Sleep () : void
强制一个刚体休眠至少一帧。刚体休眠有利于性能优化
function IsSleeping () : bool
判断刚体是否在休眠
function WakeUp () : void
强制唤醒一个刚体
function SweepTest (direction : Vector3,out hitInfo : RaycastHit, distance : float = Mathf.Infinity) : bool
碰撞扫描,返回是否将要发生碰撞。
如果将要发生碰撞(即返回true),hitInfo将包含更多碰撞信息
function SweepTestAll (direction : Vector3,distance : float = Mathf.Infinity) : RaycastHit[]
碰撞扫描,返回所有碰撞点。
浏览 16099
stephen830
浏览: 1975700 次
来自: 上海
Netty视频教程 ...
使用Netty进行Android与Server端通信实现文字发 ...
非常感谢,正好用上
提示的/222.177.4.242
无法链接到ip地址,是什 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'29被浏览3617分享邀请回答182 条评论分享收藏感谢收起public class ForceTest : MonoBehaviour {
public const float FixedUpdateTimeStep = 0.02f;
private Vector3 previousVelocity, currentVelocity;
new Rigidbody rigidbody;
public Vector3 acceleration;
public Vector3 force;
public Vector3 addiingForce = new Vector3(0, 1, 0);
public ForceMode addingForceMode = ForceMode.Impulse;
void Start () {
rigidbody = GetComponent&Rigidbody&();
void FixedUpdate () {
previousVelocity = currentVelocity;
currentVelocity = rigidbody.velocity;
acceleration = new Vector3((currentVelocity - previousVelocity).x / FixedUpdateTimeStep,
(currentVelocity - previousVelocity).y / FixedUpdateTimeStep,
(currentVelocity - previousVelocity).z / FixedUpdateTimeStep);
force = acceleration * rigidbody.mass;
rigidbody.AddForce(addiingForce, addingForceMode);
用一个Scale为1的Cube做实验:发现ForceMode为Force或者Acceleration的时候是比较符合牛顿第几定律F=ma的,但是始终有一点误差,记录如图(默认还有-9.8的重力,所以合力应该是0):Rigibody组件截图:Force模式:2.Impulse模式:3.Velocity Change模式:4.Acceleration模式:添加其他方向力的情况:Force模式:Acceleration模式:注意:要是通过力来控制物体,请不要再用Transform来控制物体的位置和移动4添加评论分享收藏感谢收起查看更多回答& & & & &物体碰撞需要刚体,但是用刚体的时候,他会自动的从平台上面掉下去,如果这个地方不懂,原因是没有仔细的阅读unity官方的API文档,unity官方为了帮助我们解决这个问题,专门设计了一个运动学的解决方案。具体API里面都有介绍。
本文已收录于以下专栏:
相关文章推荐
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:
Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩...
遇到了这个问题卡了好久,网上说的试了都不行。要解决此问题:给模型添加一个刚体后,还要给模型添加一个碰撞器。
网上都说添加了碰撞器后,就好了,坑啊!!!
添加了碰撞器的时候,还是有很多注意点的:
在开发过程中常常需要对物体进行隐藏和显示操作,在这里总结一些;
一、设置Renderer状态
每一个可以被渲染的物体都会包含一个Renderer组件,用来渲染物体到屏幕上,如果禁用这个组件自然也就实现...
Unity3D中隐藏与显示物体的一些操作
dentistdeng| 12:51|35154次浏览|Unity(261)0
在使用unity3d开发游戏的过程中,我们...
找了好久,才找到方法
1、导入自定义的3D模型,在project的assets里面
2、选中某个模型,在Inspector视图中,勾选Generate Collider,点击Apply
郁闷,今天被这个问题搞了一个下午,弄到现在,记录一下:
本来想说今天学习一下unity3d中的物理的,学到刚体和碰撞这一章,就想说先在场景里面摆一个平面(plane)和一个球体(sphere),然后让...
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书《Unity4.x从入门到精通》)解释如下:
Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与...
HFSS报错at least one material assignment should have solve inside set
解决方案:
1、这种错误一般是由于所建模型是实...
job 不能自动运行--这是另外一个mos文章,本文章有13个解决方法
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 unity 给物体添加tag 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信