【问题标题】:Move object with hinge joint, but keep it connected to hinge用铰链关节移动物体,但保持与铰链的连接
【发布时间】: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


    【解决方案1】:

    我知道我来晚了,但您可以在要移动的对象上使用 AddForce()AddTorque() 方法,但只有在对象上有 RigidBody 时才有效。

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2021-09-09
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      相关资源
      最近更新 更多