- Home /
Distance from rigid body and drag
I have the drag rigid body script, all I want to do is make it so you can only do this if you are close to the rigidbody and if you are your crosshair turns to a 2d image.. Help please and thank you! Heres my JS
var normalCollisionCount = 1;
var spring = 50.0;
var damper = 5.0;
var drag = 10.0;
var angularDrag = 5.0;
var distance = 0.2;
var throwForce = 500;
var throwRange = 1000;
var attachToCenterOfMass = false;
var other : Transform;
var crosshairFirstModeHorizontal : Texture2D;
private var springJoint : SpringJoint;
function Update ()
{
// Make sure the user pressed the mouse down
//var dist = Vector3.Distance(!hit.rigidbody.position, transform.position);
//if (dist < 1 ) {
if (!Input.GetMouseButtonDown (0))
return;
var mainCamera = FindCamera();
// We need to actually hit an object
var hit : RaycastHit;
if (!Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), hit, 100))
return;
// We need to hit a rigidbody that is not kinematic
if (!hit.rigidbody || hit.rigidbody.isKinematic)
return;
if (!springJoint)
{
var go = new GameObject("Rigidbody dragger");
var body : Rigidbody = go.AddComponent ("Rigidbody") as Rigidbody;
springJoint = go.AddComponent ("SpringJoint");
body.isKinematic = true;
}
springJoint.transform.position = hit.point;
if (attachToCenterOfMass)
{
var anchor = transform.TransformDirection(hit.rigidbody.centerOfMass) + hit.rigidbody.transform.position;
anchor = springJoint.transform.InverseTransformPoint(anchor);
springJoint.anchor = anchor;
}
else
{
springJoint.anchor = Vector3.zero;
}
springJoint.spring = spring;
springJoint.damper = damper;
springJoint.maxDistance = distance;
springJoint.connectedBody = hit.rigidbody;
StartCoroutine ("DragObject", hit.distance);
//}
}
function DragObject (distance : float)
{
var oldDrag = springJoint.connectedBody.drag;
var oldAngularDrag = springJoint.connectedBody.angularDrag;
springJoint.connectedBody.drag = drag;
springJoint.connectedBody.angularDrag = angularDrag;
var mainCamera = FindCamera();
while (Input.GetMouseButton (0))
{
var ray = mainCamera.ScreenPointToRay (Input.mousePosition);
springJoint.transform.position = ray.GetPoint(distance);
yield;
if (Input.GetMouseButton (1)){
springJoint.connectedBody.AddExplosionForce(throwForce,mainCamera.transform.position,throwRange);
springJoint.connectedBody.drag = oldDrag;
springJoint.connectedBody.angularDrag = oldAngularDrag;
springJoint.connectedBody = null;
}
}
if (springJoint.connectedBody)
{
springJoint.connectedBody.drag = oldDrag;
springJoint.connectedBody.angularDrag = oldAngularDrag;
springJoint.connectedBody = null;
}
}
function FindCamera ()
{
if (camera)
return camera;
else
return Camera.main;
}
This the the third question dealing with a modification to the DragRigidbody.js script in the last three days. Some unknows in your question.
First, what do you want to measure from and to for your distance. Camera position? Camera.near clip plane? Hit position? Pivot position of the object?
And I can only guess at what this means: "crosshair turns to a 2d image." Do you have code somewhere that is displaying and a crosshair? And you want that to change when? If the user is able to pick something up or if the user is dragging something?
Assu$$anonymous$$g you want the distance from the camera to the hit.point to be the measure, you can insert the following at line 32:
if (Vector3.Distance(hit.point, Camera.main.transform.position) < someValue)
return;
You will only be able to drag something if the distance between the camera and the point hit is less than 'someValue', where 'someValue' is either a constant you insert or a variable you define and initialize elsewhere.