Guest User

Untitled

a guest
Jun 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1.  
  2. public var MoveSpeed : float = .1;
  3. public var AttackRange : float = 330;
  4. public var MinDistance : float = 40;
  5.  
  6. protected var players : GameObject[];
  7. protected var target : GameObject;
  8.  
  9. private var elapsedTime : float = 0;
  10. private var pos : Vector3;
  11. private var distance : float;
  12. private var transformRef : Transform;
  13. private var targetTransformRef : Transform;
  14.  
  15. function Start() {
  16.  
  17. /* Cache transform */
  18. transformRef = transform;
  19.  
  20. /* Cache position */
  21. pos = transformRef.position;
  22.  
  23. /* Get all players in the game */
  24. players = GameObject.FindGameObjectsWithTag("player");
  25.  
  26. if(players.length > 0) {
  27.  
  28. if(players[0]) {
  29.  
  30. target = players[0];
  31. distance = GetDistance(target);
  32. targetTransformRef = target.transform;
  33.  
  34. }
  35.  
  36. }
  37.  
  38. }
  39.  
  40. function FixedUpdate () {
  41.  
  42. /* Do I already have a target? */
  43. if(target == null) {
  44.  
  45. FindTarget();
  46.  
  47. }
  48.  
  49.  
  50. if(target != null ) {
  51.  
  52. /* Target's current position */
  53. var targetPos : Vector3 = targetTransformRef.position;
  54. var lookRotation : Quaternion = Quaternion.LookRotation(
  55. Vector3(targetPos.x, 0, targetPos.z) - Vector3(pos.x, 0, pos.z)
  56. );
  57.  
  58. /* Look at the target */
  59. transformRef.rotation = Quaternion.Slerp(transformRef.rotation, lookRotation, Time.deltaTime * 10);
  60. transform.position.y = 1.5;
  61.  
  62. /* How many degrees from facing the target am I? */
  63. var angle : float = Quaternion.Angle(transformRef.rotation, lookRotation);
  64.  
  65. var direction : Vector3 = (targetPos - pos);
  66. var dirSqrMag : float = direction.sqrMagnitude;
  67. var moveSpeedTmp : float = MoveSpeed;
  68.  
  69. /* Keep $x units away from target, back up if too close */
  70. if(dirSqrMag <= 16)
  71. moveSpeedTmp = MoveSpeed * (1 - Mathf.Clamp01(dirSqrMag / 16));
  72. else
  73. moveSpeedTmp = MoveSpeed * Mathf.Clamp01((dirSqrMag - 25) / (49-25));
  74.  
  75. var movementAmount : Vector3 = direction.normalized * Time.deltaTime * moveSpeedTmp ;
  76.  
  77. /* Reverse direction if too close */
  78. if(movementAmount.sqrMagnitude >= dirSqrMag) {
  79.  
  80. movementAmount = direction;
  81.  
  82. } else if(dirSqrMag < 16) {
  83.  
  84. movementAmount *= -1;
  85.  
  86. }
  87.  
  88. pos += movementAmount;
  89.  
  90. /* Cache the new position */
  91. pos.y = 1.5;
  92. rigidbody.MovePosition(pos);
  93. //transform.position.y = 1.5;
  94.  
  95. }
  96.  
  97. }
  98.  
  99. function CanSeeTarget(target) : boolean {
  100.  
  101. var hit : RaycastHit;
  102.  
  103. if(target && Physics.Linecast(transform.position, target.transform.position, hit)) {
  104.  
  105. return hit.transform == target.transform;
  106.  
  107. }
  108.  
  109. return false;
  110.  
  111. }
  112.  
  113.  
  114. function GetDistance(target) {
  115.  
  116. var distance = (target.transform.position - pos).sqrMagnitude;
  117. return distance;
  118.  
  119. }
  120.  
  121. function TargetInRange(distance) {
  122.  
  123. return distance < AttackRange ? true : false;
  124.  
  125. }
  126.  
  127. function FindTarget() {
  128.  
  129. yield WaitForSeconds(1);
  130.  
  131. /* Iterate over available players, get first target found */
  132. for(var player : GameObject in players) {
  133.  
  134. if(player) {
  135.  
  136. /* Cache distance calculation */
  137. var d = GetDistance(player);
  138.  
  139. /* Make sure target is in range and visible */
  140. if(TargetInRange(d) && CanSeeTarget(player)) {
  141.  
  142. /* Set target variables */
  143. distance = d;
  144. target = player;
  145. targetTransformRef = target.transform;
  146.  
  147. } else {
  148.  
  149. /* No target found */
  150. distance = 0;
  151. target = null;
  152. targetTransformRef = null;
  153.  
  154. }
  155.  
  156. }
  157.  
  158. }
  159.  
  160. }
  161.  
  162. function OnCollisionEnter(collision : Collision) {
  163.  
  164. if(collision.gameObject.layer == 12) {
  165.  
  166. print("WALL");
  167.  
  168. } else {
  169.  
  170. print(collision.gameObject.layer);
  171.  
  172. }
  173.  
  174. if(collision.gameObject.tag == gameObject.tag) {
  175.  
  176. Physics.IgnoreCollision(collision.collider, gameObject.collider);
  177.  
  178. }
  179.  
  180. }
Add Comment
Please, Sign In to add comment