- Home /
Making a surface have accurate friction
Got an issue I've been wracking my brain trying to figure out. I'm making a billiards game, and the balls need to have an accurate way of coming to a stop, so I tried playing around with the drag and angular drag properties in the RigidBody component, but never came up with anything even close to what I wanted. I then tried using physics materials, but I never saw that have any effect (I think its because physics materials only stop lateral motion, not rotation).
So, I am now trying to stop the balls motion by getting its motion vector and applying a constant force in the opposite direction until the motion stops. Right now, the pool balls will spin and move wildly around the table a moment or two after the scene starts. Below is my code, and any help would be greatly appreciated.
using UnityEngine;
using System.Collections;
public class PoolBall : MonoBehaviour {
private Rigidbody rb;
private ConstantForce cf;
private Vector3 lastPos;
private Vector3 currVeloc;
private float percentageDifferenceAllowed;
private PoolBall pBScriptGetter;
// Use this for initialization
void Start () {
rb = gameObject.GetComponent<Rigidbody>();
cf = gameObject.GetComponent<ConstantForce>();
lastPos = gameObject.transform.position;
pBScriptGetter = GetComponent<PoolBall>();
}
// Update is called once per frame
void Update () {
Vector3 currVeloc = rb.velocity;
if (lastPos != gameObject.transform.position)
{
cf.relativeTorque = -currVeloc * 0.5f;
}
pBScriptGetter.CompareVectors(lastPos, currVeloc, 5f);
lastPos = gameObject.transform.position;
}
void CompareVectors(Vector3 Vec1, Vector3 Vec2, float tolerance)
{
if (Vec1.sqrMagnitude - Vec2.sqrMagnitude == (Vec1.sqrMagnitude * percentageDifferenceAllowed))
{
cf.relativeTorque = Vector3.zero;
}
}
}
Your answer
Follow this Question
Related Questions
Distribute terrain in zones 3 Answers
Multiple Cars not working 1 Answer
Stacking physics objects? 1 Answer
Jumping with rigid body3d 1 Answer
how to keep a "ship" over a platform or rigidbody? 0 Answers