1인 개발/Push And Slash

푸쉬앤슬래시 개인 프로젝트 10일차

잼잼재미 2024. 5. 16. 03:34

구현 내용


1. 인벤토리 캐릭터 정보 구현


 

현재 장착 캐릭터의 각각 스탯 text를 연결

 

 

2. 공격 시, 카메라 진동 효과 구현


 

https://kkln2486.tistory.com/194

 

카메라 진동 효과

position 변경 방법 가장 일반적으로 사용하는 방법 MainCamera의 psition을 랜덤하게 이동 스크립트 [SerializeField] private float _shakeAmount = 3.0f; [SerializeField] private float _shakeTime = 1.0f; private void Start() { StartCo

kkln2486.tistory.com

 

public IEnumerator COShake(float shakeAmount, float shakeTime)
{
    float timer = 0;
    while (timer <= shakeTime)
    {
        Camera.main.transform.rotation = Quaternion.Euler(_originRotation + (Vector3)UnityEngine.Random.insideUnitCircle * shakeAmount);
        timer += Time.deltaTime;
        yield return null;
    }
    Camera.main.transform.rotation = Quaternion.Euler(_originRotation);
}

 

기본 공격과 스킬 공격의 진동 효과를 다르게 적용

 

 

3. Player의 공격 Effect 적용


 

 

 

Player의 자식 오브젝트에 기본 공격, 스킬에 해당하는 Effect particle system 을 넣어주고, 각각 공격 시, particle system을 실행하도록 구현했다.

 

 

if (other.CompareTag("Enemy"))
{
    Vector3 contactPoint = other.ClosestPointOnBounds(transform.position);
    _effectFixedPosition.transform.position = contactPoint;
    _attackParticleSystem.Play();
    other.GetComponent<EnemyController>().IsHit_attack = true;
}

 

콜라이더가 충돌할 때, ClosestPointOnBounds 함수로 적과 가장 가까운 position을 구해서 particle system의 위치를 설정했다.

 

 

 

Effect가 Player의 자식으로 있기 때문에, particle system이 재생되는 순간에도 Player의 움직임에 따라서 움직이기 때문에 Effect 효과가 자연스럽지 않았다.

 

 

private void Update()
{
    transform.position = _position;
    transform.rotation = Quaternion.Euler(_rotation);
}

 

자식 오브젝트의 position과 rotation이 부모 오브젝트와 독립적으로 고정하기 위해 스크립트를 작성했다.

 

 

 

회고


로비씬의 인벤토리와 상점을 구현하기 위해 추가적인 캐릭터 생성이 필요했다. 그래서 추가 캐릭터를 생성하기 전, 기본 캐릭터의 공격에서 카메라 진동 효과와 Effect 효과를 추가했다. 이 두가지만 추가한 것 만으로, 게임의 퀄리티가 많이 올라갔다. 이제 추가로 기본 캐릭터를 바탕으로 여러가지 캐릭터를 추가 생성하고 각각 능력치를 설정하는 작업을 하도록 하겠다!