首页 > 编程知识 正文

initinstance,unity里面碰撞体怎么放大

时间:2023-05-03 13:42:42 阅读:172371 作者:2618

转载自: http://www.cn blogs.com/88999660/p/3371184.html

转载时必须注明出处

1 .冲突主要有三个函数。 分别是void OnCollisionStay、void OnCollisionEnter和OnCollisionExit。 所有三个函数都是回调函数,并且具有“全部”(collisionInfo : Collision )参数。 2 .一般来说,子弹等物体进行与Player的碰撞消除处理: physics.ignore collision (clone.collider,this.collider ); 3 .如果脚本附加到子弹,则CollisionInfo对象由collision类生成,CollisionInfo包含碰撞对象信息。 另外,collisionInfo.collider是子弹碰撞物体的碰撞器,如果取得碰撞物体的名字,可以使用变量collisionInfo.collider.name (这不是碰撞器的类型名称, 经常判断为在组件上附加了物体的物体名称(用它对应不同的碰撞对象)、子弹和物理世界消失。collisionInfo.transform可以得到碰撞物体的变换属性。 collisionInfo.contacts为ContactPoint[]序列。 一般仅使用collisionInfo.contacts[0],表示碰撞触点。 动态生成爆炸效应常用的0号元素位置作为发生点位置,以下结果作为发生旋值。 (4.如霰弹枪射出的子弹,使爆炸沿冲击点的表面法线方向更真实)有些枪可能需要物体受到子弹的力作用而被吹走的效果)对于敌人,不仅是吹走,还伴随有倾倒效果的情况此时,首先可以使用放射线函数判断是否击破

中物体,并获取子弹击中点:
if (Physics.Raycast (originPosition, direction, hitInfo, distance)){.....}
//这一句是放在player身上的(在每次发射子弹时),个人觉得其实在某些场景物体或者敌人身上附加脚本利用collisionInfo去获取子弹碰撞情况下的撞击点,然后针对性地做各种反应会好一点。不过可能受力方向比较难判断,可以考虑在子弹脚本Start()中保存出生点,再依据碰撞点得到子弹运动方向,注意子弹有无重力都只考虑撞击点y坐标。
获取到击中点后即可对该点施加子弹冲击力:(先判断物体是否属于刚体)
if (hit.rigidbody) hit.rigidbody.AddForceAtPosition(force * direction, hitInfo.point);
 
 
5.爆炸的局部空间动力效果的实现。首先获取在爆炸点的某个球体半径范围内的所有碰撞体:
Collider[] colliders = Physics.OverlapSphere( transform.position,explosionRadius );
此函数除了包含位置,半径外还有默认参数遮罩层级(进行碰撞器筛选)。
接着对所有碰撞体施加力,unity内置了添加爆炸力函数:
foreach (Collider hit in colliders) {   if (!hit)   continue;  //防止碰撞体不存在?貌似多余? 
//防止碰撞体hit不存在rigidbody程序出错,只对存在刚体属性的碰撞体添加爆炸作用力。通过这个区别也可以设置一些不受爆炸影响的物体(比如terrain)。
if (hit.rigidbody) hit.rigidbody.AddExplosionForce(explosionPower, explosionPos,explosionRadius);
//此函数还含有第四个参数upwardsModifier(正数n代表虚拟爆炸点在物体中心的下方n米处),可适当设置以增加一个物体下方的虚拟爆炸力,炸飞效果更酷。参数要适当大,否则虚拟爆炸点在物体内部效果有点奇怪。
附注:AddExplosionForce也可以用于制作球形范围内的引力,只要设置了负的作用力。
 
6.在5中的情况,如果除了有爆炸作用力还需要计算按距离衰减的爆炸杀伤力,首先需要计算每个物体离爆炸点最近的表面点坐标:
 Vector3 closestPoint = hit.rigidbody.ClosestPointOnBounds(explosionPosition);
接着要计算表面点坐标与爆炸中心距离:float distance = Vector3.Distance(closestPoint, explosionPos);
最后依照爆炸威力随距离衰减的原则计算物体所受伤害占爆炸总伤害的百分比:
float damage = (1.0F - Mathf.Clamp01(distance /  explosionRadius))*explosionDamage;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。