- 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