Unity3d中的自旋物理问题

Unity3d中的自旋物理问题,unity3d,Unity3d,我正在Unity3D从事一个斯诺克游戏项目。我已经达到了斯诺克物理的感觉。但在拍摄旋转镜头时,它正在进行一些有线活动。在向某个方向施加力后,我增加了扭矩。谁能告诉我我到底错过了什么 这是我的密码 using UnityEngine; using System.Collections; public class CueBall : MonoBehaviour { private enum SPIN{ nospin, leftspin,rightspin,topspin,bottomsp

我正在Unity3D从事一个斯诺克游戏项目。我已经达到了斯诺克物理的感觉。但在拍摄旋转镜头时,它正在进行一些有线活动。在向某个方向施加力后,我增加了扭矩。谁能告诉我我到底错过了什么

这是我的密码

using UnityEngine;
using System.Collections;

public class CueBall : MonoBehaviour {

    private enum SPIN{ nospin, leftspin,rightspin,topspin,bottomspin};

    private SPIN currentSpin = SPIN.topspin;

    private float cueStrength = 1000.0f;
    public Transform cueStick;

    // Use this for initialization
    void Start () {

        rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;

    }

    // Update is called once per frame
    void FixedUpdate () {


        if(Input.GetMouseButtonDown(0)){

                gameObject.rigidbody.drag = 0.6f;
                gameObject.rigidbody.mass = 1.2f;
                gameObject.rigidbody.angularDrag = 1.5f; 

            switch(currentSpin){


                case SPIN.topspin :

                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);
                rigidbody.AddTorque(Vector3.back * cueStrength );

                    break;

                case SPIN.bottomspin:

                        rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);
               rigidbody.AddTorque(Vector3.forward * cueStrength );

                    break;
            }

        }

    }
}

提前谢谢

我终于找到了解决办法。事实上,我已经使用了增加力后的扭矩,所以它并没有按照旋转的方向前进。但它应该像先增加扭矩,然后在位置上增加力一样

下面是示例代码。我希望这能帮助其他人了解unity3d中的自旋物理

using UnityEngine;
using System.Collections;

public class CueBall : MonoBehaviour {

    private enum SPIN{ nospin, leftspin,rightspin,topspin,bottomspin};

    private SPIN currentSpin = SPIN.topspin;

    private float cueStrength = 1000.0f;
    public Transform cueStick;

    // Use this for initialization
    void Start () {

        rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;

    }

    // Update is called once per frame
    void FixedUpdate () {


        if(Input.GetMouseButtonDown(0)){

                gameObject.rigidbody.drag = 0.6f;
                gameObject.rigidbody.mass = 1.2f;
                gameObject.rigidbody.angularDrag = 1.5f; 

            switch(currentSpin){

            case SPIN.topspin :

                    rigidbody.AddTorque(Vector3.back * cueStrength );
                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);

                    break;

            case SPIN.bottomspin:

                    rigidbody.AddTorque(Vector3.forward * cueStrength );
                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);

                    break;
            case SPIN.leftspin:

                    rigidbody.AddTorque(Vector3.up * cueStrength);
                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);

                break;
            case SPIN.rightspin:

                    rigidbody.AddTorque(Vector3.down * cueStrength );
                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);

                break;
            default : // no spin
                    // no required torque
                    rigidbody.AddForceAtPosition(cueStick.forward * cueStrength,transform.position,ForceMode.Acceleration);
                break;
            }

        }

    }
}

谢谢你

现在还不清楚问题是什么(“怪异”可能意味着什么),我恐怕很难用语言来描述。如果你能拍一段视频,也许会有帮助。