Example #1
0
    /**
     * @brief       캐릭터가 죽을 시 리스폰을 하는 코루틴 입니다.
     *
     * @param       playerObject        리스폰 시킬 플레이어 게임오브젝트
     * @param       _teamInfo           리스폰 시킬 플레이어의 팀 정보
     */
    IEnumerator CouroutinRespawn(GameObject playerObject, ETeamInfo _teamInfo)
    {
        // 플레이어 오브젝트가 없다면 코루틴 종료
        if (!playerObject)
        {
            Debug.LogError("Have not Player Information");
            yield break;
        }

        // 캐릭터를 잠시 비활성화 시킴
        playerObject.SetActive(false);

        // 설정된 리스폰 딜레이 시간만큼 기다림
        yield return(new WaitForSeconds(respawnDelay));

        // 플레이어 오브젝트의 최상위 부모를 가져옴
        Transform playerTransform = playerObject.transform;

        // 위치를 스타팅 지점으로 초기화
        playerTransform.position = startingList[(int)_teamInfo].position;
        // 캐릭터 회전값 초기화
        playerTransform.forward = startingList[(int)_teamInfo].forward;

        // 플레이어 컴포넌트를 가져옴
        UPlayer _playerComponent = playerObject.GetComponent <UPlayer>();

        if (_playerComponent)
        {
            // 플레이어의 체력 등 필요한 정보를 초기화
            _playerComponent.Initialize();
        }

        // 리스폰 시간이 지났다면 다시 활성화
        playerObject.SetActive(true);

        yield break;
    }