Search Unity

FPS.1.41 Enemy Moves Like Slender..

Discussion in 'Editor & General Support' started by Nick98, May 5, 2013.

  1. Nick98

    Nick98

    Joined:
    Mar 6, 2013
    Posts:
    11
    Link To The Problem Video http://www.youtube.com/watch?v=ipAsJbRZFtE&list=HL1367762851

    Link To The Eteeski Video http://www.youtube.com/watch?v=wxwQrVH15AM&list=PL7AE076AFAFD3C305

    Images:http://tmblr.co/Zz3vHskHZJLY

    http://tmblr.co/Zz3vHskHZ2RX

    My Problem can be shown better in The Video But I'll Explain It.My enemy Moves Like SlenderMan Right Left And Cant Be Killed.It seems Very Glitchy

    if the links dont work please inform me

    Scripts

    EnemyMovementScript

    Code (csharp):
    1. var currentCell : GameObject;
    2. var playerMovementScript : PlayerMovementScript;
    3. var playerTransform : Transform;
    4. var playerCell : GameObject;
    5. var goalDoor : GameObject;
    6. var shortestPathSoFar : float;
    7. @HideInInspector
    8. var waitToStart : int = 5;
    9. var maxMoveSpeed : float = 5;
    10. var minMoveSpeed : float = 1;
    11. var speedDamage : float = 0.5;
    12. var speedRecover : float = 1;
    13. var currentMoveSpeed : float = 5;
    14.  
    15. var randomizedCourse : boolean = false;
    16. var randomizeCourseVector : Vector3;
    17. var calculatedNewRandomizeCourseVector : boolean;
    18.  
    19. var lastPos : Vector3;
    20.  
    21. var viewAngle : float = 60;
    22. var aware : boolean = false;
    23. var unawareSpeed : float = 1;
    24.  
    25. function Awake ()
    26. {
    27.     shortestPathSoFar = Mathf.Infinity;
    28.     playerMovementScript = GameObject.FindWithTag("Player").GetComponent(PlayerMovementScript);
    29.     playerTransform = GameObject.FindWithTag("Player").transform;
    30.     waitToStart = 5;
    31.     randomizeCourseVector = transform.position;
    32.     lastPos = transform.position;
    33.     aware = false;
    34. }
    35.  
    36. function Update ()
    37. {
    38.     if (waitToStart <= 0)
    39.     {
    40.         playerCell = playerMovementScript.currentCell;
    41.         for (var doorCheckingNow : GameObject in currentCell.GetComponent(AIpathCellScript).doors)
    42.         {
    43.             for (var i : int = 0; i <= doorCheckingNow.GetComponent(AIpathDoorScript).cells.length - 1; i++)
    44.             {
    45.                 if (doorCheckingNow.GetComponent(AIpathDoorScript).cells[i] == playerCell)
    46.                 if (doorCheckingNow.GetComponent(AIpathDoorScript).doorsToCells[i] < shortestPathSoFar)
    47.                 {
    48.                     goalDoor = doorCheckingNow;
    49.                     shortestPathSoFar = doorCheckingNow.GetComponent(AIpathDoorScript).doorsToCells[i];
    50.                 }
    51.             }
    52.         }
    53.         shortestPathSoFar = Mathf.Infinity;
    54.     }
    55.     waitToStart -= 1;
    56.    
    57.     var hits : RaycastHit[];
    58.     var anyHit : boolean = false;
    59.     if (Vector3.Angle(transform.forward, playerTransform.position - transform.position) < viewAngle / 2  !aware)
    60.     {
    61.          hits = Physics.SphereCastAll(transform.position, transform.localScale.x / 3, playerTransform.position - transform.position, Vector3.Distance(transform.position, playerTransform.position));
    62.         for (var hit : RaycastHit in hits)
    63.         {
    64.             if (hit.transform.tag == "Level Parts")
    65.                anyHit = true;
    66.         }
    67.         if (!anyHit)
    68.             aware = true;
    69.     }
    70.     if (!aware)
    71.         goalDoor = null;
    72.    
    73.     if (!calculatedNewRandomizeCourseVector)
    74.     {
    75.         randomizeCourseVector = FindRandomSpotInCurrentCell();
    76.         calculatedNewRandomizeCourseVector = true;
    77.     }
    78.    
    79.     if (goalDoor)
    80.     if (!goalDoor.GetComponent(AIpathDoorScript).doorOpen)
    81.         goalDoor = null;
    82.        
    83.     if (currentCell != playerCell || playerCell == null || !aware)
    84.     {
    85.         if (randomizedCourse)
    86.          transform.position += (goalDoor.transform.position - transform.position).normalized * currentMoveSpeed * Time.deltaTime;
    87.         if (!randomizedCourse)
    88.         {
    89.           transform.position += (randomizeCourseVector - transform.position).normalized * currentMoveSpeed * Time.deltaTime;
    90.            if (Vector3.Distance(transform.position, randomizeCourseVector) < transform.localScale.x)
    91.            {
    92.                if (goalDoor)
    93.                     randomizedCourse = true;
    94.                 if (goalDoor == null)
    95.                     calculatedNewRandomizeCourseVector = false;
    96.            }
    97.         }
    98.     }    
    99.      if (playerCell == currentCell  aware)
    100.         transform.position += (playerTransform.position - transform.position).normalized * currentMoveSpeed * Time.deltaTime;
    101.        
    102.         if (currentMoveSpeed < maxMoveSpeed  aware)
    103.            currentMoveSpeed += speedRecover * Time.deltaTime;
    104.         if (currentMoveSpeed > maxMoveSpeed  aware)
    105.            currentMoveSpeed = maxMoveSpeed;
    106.            
    107.         if (currentMoveSpeed < unawareSpeed  !aware)
    108.             currentMoveSpeed += speedRecover * Time.deltaTime;
    109.         if (currentMoveSpeed > unawareSpeed  !aware)
    110.             currentMoveSpeed = unawareSpeed;
    111.  
    112.          transform.rotation = Quaternion.LookRotation(transform.position - lastPos);
    113.          lastPos = transform.position;
    114. }
    115.  
    116. function OnTriggerEnter (hitTrigger : Collider)
    117. {
    118.     if (hitTrigger.tag == "AIpathCell")
    119.     {
    120.         currentCell = hitTrigger.gameObject;
    121.         randomizedCourse = false;
    122.         calculatedNewRandomizeCourseVector = false;
    123.     }
    124. }
    125.  
    126. /*function OnTriggerStay (hitTrigger : Collider)
    127. {
    128.     if (hitTrigger.tag == "AIpathCell")
    129.     {
    130.      currentCell = hitTrigger.gameObject;
    131.     }
    132. }*/
    133.  
    134. function OnTriggerStay (hitTrigger : Collider)
    135. {
    136.     if (hitTrigger.tag == "Enemy"  hitTrigger.gameObject != gameObject)
    137.     {
    138.         if (currentMoveSpeed > minMoveSpeed)
    139.             currentMoveSpeed -= speedDamage;
    140.         transform.position += (transform.position - hitTrigger.transform.position).normalized * 0.1;
    141.     }
    142. }
    143.  
    144. function FindRandomSpotInCurrentCell ()
    145. {
    146.     return currentCell.transform.position + (currentCell.transform.rotation * Vector3(Random.Range(currentCell.transform.localScale.x * -0.5,currentCell.transform.localScale.x * 0.5),0,Random.Range(currentCell.transform.localScale.z * -0.5,currentCell.transform.localScale.z * 0.5)));
    147. }
    148.  

    EnemyBodyPartScript

    Code (csharp):
    1. var enemyBody : GameObject;
    2. var addForceVector : Vector3;
    3. var damageMultiplyer : float = 1;
    4.  
    5. function Update ()
    6. {
    7.     if (addForceVector != Vector3.zero  !enemyBody.GetComponent(EnemyBodyScript).enabled)
    8.     {
    9.         if (rigidbody)
    10.             rigidbody.AddForce(addForceVector);
    11.         else
    12.             transform.parent.rigidbody.AddForce(addForceVector);
    13.         addForceVector = Vector3.zero; 
    14.     }
    15. }
    16.  
    EnemyBodyScript

    Code (csharp):
    1. var moveDamp : float = 0.1;
    2. var parentToFollow : Transform;
    3. var parentLastPos : Vector3;
    4. var targetRotation : Quaternion;
    5. var turnSpeed : float = 10;
    6.  
    7. var velocityX : float;
    8. var velocityZ : float;
    9.  
    10. var parentScript : EnemyMovementScript;
    11. var walkAnimationString : String;
    12. var runAnimationString : String;
    13.  
    14. var enemyHealth : float = 1;
    15. var rigidbodies : Rigidbody[];
    16.  
    17. function Awake ()
    18. {
    19.     parentScript = transform.parent.GetComponent(EnemyMovementScript);
    20.     animation.wrapMode = WrapMode.Loop;
    21.     parentToFollow = transform.parent;
    22.     transform.parent = null;
    23. }
    24.  
    25. function Update ()
    26. {
    27.         transform.position.x = Mathf.SmoothDamp(transform.position.x, parentToFollow.position.x, velocityX, moveDamp);
    28.         transform.position.z = Mathf.SmoothDamp(transform.position.z, parentToFollow.position.z, velocityZ, moveDamp);
    29.        
    30.         var tempParentCurrentPos : Vector3 = parentToFollow.position;
    31.         var tempParentLastPos : Vector3 = parentLastPos;
    32.         tempParentCurrentPos.y = 0;
    33.         tempParentLastPos.y = 0;
    34.        
    35.         targetRotation = Quaternion.LookRotation(tempParentCurrentPos - tempParentLastPos);
    36.         parentLastPos = parentToFollow.position;
    37.        
    38.         transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, turnSpeed * Time.deltaTime);
    39.        
    40.         var hits : RaycastHit[];
    41.         hits = Physics.RaycastAll(Ray(transform.position + Vector3(0,100,0), Vector3.up * -1));
    42.         for (var i : int = 0; i < hits.length; i++)
    43.         {
    44.             var hit : RaycastHit = hits[i];
    45.             if (hit.transform.gameObject == parentToFollow.gameObject.GetComponent(EnemyMovementScript).currentCell)
    46.                 transform.position.y = hit.point.y;
    47.         }
    48.        
    49.         if (!animation.IsPlaying(walkAnimationString)  !parentScript.aware)
    50.         animation.Play(walkAnimationString);
    51.         if (!animation.IsPlaying(runAnimationString)  parentScript.aware)
    52.         animation.Play(runAnimationString);
    53.        
    54.         if (enemyHealth <= 0)
    55.         {
    56.             for (var rigidbodyFor in rigidbodies)
    57.                  rigidbodyFor.isKinematic = false;  
    58.             animation.enabled = false;
    59.             parentScript.enabled = false;
    60.             enabled = false;                 
    61.         }
    62. }  
    Also when i am near to the enemy,when i almost enter the maze the enemy starts to moving like slender and unit console appear that error(appears only when i amost been in the maze!!) :

    Code (csharp):
    1. NullReferenceException: Object reference not set to an instance of an object
    2. Boo.Lang.Runtime.RuntimeServices.InvokeBinaryOperator (System.String operatorName, System.Object lhs, System.Object rhs)
    3. EnemyMovementScript.Update () (at Assets/Assets/EnemyMovementScript.js:48)
    if you want any other script or something else please inform me quickly !!
     
    Last edited: May 5, 2013
  2. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    First off, I want to say thanks for giving so much information. :)

    I don't think this is a problem with the ragdoll, I think it's a problem with the script. Is your player capsule tagged as player? That would explain why it throws an error when trying to find the player.
     
  3. PolyMad

    PolyMad

    Joined:
    Mar 19, 2009
    Posts:
    2,350
    That's the funniest AI I've ever seen! Keep up the good work! $troll.png
     
  4. Nick98

    Nick98

    Joined:
    Mar 6, 2013
    Posts:
    11
    hhaaa thx :p
     
  5. Nick98

    Nick98

    Joined:
    Mar 6, 2013
    Posts:
    11
    yes my playercapsule is tagged as Player
     
  6. Nick98

    Nick98

    Joined:
    Mar 6, 2013
    Posts:
    11
    any other wrong you think..?