2Dシューティング_ 敵のバグ修正

+ボタン押下でコードを確認できます!

コピペしても正しく動かない場合は
エディタでアタッチし忘れている可能性が高いです。

Enemy
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);
}
}
}
view raw Enemy4.cs hosted with ❤ by GitHub