【发布时间】:2018-01-03 02:01:11
【问题描述】:
我的手机游戏中有多个球体连接到铰链关节。球体能够摆动并相互碰撞,从而导致其他球体摆动。我通过触摸球体并将其拖动到新位置来在球体中创建运动。放手应该会导致我刚刚移动的球体相应地摆动。
问题是我能够将球体移动到铰链提供的空间之外。我从不希望球体移动到他们无法使用铰链摆动的任何地方。我能够将球体从其原始位置移动多个单位/米,而理想情况下我不能将它们移动超过几厘米。如果我达到铰链的限制,球体应该会停止移动。
这是我控制球体运动的脚本代码:
GameObject selectedObject;
Vector3 screenPoint;
Vector3 offset;
void Update () {
if (Input.touchCount == 0)
{
return;
}
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began) // when screen is touched...
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenToWorldPoint(touch.position), Camera.main.transform.forward, out hit)) // ...cast a ray...
{
if (hit.collider.tag == "Sphere") //...and check if ray hits a sphere
{
selectedObject = hit.collider.gameObject;
screenPoint = Camera.main.WorldToScreenPoint(selectedObject.transform.position);
offset = selectedObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, screenPoint.z));
}
}
}
if (touch.phase == TouchPhase.Moved)
{
Vector3 touchPoint = new Vector3(touch.position.x, touch.position.y, screenPoint.z);
Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touchPoint) + offset;
selectedObject.transform.position = touchPosition;
}
}
非常感谢任何帮助!让我知道是否需要更多解释或显示有关问题的视频。
【问题讨论】:
标签: unity3d