郁闷,今天被这个问题搞了一个下午,弄到现在,记录一下:
本来想说今天学习一下unity3d中的物理的,学到刚体和碰撞这一章,就想说先在场景里面摆一个平面(plane)和一个球体(sphere),然后让球体落下来砸在平面上然后反弹,看各种效果,步骤如下:
一、新建一个plane对象,此时这个对象默认有一个Mesh colider碰撞组件。
二、新建一个sphere对象,放置于plane对象之上,此时该对象有一个sphere colider碰撞组件,然后呢再给它添加一个刚体组件rigidbody,之后运行程序。
问题就来了:
一、球没有下落,后来查了半天,才发现是重力没设置(这个待会儿再说为啥没设置,默认新建一个工程是有的),点击Edit->Project Settings->Physics,打开The Physics Manager 物理管理器,如图:
设置那个Y值,一般重力我们都只设置这个y值的,下面这句摘自官网:
Gravity | The amount of gravity applied to all Rigidbodies. Usually gravity acts only on the Y-axis (negative is down). Gravity is meters/(seconds^2). |
二:球径直穿过了平面,没有任何碰撞和反弹?
这个就有点郁闷了,各种查啊,试啊,最后终于搞明白了,还是上面那个物理管理器设置得有问题,看见俺那个Layer Collision Matrix没,就是下面那个矩阵。
那里定义了层与层之间的碰撞关系,每个对象都属于一个层级,如下图:
上面那个矩阵定义了哪两个层级之间是开启了碰撞检测的,两个层级之间如果没有开启碰撞检测(就是上面那个矩阵对象的复选框没有勾上),那么属于这两个层级的物体都不会有碰撞检测。我就是创建的两个物体都属于Default层级,但Default与Default层级之间没有开启碰撞,类似下图:
所以就没有碰撞,把Default和Default之间的那个复选框勾选上后就有碰撞和反弹了。
其实默认,新建一个工程时这几个默认层级之间都是有碰撞关系的。下面就来说说我为啥工程里面都不是默认值。
原因很简单,就是我这个工程是从网上下下来的Demo,直接用Unity打开了,而这个Demo把工程的物理管理器设置给改了,结果导致了我今天的悲剧。这个也说明了这个物理管理器的设置是针对工程生效的,就是说只要你把这个设置改了后,无论你在这个工程里面新建多少个Scene,这个物理管理器的设置对那个Scene都生效。
所以,忠告就是:对于像我这种刚开始入门的新手来说,实现书上说的内容时,还是从新开一个工程,或者保证工程的设置是默认设置没有更改过为好。