유니티 엔진 (Unity Engine)

어드레서블 시작하기(Get started with Addressables) 스터디 노트 8화 "프로파일"

원소랑 2023. 5. 31. 00:39

 

Addressable 학습 코스 링크
https://prf.hn/click/camref:1011lvz7h/pubref:study_addr/destination:https%3A%2F%2Flearn.unity.com%2Ftutorial%2Fmanage-builds-with-profiles%3Fuv%3D2022.3%26courseId%3D64255c01edbc2a268fb0b800%23

 

Manage builds with profiles - Unity Learn

In this tutorial, you will learn how the Addressables systems uses profiles to help you manage your built content for various purposes. By the end of this tutorial you will be able to: Explain profile variables and their notation Explain an addressable pro

learn.unity.com

 

<Loady Dungeons> 의 프로필을 사용하여 실제 게임에서 발생할 수 있는 시나리오와 유사한 실습 진행. <Loady Dungeons> 의 어드레서블 콘텐츠를 호스팅할 CDN이 있다고 가정하면 아래와 같이 경로를 설정할 수 있음.

 

Windows용 개발 빌드 : https://unity.com/LoadyDungeons/DEV_StandaloneWindows64/
Android 플랫폼 QA 빌드 : https://unity.com/LoadyDungeons/QA_Android/
iOS용 릴리스 빌드 : https://unity.com/LoadyDungeons/PROD_iOS/

 

하지만, 빌드 후 자동으로 업로드할 수 있는 Unity 에디터와 통합된 CDN이 없으므로 빌드된 콘텐츠를 수동으로 업로드한다고 가정. 로컬 디스크의 Unity 프로젝트 아래 "ServerData"라는 폴더에 저장되며, 이 폴더에는 각 빌드 대상에 대한 하위 폴더를 생성.

 

<Loady Dungeons> 프로필이 올바른 위치에 콘텐츠를 빌드하고 찾을 수 있도록 대괄호 표기법을 사용하여 프로필 경로 쌍 변수를 구성해본다.

 

애플리케이션의 이름인 <LoadyDungeons> 는 공용 정적 필드 UnityEditor.PlayerSettings.productName에 저장. 직접 새 Remote 경로 쌍(Pair)을 작성.

 

1. QA. Release 프로필 생성.

2. Remote 변수의 BuildPath 에 “ServerData/[BuildTarget]” 입력.

3. Remote 변수의 LoadPath 에 “https://unity.com/{UnityEditor.PlayerSettings.productName}/[RemoteHost]_[BuildTarget]” 입력.

4. 각 프로필들의 RemoteHost 변수 값만 수정되면 됨.

(여기서 RemoteHost 변수는, 앞 스터디 과정에서 "Create > Variable (All Profiles)" 로 생성한 변수)

 

Addressables Profile 값 검증 (Evaluate profile values)

Addressables Profile 을 셋팅한 후에 테스터를 제작해서 검증해보기.

테스터 코드 생성하고 아래 코드 추가.

"Assets/Editor/ProfileVariableTester.cs"

using System.Collections.Generic;
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;

class ProfileVariables
{
    public int count;
    public List<string> names;
    public List<string> values;
    public List<string> editorValues;

    public ProfileVariables(List<string> names)
    {
        this.count = names.Count;
        this.names = names;
        values = new List<string>(count);
        editorValues = new List<string>(count);
    }

    public override string ToString()
    {
        string message = string.Empty;
        for (int i = 0; i < count; i++)
        {
            message += $"{names[i]} = '{values[i]}' -> '{editorValues[i]}'\n";
        }

        return message;
    }
}

