unity从0开始摸鱼日记4,tkDemo2

3月7日

快开学了

好了继续tk

接下来就是给场景内的物体添加碰撞器,这也是十分重点的一部分

两个发生碰撞的物体上都必须要有碰撞器Box Collider,并且其中一方需要有刚体,通常在运动的一方身上设置刚体,因为长时间的不运动会使刚体进入休眠状态。

淦,加了Box Collider2D也加了rigidbody 2d,死活无法触发碰撞怎么办啊我要疯了

好了解决了,虽然不是很懂原理,发生问题的原因是,因为物体受到重力影响下坠,我就想去掉重力,因此把Rigidbody 的body type改成了Kinematic,当我改回Dynamic 时,他就碰撞了,于是我去查了一下这三个属性的意思

Body Type 刚体类型

设置为不同的运动行为(移动和旋转)和碰撞方式。

Dynamic(动态,默认)、Kinematic(运动学)、Static(静态)

Dynamic Rigidbody2D 动态,默认 Dynamic Rigidbody2D被设计用来制作在物理模拟下会移动的物体。
它会与所有类型的Rigidbody2D进行碰撞,是最常用的Rigidbody2D类型、默认的类型,同时也是最耗费性能的类型。
不要使用Transform组件来设置Dynamic Rigidbody2D的position和rotation。
 
Kinematic Rigidbody2D 运动学 Kinematic Rigidbody2D被设计用来制作在物理模拟下会移动、但是仅仅在明确的用户控制下运动的物体,它不会受到重力和AddForce、AddTorque等力相关的函数的影响
Kinematic Rigidbody2D对系统资源的要求比Dynamic Rigidbody2D更低(所以更有效率)。
Kinematic Rigidbody2D被设计用来通过Rigidbody2D.MovePosition或Rigidbody2D.MoveRotation来进行重定位。
对于Kinematic Rigidbody2D,velocity属性对它依旧有效,只不过施加力和重力都不会对velocity造成影响。
Kinematic Rigidbody2D仅仅只会与Dynamic的Rigidbody2D发生碰撞(在不勾选Use Full Kinematic Contacts的情况下),它在碰撞行为上类似于Static Rigidbody2D,可以理解为具有无限质量、无法被撼动(不能通过力或碰撞改变速度,但是可以设置其速度和位置、旋转)的刚体。
 
Static Rigidbody2D 静态 Static Rigidbody2D被设计用来制作在物理模拟下不会移动的物体。
它在表现上可以理解为一个具有无限质量、不可移动的物体。此时velocity、AddForce、gravity、MovePosition、MoveRotation都是不可用的。
Static Rigidbody2D对资源最不敏感(对性能要求低),Static Rigidbody2D仅仅会与Dynamic Rigidbody2D发生碰撞。
两个Static Rigidbody2D之间也不会发生碰撞,因为他们本来就被设计成不可移动的。
 

由此可见如果我将物体的属性设置为Kinematic ,他只能与有Dynamic Rigidbody2D属性的物体碰撞

害,真叫人头大

其他注意事项:

1.碰撞时发生轻微旋转,只需要将Rigidbody2D中constraints的z轴固定即可

2.碰撞时发生抖动,如果想去掉抖动,只需要在脚本中将移动方法放在private void FixedUpdate()中即可

这样子就暂时结束这个问题,继续项目

对tank的移动进行优化,因为之前的脚本使得同时按下垂直和水平方向键使,tank进行了斜方向的漂移,此处在移动前加一个限制语句,使同时只有一个按键生效

 if (h != 0)//在移动之前
        {
            return;
        }
发布了39 篇原创文章 · 获赞 0 · 访问量 1450

猜你喜欢

转载自blog.csdn.net/Z3Djoker/article/details/104715413