Итак, каждый раз, когда скелет попадает в игрока / персонажа. Это не будет показывать слово «ХИТ!». Что я сделал не так?
ИНСПЕКТОР ИЗОБРАЖЕНИЯ ИГРОКА
ИНСПЕКТОР ИЗОБРАЖЕНИЯ СКЕЛЕТА
ИЗОБРАЖЕНИЕ ИЕРАРХИИ
Скелет врага скелета
private Rigidbody2D myBody;
[Header("Movement")]
public float moveSpeed;
private float minX, maxX;
public float distance;
public int direction;
private bool patrol, detect;
private Transform playerPos;
private Animator anim;
[Header("Attack")]
public Transform attackPos;
public float attackRange;
public LayerMask playerLayer;
public int damage;
//sound
Пробуждение
void Awake()
{
anim = GetComponent<Animator>();
playerPos = GameObject.Find("George").transform;
myBody = GetComponent<Rigidbody2D>();
}
ОТКРЫТЫЙ СТАРТ
private void Start()
{
maxX = transform.position.x + (distance);
minX = maxX - distance;
//if (Random.value > 0.5) direction = 1;
//else direction = -1;
}
ОБНОВЛЕНИЕ ОБНОВЛЕНИЙ
void Update()
{
if (Vector3.Distance(transform.position, playerPos.position) <= 4.0f) patrol = false;
else patrol = true;
}
ОБНОВЛЕНО ОБНОВЛЕНО
private void FixedUpdate()
{
if (anim.GetBool("Death"))
{
myBody.velocity = Vector2.zero;
GetComponent<Collider2D>().enabled = false;
myBody.isKinematic = true;
anim.SetBool("Attack", false);
return;
}
if (myBody.velocity.x > 0)
{
transform.localScale = new Vector2(1f, transform.localScale.y);
anim.SetBool("Attack", false);
}
else if
(myBody.velocity.x < 0) transform.localScale = new Vector2(-1f, transform.localScale.y);
if (patrol)
{
detect = false;
switch (direction)
{
case -1:
if (transform.position.x > minX)
myBody.velocity = new Vector2(-moveSpeed, myBody.velocity.y);
else
direction = 1;
break;
case 1:
if (transform.position.x < maxX)
myBody.velocity = new Vector2(moveSpeed, myBody.velocity.y);
else
direction = -1;
break;
}
}
else
{
if (Vector2.Distance(playerPos.position, transform.position) >= 1.0f)
{
if (!detect)
{
detect = true;
anim.SetTrigger("Detect");
myBody.velocity = new Vector2(0, myBody.velocity.y);
}
if (anim.GetCurrentAnimatorStateInfo(0).IsName("Detect")) return;
Vector3 playerDir = (playerPos.position - transform.position).normalized;
if (playerDir.x > 0)
myBody.velocity = new Vector2(moveSpeed + 0.4f, myBody.velocity.y);
else
myBody.velocity = new Vector2(-(moveSpeed + 0.4f), myBody.velocity.y);
}
else if (Vector2.Distance(playerPos.position, transform.position) <= 1.0)
{
myBody.velocity = new Vector2(0, myBody.velocity.y);
anim.SetBool("Attack", true);
}
}
}
VOID ATTACK
public void Attack()
{
myBody.velocity = new Vector2(0, myBody.velocity.y);
Collider2D attackPlayer = Physics2D.OverlapCircle(attackPos.position, attackRange, playerLayer);
if (attackPlayer == null)
{
if(attackPlayer.tag == "Player")
{
print("Hit!");
attackPlayer.gameObject.GetComponent<PlayerHealth>().TakeDamage(damage);
}
}
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(attackPos.position, attackRange);
}
СКРИПТ ЗДОРОВЬЯ ИГРОКА
VOID AWAKE
public int health = 100;
void Awake()
{
}
VOID UPDATE
void Update()
{
if (health < 1)
{
print("Dead");
}
}
VOID TAKE DAMAGE
public void TakeDamage(int damage)
{
FindObjectOfType<CameraShake>().ShakeItMedium();
health -= damage;
}
private void OnTriggerEnter2D(Collider2D target)
{
if(target.tag == "Fireball")
{
TakeDamage(25);
}
}