59.내일배움캠프 48일차 TIL <Unity 2D 클리커 게임 만들기 - 3> 06/17

정광훈(Unity_9기)·2025년 6월 17일

TIL (Today I Learned)

목록 보기
58/110
post-thumbnail

<게임 시작 시, 무기 장착 시키는 법>

<InventoryManager.cs>

    // 플레이어가 소유한 무기 리스트
    public List<PlayerWeapon> playerWeapons = new List<PlayerWeapon>();

    [Header("게임 시작 시 자동 장착될 무기")] // (SO 데이터 참조)
    [SerializeField] private WeaponData initialEquippedWeapon; // 초기 장착된 무기

   void Start()
    {
        // 초기 장착 무기 초기화
        // 이 시점에서 플레이어가 소유한 무기 리스트에 무기가 없으므로 null 반환
        PlayerWeapon initWeapon = GetPlayerWeapon(initialEquippedWeapon);

        if (initWeapon == null) // 초기 무기가 없을 때
        {
            // 인스펙터에서 할당한 무기 데이터를 소유 중인 무기 리스트에 추가
            AddNewWeapon(initialEquippedWeapon);
            // 그 무기를 리스트에서 다시 가져와서 initWeapon에 저장
            initWeapon = GetPlayerWeapon(initialEquippedWeapon);
        }

        EquipmentManager.Instance.EquipWeapon(initWeapon); // 초기 무기를 장착
    }
    
    public void AddNewWeapon(WeaponData weaponData) // 새로운 무기(기본 데이터) 추가
    {
        // 매개변수로 받아온 무기의 기본 데이터와 초기 레벨을 사용하여
        // 플레이어가 무기 리스트에 PlayerWeapon 클래스의 새 인스턴스(무기 틀)를 생성함
        PlayerWeapon newWeapon = new PlayerWeapon(weaponData, weaponData.weaponLevel);
        playerWeapons.Add(newWeapon); // 새로운 무기를 소유 중인 무기 리스트에 추가
    }

    // 소유 중인 무기 리스트에서 특정 WeaponData를 가진 PlayerWeapon 인스턴스를 찾는 메서드
    // 매개변수 data는 우리가 찾으려는 무기의 기본 데이터(SO)
    public PlayerWeapon GetPlayerWeapon(WeaponData data)
    {
        // 소유 중인 무기 리스트에서 PlayerWeapon의 weaponData가 매개변수(찾으려는 무기)의 데이터와 동일한지 비교
        // 조건을 만족하면 첫 번째 PlayerWeapon 인스턴스를 반환, 없으면 null 반환
        return playerWeapons.Find(w => w.weaponData == data);
    }

PlayerWeapon initWeapon = GetPlayerWeapon(initialEquippedWeapon);
처음에 변수를 선언할 겸 초기화 하기 위해 GetPlayerWeapon(initialEquippedWeapon)를 참조(가져옴)

그래서 초기에 initWeapon에는 아무 것도 참조되어있지 않기 때문에 null.
null일 때 초기 무기를 소유 중 무기 리스트에 추가.
추가 했으면 초기 무기를 장착 메서드에 참조.

playerWeapons.Find(w => w.weaponData == data);
playerWeapons 리스트를 순회하면서, Player 인스턴스무기가 참조하는 weaponData와
인스펙터로 추가한 무기 에셋(SO)이 같다면
첫 번째 Player 인스턴스(무기 틀)을 반환한다.

0개의 댓글