Advertisement
Boomsma95

Tutorial Script: DontGoTroughThings

Mar 26th, 2013
841
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma strict
  2.  
  3. var layerMask : LayerMask; //make sure we aren't in this layer
  4. var skinWidth : float = 0.1; //probably doesn't need to be changed
  5. var skipFixedUpdates : int = 0;
  6. private var skips : int;
  7. private var minimumExtent : float;
  8. private var partialExtent : float;
  9. private var sqrMinimumExtent : float;
  10. private var previousPosition : Vector3;
  11. private var myRigidbody : Rigidbody;
  12. //initialize values
  13. function Awake() {
  14.    myRigidbody = rigidbody;
  15.    previousPosition = myRigidbody.position;
  16.    minimumExtent = Mathf.Min(Mathf.Min(collider.bounds.extents.x, collider.bounds.extents.y), collider.bounds.extents.z);
  17.    partialExtent = minimumExtent*(1.0 - skinWidth);
  18.    sqrMinimumExtent = minimumExtent*minimumExtent;
  19. }
  20.  
  21. function OnEnable() {
  22.     myRigidbody = rigidbody;
  23.     previousPosition = myRigidbody.position;
  24.     minimumExtent = Mathf.Min(Mathf.Min(collider.bounds.extents.x, collider.bounds.extents.y), collider.bounds.extents.z);
  25.     partialExtent = minimumExtent*(1.0 - skinWidth);
  26.     sqrMinimumExtent = minimumExtent*minimumExtent;
  27. }
  28.  
  29. function FixedUpdate() {
  30.     if(skips >= skipFixedUpdates)
  31.     {
  32.         skips = 0;
  33.         //have we moved more than our minimum extent?
  34.         var movementThisStep : Vector3 = myRigidbody.position - previousPosition;
  35.         var movementSqrMagnitude : float = movementThisStep.sqrMagnitude;
  36.         if (movementSqrMagnitude > sqrMinimumExtent) {
  37.             var movementMagnitude : float = Mathf.Sqrt(movementSqrMagnitude);
  38.             var hitInfo : RaycastHit;
  39.             //check for obstructions we might have missed
  40.             if (Physics.Raycast(previousPosition, movementThisStep, hitInfo, movementMagnitude, layerMask.value))
  41.                 myRigidbody.position = hitInfo.point - (movementThisStep/movementMagnitude)*partialExtent;
  42.         }
  43.         previousPosition = myRigidbody.position;
  44.     }
  45.     else
  46.     {
  47.         skips += 1;
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement