2Dシューティング_ 敵のバグ修正
+ボタン押下でコードを確認できます!
エディタでアタッチし忘れている可能性が高いです。
- Enemy
- This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : Movement { //このスクリプトの役目 //追跡や攻撃などのAI部分 public bool Test;//後で消す private Transform player; private Vector3 playerLastPos, startPos, movementPos; [SerializeField] private float chaseSpeed = 0.8f, turningDelay = 1f; private float lastFollowTime, turningTimeDelay = 1f; private Vector3 tempScalse; private bool attacked; [SerializeField] private float damageCooldown = 1f; private float damageCooldownTimer; [SerializeField] private int damageAmount = 1; private Health enemyHealth; private void Start() { player = GameObject.FindWithTag("Player").transform; playerLastPos = player.position; startPos = transform.position; lastFollowTime = Time.time; turningTimeDelay *= turningDelay; enemyHealth = GetComponent<Health>(); } private void FixedUpdate() { if (!enemyHealth.IsAllive() || !player) { return; } TurnAround(); ChaseingPlayer(); } void ChaseingPlayer() { if (Test) { if (!attacked) { //関数を呼ぶ Chase(); } else { if (Time.time < damageCooldownTimer) { movementPos = startPos - transform.position; } else { attacked = false; } } } else { movementPos = startPos - transform.position; if (Vector3.Distance(transform.position, startPos) < 0.1f) { movementPos = Vector3.zero; } } CharacterMovement(movementPos.x, movementPos.y); } void Chase() { if (Time.time - lastFollowTime > turningTimeDelay) { playerLastPos = player.transform.position; lastFollowTime = Time.time; } if (Vector3.Distance(transform.position, playerLastPos) > 0.15f) { movementPos = (playerLastPos - transform.position).normalized * chaseSpeed; } else { movementPos = Vector3.zero; } } void TurnAround() { tempScalse = transform.localScale; if (Test) { if (player.position.x > transform.position.x) { tempScalse.x = Mathf.Abs(tempScalse.x); } if (player.position.x < transform.position.x) { tempScalse.x = -Mathf.Abs(tempScalse.x); } } else { if (startPos.x > transform.position.x) { tempScalse.x = Mathf.Abs(tempScalse.x); } if (startPos.x < transform.position.x) { tempScalse.x = -Mathf.Abs(tempScalse.x); } } transform.localScale = tempScalse; } private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Player")) { damageCooldownTimer = Time.time + damageCooldown; attacked = true; collision.GetComponent<Health>().TakeDamage(damageAmount); } } }