虽然我想很在上一节就讲完下落,但是由于时间问题(学车真的太鸡儿累了),就只分多一节来讲。
这节解决最后的一个转换,从ground到fall的转换。
3.ground到fall的转换
拉Transition,消勾HasExitTime,Condition为isGround的false一气呵成,无需多言。
但是这个转换有一点问题,例如看图:
拉完这个这个Transition后会发现上坡图中或下坡途中会莫名触发很多次ground到fall的转换。不过问题不是出在了Transition上,而是出在的isGround的判断上,因为我们之前实现虚拟碰撞体的时候 它的坐标是按照角色碰撞体的坐标来设置的,所以稍微遇到一点空隙就会判断物体离地了,例如遇到Plane与Cube的交接处时,亦或是下坡时由于步行速度大于重力施加的速度就使得稍微有点离地。我们可以通过下沉虚拟碰撞体来增大一下判定的范围。
//在OnGroundSenser,cs文件里
private float offset = 0.15f;
void FixedUpdate () {
point1 = transform.position + transform.up * radius - transform.up * offset;
point2 = transform.position + transform.up * (capcol.height-offset) - transform.up * radius;
...
}
这样在从Plane走到Cube时就不会触发到fall的Transition。而上坡途中转下坡离地的问题可以通过减慢转身速度解决:
model.transform.forward = Vector3.Slerp (model.transform.forward, pi.Dvec, 0.1f);;
原本是0.5的,设为0.1就不会离地了,不会莫名触发fall动画了。