0

I am working on a Snooker Game project in Unity3D. I have achieved the feels of snooker physics. But while taking the spin shoots it is doing some wired activity. I have added torque after adding force in certain direction. Can any one please suggest me what exactly I have missed.

Here is my code

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; } } } } 

Thank you advance

1
  • 1
    it is unclear what the problem is ("weird" can mean anything), and i'm afraid it'll probably be difficult to impossible to describe with words alone. Maybe if you could make a video that might help. Commented Dec 30, 2014 at 13:04

1 Answer 1

2

Finally I got the solution. Actually I have used the torque after adding force so it is not going at right direction as per spin. But it should be like Add Torque First and then Add Force at Position.

Here is the sample code. I hope this will help little bit other people regarding spin physics in 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; } } } } 

Thank You

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.