<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);
}
}
다음 학습 코스에서는 어드레서블 그룹과 프로파일을 사용하는 내용.
Unity 2021 버전, 유니티 교과서
https://link.coupang.com/a/ZgsN8
(본문 링크로 유니티 교과서 구입 시, 일정액의 수수료를 제공받습니다. 감사합니다.)
Unity Asset Store
https://prf.hn/click/camref:1011lvz7h/pubref:store/destination:https%3A%2F%2Fassetstore.unity.com%2F