본문 바로가기
스파르타 내배캠

스파르타 내배캠 Unity 3기 - 54

by LemongO 2024. 3. 28.

 

 

파츠 분할

 

기존에 생각했던 방식은 다음과 같았다.
상체 = 무기 / 하체 = 이동

 

하지만 그러기엔 너무 단순하고 재미요소도 떨어진다고 생각했기 때문에 무기파츠를 아예 분리 시키기로 했다.

레퍼런스 게임이었던 아머드코어6와 마찬가지로 양팔, 양어깨에 무장을 따로 달 수 있는 구조로 만들어보기로 했다.

 

 

일단 파츠를 분할시킨다.

 

Lower는 기존과 같다.

Upper는 모델링 자체가 무기가 사라졌고 무기 사용로직을 없앴다.

Weapon은 분리되어 추가되었고 다음과 같은 구조를 가진다.

 

public class WeaponPart : BasePart
{
    [SerializeField] Transform[] _muzzlePoints;
    [SerializeField] LayerMask _groundLayer;    

    public WeaponBase Weapon { get; private set; }

    public override void Setup(Define.PartsType type, Module module)
    {
        base.Setup(type, module);
        Weapon = GetComponent<WeaponBase>();
        Weapon.Setup(ID, type, _groundLayer);
    }

    public void UseWeapon() => Weapon.UseWeapon(_muzzlePoints);
}

 

투사체가 발사될 muzzlePoints

락온을 하지 않았을 때 유도방식의 무기가 땅이나 벽을 조준할 때 해당 방향으로 공격을 위한 Ray 검출용 groundLayer

 

실제 무기 로직을가진 WeaponBase

InputAction을 통해 무기를 사용할 UseWeapon 메서드

 

그리고 Weapon.Setup 에서 ID를 넘겨주는데
이것은 모든 파츠가 자신의 ID를 가지고 있고 해당 ID의 무기를 꺼낼 수 있게 해준다.

그 이외에 다른 모든 파츠들도 자신의 ID를 가지고 있음으로써 스탯 정보를 알아낼 수 있도록 해줬다.

public class BasePart : MonoBehaviour
{
    public int ID { get; private set; }

    [SerializeField] GameObject[] _boosterEffects;

    protected Module Module { get; private set; }
    protected Define.PartsType _type;

    public void SetID(int id) => ID = id;

    public virtual void Setup(Define.PartsType type, Module module)
    {
        Module = module;
        _type = type;
    }

    public virtual void BoostOnOff(bool isActive)
    {
        foreach (var effect in _boosterEffects)
            effect.SetActive(isActive);
    }
}

 

 

그리고 이번 변경점의 최대이슈는 무기파츠인데 아무래도 무기파츠가 4군데에 들어가기 때문에 UI도 많은 변화를 겪었다.

 

모듈 파츠 선택창에 Weapon_Arm / Weapon_Shoulder가 생겼으며

 

Arm Part는 하나의 창에서 좌,우 선택으로 파츠를 선택할 수 있도록 해줬다.

좌,우 파츠 능력치도 보여진다.

 

Shoulder Part역시 마찬가지

 

 

키 역시 마우스 좌,우클릭 Q,E 로 무장을 각각 쓸 수 있도록 바꿔주었다.