탑뷰 슈팅 게임 미니 프로젝트

This commit is contained in:
2026-01-24 01:14:28 +09:00
parent 6753e7f013
commit 22b17ebff9
442 changed files with 165828 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
using System;
using UnityEngine;
public class EnemyController : MonoBehaviour
{
enum State
{
Spawning,
Moving,
Dying
}
[Range(0f, 10f)]
public float moveSpeed = 2f;
public Material flashMaterial;
public Material defaultMaterial;
public AudioClip hitSound;
public AudioClip deadSound;
GameObject target;
State state;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
//target = GameObject.Find("Player");
// target = GameObject.FindGameObjectWithTag("Player");
// state = State.Moving;
}
public void Spawn(GameObject target)
{
this.target = target;
state = State.Spawning;
GetComponent<Character>().Initalize();
GetComponent<Animator>().SetTrigger("Spawn");
Invoke("StartMoving", 1f);
GetComponent<Collider2D>().enabled = false;
}
void StartMoving()
{
GetComponent<Collider2D>().enabled = true;
state = State.Moving;
}
private void FixedUpdate()
{
if (state == State.Moving)
{
Vector2 direction = target.transform.position - transform.position;
transform.Translate(direction.normalized * (moveSpeed * Time.fixedDeltaTime), Space.World);
if (direction.x < 0)
{
GetComponent<SpriteRenderer>().flipX = true;
}
else if (direction.x > 0)
{
GetComponent<SpriteRenderer>().flipX = false;
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Hit");
if (collision.tag == "Bullet")
{
float d = collision.gameObject.GetComponent<Bullet>().damage;
if(GetComponent<Character>().Hit(d))
{
// 살아있을 때
Flash();
GetComponent<AudioSource>().PlayOneShot(hitSound);
}
else
{
// 죽었을 때
Die();
GetComponent<AudioSource>().PlayOneShot(deadSound);
}
}
}
void Flash()
{
GetComponent<SpriteRenderer>().material = flashMaterial;
Invoke("AfterFlash", 0.5f);
}
void AfterFlash()
{
GetComponent<SpriteRenderer>().material = defaultMaterial;
}
void Die()
{
state = State.Dying;
GetComponent<Animator>().SetTrigger("Die");
// 일정 시간이 지난 후 호출하는 함수
Invoke("AfterDying", 1.4f);
}
void AfterDying()
{
// Destroy(gameObject);
gameObject.SetActive(false);
}
// Update is called once per frame
void Update()
{
}
}