- Home /
Reverse Rotation on mesh collision
I have a set of scripts that control a few elements of gameplay: One that sends a ray, and detects if it hit a 'node'. another that handles the rotations that gets called by the first
The first script:
//Get the RotationHandler Script and call function to execute on ray trigger var hit : RaycastHit;
function Update () {
var ray : Ray = Camera.main.ScreenPointToRay(Vector3((Screen.width / 2),(Screen.height / 2)));
if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1)) {
if (Physics.Raycast (ray, hit, 10)) {
Debug.DrawLine (ray.origin, hit.point);
print("ray sent");
var otherObj : GameObject = hit.collider.gameObject;
/////////////////FIST NODE SET BLOCK///////////////////////////////////////////////////////////////////////// //This look at the object with the miniNode Tag and then does shit to it. if (otherObj.tag == "miniNode") { print("ray hit the miniONENode Tag");
//Find the EXTERNAL mini and main node object and assign them to local variables
var miniNode = GameObject.FindWithTag("miniNode");
var mainNode = GameObject.FindWithTag("mainNode");
//Generate Glow
//appy the LEFT rotation to miniNode & mainNode rotationHandler when left click is pressed
if (Input.GetMouseButtonDown(0)){
miniNode.GetComponent(theRotator).RotateObject(miniNode.transform, Vector3.up*-90, .5);
mainNode.GetComponent(theRotator).RotateObject(mainNode.transform, Vector3.up*-90, .5);
}
//appy the RIGHT rotation to miniNode & mainNode rotationHandler when RIGHT click is pressed
if (Input.GetMouseButtonDown(1)){
miniNode.GetComponent(theRotator).RotateObject(miniNode.transform, Vector3.up*90, .5);
mainNode.GetComponent(theRotator).RotateObject(mainNode.transform, Vector3.up*90, .5);
}
}
} //End of the Ray if statement
}//End of the Mouse down (0,1) statement
}//End of the Update Function
Rotation Script:
private var rotating = false;
function RotateObject (thisTransform : Transform, degrees : Vector3, seconds : float) { if (rotating) return; rotating = true;
rotateSound();
var startRotation = thisTransform.rotation;
var endRotation = thisTransform.rotation * Quaternion.Euler(degrees);
var t = 0.0;
var rate = 1.0/seconds;
while (t < 1.0) {
t += Time.deltaTime * rate;
thisTransform.rotation = Quaternion.Slerp(startRotation, endRotation, Mathf.SmoothStep(0.0, 1.0, t));
yield;
}
rotating = false;
}
Im really confused on how to implement a bumper script so that when a node's mesh hits another it will simply reverse the rotation and not allow for an overlap of the meshes.
Images of setup and overlap:
http://img406.imageshack.us/img406/4430/screenshot20100415at110.png
http://img686.imageshack.us/img686/8551/screenshot20100415at110u.png
Answer by StephanK · Apr 16, 2010 at 08:23 AM
You could use trigger colliders around your nodes and if a rotating node hits a trigger rotate it back to its original rotation.
Your answer
Follow this Question
Related Questions
How to rotate a mesh collider? 0 Answers
Giant colliders restricted to a set size? 0 Answers
Someone can help with Ray/Collide? 1 Answer
Having trouble getting a smooth collision with dynamic mesh collider 0 Answers
Better Collider for my Character 1 Answer