public class ProfileVariableTester
{
    [MenuItem("LoadyProfiles/Test Profile Variable")]
    private static void TestProfileVariable()
    {
        AddressableAssetSettings addressableAssetSettings = AddressableAssetSettingsDefaultObject.Settings;
        AddressableAssetProfileSettings profileSettings = addressableAssetSettings.profileSettings;
        string activeProfileID = addressableAssetSettings.activeProfileId;

        var variables = new ProfileVariables(profileSettings.GetVariableNames());

        for (int i = 0; i < variables.count; i++)
        {
            string variableName = variables.names[i];
            var value = profileSettings.GetValueByName(activeProfileID, variableName);
            variables.values.Add(value);

            var editorValue = profileSettings.EvaluateString(activeProfileID, value);
            variables.editorValues.Add(editorValue);
        }
        Debug.Log(variables);
    }
}

프로퍼티를 추가해서 생성된 메뉴를 클릭해서 테스트.

[MenuItem("LoadyProfiles/Test Profile Variable")]

Console 창에 모든 프로필 변수와 표기법으로 설정된 값들이 출력됨. <Loady Dungeons>를 빌드하고 실행하면 이 경로가 사용됨.

 

Editor 가 아닌 Runtime 시에 어드레서블 API 에서 Remote.LoadPath 값이 실제로 올바른지 확인하려면 아래처럼 코드를 추가/수정.

using System.Collections.Generic;
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;

using UnityEngine.AddressableAssets.Initialization;

class ProfileVariables
{
    public int count;
    public List<string> names;
    public List<string> values;
    public List<string> editorValues;
    public List<string> runtimeValues; // Runtime Value 추가

    public ProfileVariables(List<string> names)
    {
        this.count = names.Count;
        this.names = names;
        values = new List<string>(count);
        editorValues = new List<string>(count);
        runtimeValues = new List<string>(count); // Runtime Value 추가
    }

    public override string ToString()
    {
        string message = string.Empty;
        for (int i = 0; i < count; i++)
        {
            // Runtime Value 추가
            message += $"{names[i]} = '{values[i]}' -> '{editorValues[i]}' -> '{runtimeValues[i]}'\n";
        }

        return message;
    }
}

public class ProfileVariableTester
{
    [MenuItem("LoadyProfiles/Test Profile Variable")]
    private static void TestProfileVariable()
    {
        AddressableAssetSettings addressableAssetSettings = AddressableAssetSettingsDefaultObject.Settings;
        AddressableAssetProfileSettings profileSettings = addressableAssetSettings.profileSettings;
        string activeProfileID = addressableAssetSettings.activeProfileId;

        var variables = new ProfileVariables(profileSettings.GetVariableNames());

        for (int i = 0; i < variables.count; i++)
        {
            string variableName = variables.names[i];
            var value = profileSettings.GetValueByName(activeProfileID, variableName);
            variables.values.Add(value);

            var editorValue = profileSettings.EvaluateString(activeProfileID, value);
            variables.editorValues.Add(editorValue);

            // Runtime Value 추가
            var runtimeValue = AddressablesRuntimeProperties.EvaluateString(editorValue);
            variables.runtimeValues.Add(runtimeValue);
        }
        Debug.Log(variables);
    }
}

다음 학습 코스에서는 어드레서블 그룹과 프로파일을 사용하는 내용.


Addressable 학습 코스 링크
https://prf.hn/click/camref:1011lvz7h/pubref:study_addr/destination:https%3A%2F%2Flearn.unity.com%2Ftutorial%2Fmanage-builds-with-profiles%3Fuv%3D2022.3%26courseId%3D64255c01edbc2a268fb0b800%23

 

Manage builds with profiles - Unity Learn

In this tutorial, you will learn how the Addressables systems uses profiles to help you manage your built content for various purposes. By the end of this tutorial you will be able to: Explain profile variables and their notation Explain an addressable pro

learn.unity.com

Unity 2021 버전, 유니티 교과서
https://link.coupang.com/a/ZgsN8

 

2021 버전 완벽 대응 유니티 교과서 개정5판

COUPANG

www.coupang.com

(본문 링크로 유니티 교과서 구입 시, 일정액의 수수료를 제공받습니다. 감사합니다.)
Unity Asset Store
https://prf.hn/click/camref:1011lvz7h/pubref:store/destination:https%3A%2F%2Fassetstore.unity.com%2F

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

728x90
반응형