我的3d球在向前方向连续移动,因此我想为此进行X旋转。另外,玩家在屏幕上水平拖动球,因此对于这种水平运动,我想进行Z旋转。
为了实现我的愿望,我将球制作为父代和子代游戏对象,其中父代游戏对象仅包含对撞机和刚体,这将进行实际的物理运动。 另一方面,子游戏对象仅包含网格渲染器,这将实现所需的旋转。
下面的图片使您对我的结构有了更多的了解:
为使球网格像父物理球一样旋转,我编写了以下代码:
public class BallMeshRolling : MonoBehaviour
{
private Vector3 ballLastPosition;
void Start ()
{
ballLastPosition = transform.parent.position;
}
void Update ()
{
//implementation-1
//float speed = Vector3.Distance (transform.parent.position, ballLastPosition) * 30f;
//transform.RotateAround (transform.position, Vector3.right, speed);
//implementation-2
//Vector3 differenceInPosition = (transform.parent.position - ballLastPosition).normalized;
//transform.Rotate (differenceInPosition * 10f);
//implementation-3
Vector3 differenceInPosition = (transform.parent.position - ballLastPosition).normalized * 50f;
Quaternion rotation = Quaternion.LookRotation(differenceInPosition);
transform.rotation = rotation;
ballLastPosition = transform.parent.position;
}
}
但是上述方法均无法正常工作,因此我希望您能提出其他更好的建议。
编辑:总体而言,我正在尝试实现以下目标: Catch up - Ketchapp - Highscore 1274
答案 0 :(得分:0)
Unity提供了一个有关滚动和移动3d球的教程系列,可以帮助您弄清楚问题的基础。希望对您有所帮助。