Advertisement
Guest User

Untitled

a guest
May 27th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class MissileLaunch : MonoBehaviour {
  5. public Transform target; // цель ракеты
  6. public float speed; // скорость ракеты
  7. public GameObject explosionPrefab;
  8. public float turnSpeed; //скорость поворота ракеты
  9. public float explosionTime; //время полета до самоуничтожения
  10. private Transform _thisTransform;
  11. public void Awake()
  12. {
  13. _thisTransform = transform;
  14. }
  15.  
  16. public void Update()
  17. {
  18. // уменьшаем таймер
  19. explosionTime -= Time.deltaTime;
  20.  
  21. // если время таймера истекло, то взрываем ракету
  22. if (explosionTime <= 0)
  23. {
  24. Explode();
  25. return;
  26. }
  27.  
  28.  
  29. // величина движения вперед
  30. Vector3 movement = _thisTransform.forward * speed * Time.deltaTime;
  31.  
  32. // если указана цель
  33. if (target != null)
  34. {
  35. // направление на цель
  36. Vector3 direction = target.position - _thisTransform.position;
  37.  
  38. // максимальный угол поворота в текущий кадр
  39. float maxAngle = turnSpeed * Time.deltaTime;
  40.  
  41. // угол между направлением на цель и направлением ракеты
  42. float angle = Vector3.Angle(_thisTransform.forward, direction);
  43.  
  44. if (angle <= maxAngle)
  45. {
  46.  
  47. // угол меньше максимального, значит поворачиваем на цель
  48. _thisTransform.forward = direction.normalized;
  49. }
  50. else
  51. {
  52. //сферическая интерполяция направления с использованием максимального угла поворота
  53. _thisTransform.forward = Vector3.Slerp(_thisTransform.forward, direction.normalized, maxAngle / angle);
  54. }
  55.  
  56. // расстояние до цели
  57. float distanceToTarget = direction.magnitude;
  58.  
  59. // если расстояние мало, то создаем взрыв
  60. if (distanceToTarget < movement.magnitude)
  61. {
  62. Explode();
  63. return;
  64. }
  65. }
  66.  
  67. // двигамет ракету вперед
  68. _thisTransform.position += movement;
  69. }
  70.  
  71. public void Explode()
  72. {
  73. // if (explosionPrefab != null)
  74. {
  75. // Instantiate(explosionPrefab, _thisTransform.position, _thisTransform.rotation);
  76. }
  77. // уничтожаем ракету
  78. Destroy(gameObject);
  79. }
  80.  
  81. // взрываем при коллизии
  82. public void OnCollisionEnter()
  83. {
  84. Explode();
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement