적군 구현
This commit is contained in:
42
Assets/Scripts/Enemy.cs
Normal file
42
Assets/Scripts/Enemy.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class Enemy: LivingEntity
|
||||
{
|
||||
private SpriteRenderer _spriteRenderer;
|
||||
private GameObject _player;
|
||||
private Player _playerScript;
|
||||
|
||||
public float speed = 20f;
|
||||
public int attackDamage = 1;
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
{
|
||||
if (other.gameObject.CompareTag("Player"))
|
||||
{
|
||||
_playerScript.Damage(attackDamage);
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_player = GameObject.FindGameObjectsWithTag("Player")[0];
|
||||
_playerScript = _player.GetComponent<Player>();
|
||||
_spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
Vector2 direction = transform.position - _player.transform.position;
|
||||
var rad2Deg = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
|
||||
transform.rotation = Quaternion.Euler(0, 0, rad2Deg + 180);
|
||||
|
||||
transform.Translate(direction.normalized * (Time.deltaTime * speed * -1));
|
||||
}
|
||||
|
||||
protected override void OnDamaged(float damage)
|
||||
{
|
||||
var spriteRenderer = _spriteRenderer;
|
||||
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Enemy.cs.meta
Normal file
3
Assets/Scripts/Enemy.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 625c2fb5b495454296dab3fbfa13b65c
|
||||
timeCreated: 1776450504
|
||||
@@ -1,11 +1,14 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
public class LivingEntity : MonoBehaviour
|
||||
public abstract class LivingEntity : MonoBehaviour
|
||||
{
|
||||
public float health;
|
||||
|
||||
protected abstract void OnDamaged(float damage);
|
||||
public void Damage(float amount)
|
||||
{
|
||||
OnDamaged(amount);
|
||||
health -= amount;
|
||||
if (health <= 0)
|
||||
{
|
||||
@@ -16,8 +19,7 @@ public class LivingEntity : MonoBehaviour
|
||||
{
|
||||
if (other.gameObject.layer == LayerMask.NameToLayer("Bullet"))
|
||||
{
|
||||
Destroy(gameObject);
|
||||
other.gameObject.SetActive(false);
|
||||
Damage(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
public class Player : MonoBehaviour
|
||||
public class Player : LivingEntity
|
||||
{
|
||||
private Camera _camera;
|
||||
private Queue<GameObject> _bulletPool = new Queue<GameObject>();
|
||||
@@ -17,9 +18,12 @@ public class Player : MonoBehaviour
|
||||
public float fireRate = 0.1f; // 총알 발사 간격 (0.1초마다 1발)
|
||||
private float _fireTimer; // 발사 타이머
|
||||
private bool _isShooting; // 발사 버튼을 누르고 있는지 여부
|
||||
private SpriteRenderer _spriteRenderer;
|
||||
|
||||
void Start()
|
||||
private void Start()
|
||||
{
|
||||
health = 20.0f;
|
||||
_spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
_camera = Camera.main;
|
||||
|
||||
// 처음 클릭 시 즉시 발사되도록 타이머 초기화
|
||||
@@ -40,7 +44,7 @@ public class Player : MonoBehaviour
|
||||
private void FixedUpdate()
|
||||
{
|
||||
var readValue = InputManager.InputSystem.Player.Move.ReadValue<Vector2>();
|
||||
var moveDir = new Vector3(readValue.x, readValue.y, 0);
|
||||
var moveDir = new Vector3(readValue.x, readValue.y, 0).normalized;
|
||||
transform.position += moveDir * (Time.fixedDeltaTime * moveSpeed);
|
||||
backGround.transform.position = transform.position;
|
||||
}
|
||||
@@ -111,4 +115,21 @@ public class Player : MonoBehaviour
|
||||
InputManager.InputSystem.Player.Click.canceled -= OnShootCanceled;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDamaged(float damage)
|
||||
{
|
||||
StartCoroutine(DamageEffect());
|
||||
}
|
||||
|
||||
private IEnumerator DamageEffect()
|
||||
{
|
||||
var originalColor = _spriteRenderer.color;
|
||||
var alphaEdited = _spriteRenderer.color;
|
||||
alphaEdited.a = 0.5f;
|
||||
_spriteRenderer.color = alphaEdited;
|
||||
moveSpeed = 50;
|
||||
yield return new WaitForSeconds(0.5f); // 0.1초 동안 유지
|
||||
_spriteRenderer.color = originalColor; // 원래 색상으로 복원
|
||||
moveSpeed = 20;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user