【发布时间】:2018-09-23 02:03:19
【问题描述】:
我的 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
【问题讨论】:
标签: unity3d