- 风筝随着手柄飞行
一开始我做的是当风筝和手柄的相对位置差0.1的时候。看手柄移动的相对位置,然后让风筝朝哪个方向飞行,但是导入pico的时候有一个问题,就是pico手柄是三自由度的没有办法判断位置,或者我们可以说位置判断的不是那么准确,我又利用了其他的位置判断的方法,但是都不是那么灵敏,最后张东大佬说我们手柄的远处放一个子物体,当手柄移动或者旋转的时候手柄上的子物体也会移动,并且旋转的时候子物体的旋转更大,然后让我们的风筝追我们的子物体的位置,就很灵敏了。我觉得作为一个程序员真的不能思想太狭隘要灵活一点。
2.线轴跟随手柄
风筝线轴我们不一定非得放在手柄底下当做子物体才能随着移动,当然放在手柄下面更好,因为这样旋转和移动都偏差很小,但是有的时候会打破prefab,但是我在这里想说说如果不是非得旋转也跟上的话我们完全可以给线轴写一个脚本,让线轴跟随手柄的位置 ,但是这个跟随和我们上面的跟随不一样,上的跟随我们是希望他随着一帧一帧飞过去,这里我们希望他直接过去,我们看脚本吧
其实他们两个的脚本是差不多的,我都用的Vector3.Lerp()但是就是第三个参数有点不一样,第一个风筝跟随的那个我们用的0.1f,下面那个我们需要他直接过去,我们使用的是1f。
3.碰撞检测
碰撞检测一共有两个,一个是
OnCollisionEnter(Collision collision)
这个是需要两个物体上都有碰撞体,且一个物体上挂有rigidbody,但是两个物体上都没有勾选isTrigger,这个是什么意思呢?就是我们按照正常的碰撞来,碰到了还是会撞开有正常的物理的碰撞,但是加上OnCollisionEnter()的时候我们就可以检测到碰撞并且加上一个条件,碰撞上就会触发这个条件,对于物理碰撞完全没有影响。
另一个是OnTriggerEnter(Collider collider)
这个比上一个就是两个碰撞体上至少有一个isTrigger勾选,这个意思就是正常的物体碰撞不存在了,碰到会穿过去,但是在检测到碰撞的时候会触发我们设置的那个条件。
我在这里需要风筝在飞过去的时候碰到我们设置的两个碰撞的时候需要停止不穿过去,但是触发条件是手柄震动,所以我们需要第一个碰撞触发。我一共设置了上下左右前后六个碰撞,但是我只希望他在碰到左右的时候有手柄震动,因此我在左右的时候多设置了两个写了第二个碰撞,这样既不影响其他的物体不穿,又只有左右的手柄震动。
4.风筝碰撞之后状态不好
第一风筝会有角度变化在碰撞之后
第二风筝会抖动
第一个我们是在rigibody上解决的:
GetComponent().freezeRotation = true;
GetComponent().velocity = new Vector3(0, 0, 0);
使角度固定,然后使角速度为0
第二个我们是把跟随这项运动写在了FixedUpdate里面,这样不是每帧都执行而是固定帧执行,这样就不会有抖动了