Enemy.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Random = UnityEngine.Random;
  5. public class Enemy : MonoBehaviour {
  6. [SerializeField]
  7. private int EnemyHp;
  8. private int maxHp;
  9. [SerializeField]
  10. private int level;
  11. private int exp;
  12. public int Exp { get { return exp; } }
  13. private bool battle;
  14. Animator anim;
  15. private bool isalive;
  16. public bool IsAlive { get { return isalive; } }
  17. private Player target;
  18. [SerializeField]
  19. private int damage;
  20. [SerializeField]
  21. private GameObject Coin;
  22. public void Init(int turn,int lv)
  23. {
  24. level = Random.Range(lv-1<1?1:lv-1, lv + 4);
  25. EnemyHp = 10 + level * 10;
  26. maxHp = EnemyHp;
  27. exp = (level-1) * 2 + 20;
  28. battle = false;
  29. isalive = true;
  30. damage = Random.Range(level, level*3+turn);
  31. Debug.Log(level+" HP"+EnemyHp+", exp"+exp+", Damage:"+damage);
  32. StartCoroutine(move());
  33. // Enemy_UI.instance.gameObject.SetActive(true);
  34. }
  35. void Start () {
  36. anim = GetComponent<Animator>();
  37. Enemy_UI.instance.show();
  38. Enemy_UI.instance.GetComponent<RectTransform>().anchoredPosition = Camera.main.WorldToScreenPoint(transform.position + new Vector3(0, 0.6f, 0)) / Enemy_UI.instance.UIscale;
  39. }
  40. IEnumerator move()
  41. {
  42. while (!battle)
  43. {
  44. transform.position += new Vector3(-0.02f, 0, 0);
  45. yield return null;
  46. }
  47. }
  48. IEnumerator Attack()
  49. {
  50. while (isalive && target.IsAlive)
  51. {
  52. anim.SetTrigger("Attack");
  53. target.Damage(damage);
  54. yield return new WaitForSeconds(2);
  55. }
  56. if (!target.IsAlive) Dead(0,false);
  57. }
  58. private void Update()
  59. {
  60. if (target!=null && !isalive)
  61. {
  62. if(!target.GetComponent<Animator>().GetBool("Battle"))
  63. transform.position += new Vector3(-0.01f, 0, 0);
  64. }
  65. Enemy_UI.instance.level.text = "Lv." + level;
  66. Enemy_UI.instance.hpbar.fillAmount = (float)EnemyHp / (float)maxHp;
  67. Enemy_UI.instance.GetComponent<RectTransform>().anchoredPosition = Camera.main.WorldToScreenPoint(transform.position + new Vector3(0, 0.6f, 0)) / Enemy_UI.instance.UIscale;
  68. }
  69. public void Damage(int damage)
  70. {
  71. EnemyHp -= damage;
  72. anim.SetTrigger("Damage");
  73. if (EnemyHp <= 0)
  74. {
  75. Dead(4,true);
  76. EnemyController.instance.TurnPlus();
  77. }
  78. }
  79. void Dead(float t,bool drop)
  80. {
  81. if (drop)
  82. {
  83. target.Price += level * 10;
  84. Instantiate(Coin, transform.position, Quaternion.LookRotation(Vector3.up));
  85. }
  86. isalive = false;
  87. anim.SetBool("Dead", true);
  88. Destroy(gameObject, t);
  89. GetComponent<Collider>().enabled = false;
  90. StartCoroutine(move());
  91. Enemy_UI.instance.hid();
  92. }
  93. private void OnTriggerEnter(Collider other)
  94. {
  95. if (other.tag == "Player")
  96. {
  97. anim.SetBool("Battle", true);
  98. target = other.GetComponent<Player>();
  99. battle = true;
  100. StartCoroutine(Attack());
  101. }
  102. }
  103. }