Fiore 393b538920 feat : bullet base 작성 완료
- 이동속도, 데미지, 라이프타임을 받음
- bulletdata를 받아 초기화 진행
- 발사 위치를 기준으로 목표 방향 세팅
- 테스트를 위해 초기값 임의로 작성

work in DEG-100 JIRA
2025-04-29 11:43:58 +09:00

73 lines
1.7 KiB
C#

using UnityEngine;
public struct BulletData
{
public Vector3 TargetPos;
public float Damage;
public float LifeTime;
public float Speed;
public BulletData(Vector3 targetPos, float damage, float lifeTime, float speed)
{
TargetPos = targetPos;
Damage = damage;
LifeTime = lifeTime;
Speed = speed;
}
}
[RequireComponent(typeof(Collider))]
public class BulletBase : MonoBehaviour
{
// 데이터
private float _speed = 5f;
private float _damage = 1f;
private float _lifeTime = 10f;
// 내부용
private Vector3 _direction = Vector3.forward;
private float _timer;
public virtual void Initialize(BulletData bulletData)
{
_speed = bulletData.Speed;
_damage = bulletData.Damage;
_lifeTime = bulletData.LifeTime;
// 발사 위치 기준 목표 방향만 계산
_direction = (bulletData.TargetPos - transform.position).normalized;
// 탄환이 바라보는 방향 세팅
transform.rotation = Quaternion.LookRotation(_direction);
_timer = 0f;
}
private void Update()
{
// 1) 이동
transform.position += _direction * (_speed * Time.deltaTime);
// 2) 수명 카운트
_timer += Time.deltaTime;
if (_timer >= _lifeTime)
{
DestroyBullet();
}
}
private void OnTriggerEnter(Collider other)
{
var character = other.GetComponent<CharacterBase>();
if (character != null)
{
character.TakeDamage(_damage);
DestroyBullet();
}
}
protected virtual void DestroyBullet()
{
Debug.Log("## Bullet destroyed");
Destroy(gameObject);
}
}