今天在做一个小Demo时,遇到了这样一个问题:
其中人物在移动时敌人身上的瞄准标记总是在晃动,特别是当人物贴墙走时,晃动更加明显。
分析问题后,因为敌人身上的瞄准标记是人物的子物体,而人物移动的方式是通过刚体施加不同方向的力实现的,所以猜测可能是刚体施加力时标记也受到了力的作用(在与墙发生碰撞时同样会产生力的作用),又因为代码中的逻辑是使瞄准标记的位置和敌人的位置相同,所以会出现晃动问题。
解决问题的方法也很简单,只要在每次设置瞄准标记位置与敌人位置相同时将瞄准标记设置为敌人的子物体(这里父物体的选取最好选静止的,如果没有静止的物体可以选不是在刚体的作用下运动的),由于标记脱离了人物,所以在人物移动时不会转圈,这样效果看起来也不是很好,这时可以将标记的旋转设置为人物的旋转,即可解决所有问题。
代码:
//mark.transform.position = nearestEnemy.transform.position;//有问题的代码
mark.transform.SetParent(nearestEnemy.transform);
mark.transform.localPosition = Vector3.zero;
mark.transform.localRotation = transform.rotation;
mark.SetActive(true);