Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Enemy : MonoBehaviour {
  6.  
  7. private readonly float LookedDistance = 2f;
  8. private Player player;
  9. private CharacterControl cc;
  10.  
  11. public enum Status {
  12. None,
  13. Warning,
  14. Discovery
  15. };
  16.  
  17. public Status mystatus;
  18.  
  19. public GameObject NoticeObject;
  20.  
  21. // Use this for initialization
  22. void Start () {
  23. cc = GetComponent<CharacterControl> ();
  24. player = GameObject.Find ("Player").GetComponent<Player> ();
  25. SetCallback (CreateNotice);
  26. }
  27.  
  28. // Update is called once per frame
  29. void Update () {
  30. Search ();
  31. }
  32.  
  33. public float getDistance () {
  34. Vector3 dv = player.transform.position - transform.position;
  35. return Mathf.Pow ((dv.x * dv.x + dv.y * dv.y + dv.z * dv.z), 0.5f);
  36. }
  37.  
  38. public void Search () {
  39.  
  40. if (mystatus != Status.Discovery) {
  41.  
  42. // 目線
  43. RaycastHit hit;
  44. if (Physics.Raycast (transform.position, transform.forward * LookedDistance, out hit)) {
  45. if (hit.collider.tag == "Player") {
  46. if (hit.distance < LookedDistance / 2f) {
  47. OnChangeStatus (Status.Discovery);
  48. } else {
  49. OnChangeStatus (Status.Warning);
  50. }
  51. }
  52. } else {
  53. OnChangeStatus (Status.None);
  54. }
  55.  
  56. // 距離と足音
  57. if (getDistance () < LookedDistance) {
  58. if (player.getWalkVolumeStatus () == Volume.Small)
  59. OnChangeStatus (Status.Warning);
  60. if (player.getWalkVolumeStatus () == Volume.Loud)
  61. OnChangeStatus (Status.Discovery);
  62. } else {
  63. OnChangeStatus (Status.None);
  64. }
  65. } else {
  66.  
  67. transform.LookAt (player.transform.position);
  68.  
  69. if (getDistance () > LookedDistance) {
  70. OnChangeStatus (Status.None);
  71. }
  72. }
  73.  
  74. print (mystatus);
  75. }
  76.  
  77. public delegate void Callback (Status st);
  78. public Callback callback;
  79.  
  80. public void SetCallback (Callback c) {
  81. callback = c;
  82. }
  83.  
  84. public void OnChangeStatus (Status st) {
  85. mystatus = st;
  86. if (mystatus != Status.None) {
  87. if (callback != null) {
  88. callback (mystatus);
  89. }
  90. }
  91. }
  92.  
  93. public void CreateNotice (Status st) {
  94. if (transform.FindChild ("Notice(Clone)") != null) {
  95. transform.FindChild ("Notice(Clone)").GetComponent<Notice> ().ChangeStatus (st);
  96. return;
  97. }
  98.  
  99. GameObject obj = Instantiate (NoticeObject);
  100. obj.transform.SetParent (transform);
  101. obj.transform.localPosition = Vector3.up * (cc.getHeight () + 1f);
  102. obj.GetComponent<Notice> ().Created (st);
  103. }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement