게시글
질문&답변
아이템 필터 기능
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. 지금으로써는 인벤토리 목록을 재생성해 주는 방법을 취하시는게 좋을 것 같습니다. 즉 인벤토리를 다시 세팅하면서 아래 코드의 주석처럼 보여주지 않아야 할 아이템을 예외 처리해 주는 방법입니다. InventoryScrollList.Clear(); var userInventoryData = UserDataManager.Instance.GetUserData(); if(userInventoryData != null) { foreach (var itemData in userInventoryData.InventoryItemDataList) { if(userInventoryData.IsEquipped(itemData.SerialNumber)) { continue; } //보여주지 않아야 할 조건을 체크하여 continue 처리 var itemSlotData = new InventoryItemSlotData(); itemSlotData.SerialNumber = itemData.SerialNumber; itemSlotData.ItemId = itemData.ItemId; InventoryScrollList.InsertData(itemSlotData); } }
- 0
- 1
- 31
질문&답변
인피티니스크롤 item의 rect Transform에 Nan값
안녕하세요! BurningCarrot입니다. 스크롤 아이템들의 rectTransform 연산에 문제가 있어 발생하는 것으로 보입니다. 혹시 InfiniteScroll 컴포넌트의 설정값이 어떻게 되는지 아래처럼 스크린샷 공유해 주실 수 있으실까요?(사진)
- 0
- 2
- 22
질문&답변
[Title씬 구성 관련 질문 : 프리팹]
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. Q1. 타이틀 프리팹에 별도의 UI만 보여주는 카메라를 만든 이유가 무엇인가요? (main 카메라가 아닌 별도의 카메라를 만들고 또 그것을 프리팹에 넣은 이유)어느 씬에서든 UI용 카메라와 메인 카메라(기타 게임 오브젝트 렌더링용)를 분리하는 것이 원칙입니다. 뎁스 및 각종 효과 적용 시 문제가 발생할 소지가 많기 때문입니다. 저의 예제에는 Title씬 메인 카메라에 렌더링 되는 것이 없지만, 다른 수강생 분께서 만약 Title씬에 3D 모델을 넣고 싶은 경우 메인 카메라로 렌더링하실 것입니다. 이런 부분을 고려해 타이틀씬에서도 메인 카메라를 남겨두고 별도의 UI 카메라를 만든 것입니다. Q2. Title의 경우 프리팹에 캔버스까지 있습니다. 궁금한 것은 InGame에서 각각 UI들도 프리팹으로 만들텐데, 다 이렇게 개별 UI 프리팹마다 캔버스를 만드는 것이 좋은가요? (프리팹 안에 캔버스를 넣는 이유와, 주의해야 할 사항)Title프리팹의 경우 UI요소들을 렌더링하기 때문에 캔버스 컴포넌트가 존재합니다. 그 외에도 UIManager, LobbyUIController, InGameController 프리팹 등도 UI요소들을 렌더링하기 위해 캔버스 컴포넌트가 존재합니다. 그러나 저희가 만들게 되는 설정UI, 인벤토리UI 등의 프리팹은 캔버스 컴포넌트가 없습니다. 필요할 때마다 로드해서 UIManager의 캔버스 하위에 위치시켜 그 캔버스를 통해 렌더링하는 원리입니다. 때문에 캔버스 컴포넌트 하위에 또 다른 캔버스 컴포넌트를 배치하지는 않습니다. 수강생 분께서 우려하시는 상황은 발생하지 않을 것으로 보입니다.
- 0
- 2
- 31
질문&답변
로컬라이즈 어셋 각 언어별 폰트적용
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.유니티가 제공하는 Localized Property Variants 기능을 통해 구현할 수 있는 것 같긴 합니다만, 약간 복잡하다고 생각하실 수 있을 것 같아 아래 자체적으로 구현한 방법을 알려드리니 적용해 보시기 바랍니다.https://docs.unity3d.com/Packages/com.unity.localization@1.4/manual/LocalizedPropertyVariants.html UIManager.cs에 폰트 어셋 변수 선언 후 Inspector에서 언어별 폰트 지정public class UIManager : SingletonBehaviour { //..(중략).. public TMP_FontAsset DefaultFont; public TMP_FontAsset EnglishFont; public TMP_FontAsset KoreanFont; //..(중략).. }TextMeshProUGUI 컴포넌트가 있는 오브젝트에 UILocalizationFontHandler 컴포넌트 추가using TMPro; using UnityEngine; using UnityEngine.Localization; using UnityEngine.Localization.Settings; [RequireComponent(typeof(TextMeshProUGUI))] public class UILocalizationFontHandler : MonoBehaviour { private TextMeshProUGUI m_TextComponent; void Awake() { m_TextComponent = GetComponent(); } void OnEnable() { SetFontAsset(); } void SetFontAsset() { Locale currentLocale = LocalizationSettings.SelectedLocale; TMP_FontAsset selectedFont = UIManager.Instance.DefaultFont; switch (currentLocale.Identifier.Code) { case "ko": selectedFont = UIManager.Instance.KoreanFont; break; case "en": selectedFont = UIManager.Instance.EnglishFont; break; default: break; } if(m_TextComponent.font != selectedFont) { m_TextComponent.font = selectedFont; } } }
- 0
- 2
- 46
질문&답변
CSVReader 자세하게 설명 가능하신가요?
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. 일단 CSV파일은 Resources 폴더 하위에 위치해야 하고, Read 함수 호출 시 매개 변수는 Resources 폴더 내의 CSV파일 경로(파일명 포함, 파일 확장자명은 X)로 설정해 주시면 됩니다. ChapterDataTable.csv 파일을 읽어오면 어떤 자료구조의 형태로 받아오게 되는지는 아래 스크린샷을 참고 부탁 드립니다.(사진)만약 조금 더 복잡한 구조의 csv파일을 변환하고 싶으실 경우 예시를 첨부해 주시면 좀 더 상세히 도움 드리겠습니다.
- 0
- 1
- 57
질문&답변
강의 : Addressables를 활용한 어셋 관리 및 로딩 처리 문의
안녕하세요! BurningCarrot입니다.Project Settings -> Player의 아래 스크린샷 부분이 어떻게 설정되어 있으신지 공유해 주실 수 있을까요?(사진)
- 0
- 2
- 77
질문&답변
세계 시간 API 서버 이슈로 대체할만한 API 아시는분 계신가요?
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. Firestore Database를 사용하시는 경우 Firestore Database로부터 서버 시간을 가져올 수 있습니다.아래 함수를 FirebaseManager에 추가해서 await NetworkController.Instance.GetCurrentDateTime() 대신 await FirebaseManager.Instance.GetCurrentDateTime(); 를 호출해 보시기 바랍니다. 이 부분은 조만간 리워드 광고 구현 - 상점 일일 무료 보석 Pt.2 영상에 보충할 예정입니다.public class FirebaseManager : SingletonBehaviour { //...(중략)... public async Task GetCurrentDateTime() { // Request server timestamp from Firestore DB DocumentReference serverTimeDoc = m_Database.Collection("time").Document("server_time"); await serverTimeDoc.SetAsync(new { timestamp = FieldValue.ServerTimestamp }); // Get server timestamp DocumentSnapshot serverTimeSnapshot = await serverTimeDoc.GetSnapshotAsync(); Timestamp serverTimestamp = serverTimeSnapshot.GetValue("timestamp"); // Parse server timestamp to local datetime DateTime serverDateTime = serverTimestamp.ToDateTime().ToLocalTime(); Logger.Log($"CurrentDateTime: {serverDateTime}"); return serverDateTime; } //...(중략)... }
- 0
- 2
- 51
질문&답변
안녕하세요 일시정지부분
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. Time.timeScale = 0으로 하지 않으려면 게임 내 오브젝트를 개별적으로 일시정지 처리해야 합니다. 예를 들어 주인공 캐릭터가 필드에서 NPC와 전투를 하는 RPG 게임이라고 가정하겠습니다. 일시정지를 하면 각각의 캐릭터의 CharacterController에서 Pause함수를 호출하고, 그 함수에서는 일시정지에 필요한 작업을 해주어야 합니다.public class CharacterController : MonoBehaviour { protected Animator _animator; public void Pause() { enabled = false; //Update, FixedUpdate 함수 실행처리 비활성화 _animator.speed = 0; //애니메이션 정지 //기타 일시정지 필요한 컴포넌트 추가적으로 처리 } public void Resume() { enabled = true; //Update, FixedUpdate 함수 실행처리 활성화 _animator.speed = 1; //애니메이션 재실행 } }이 외에도 게임에서 타이머가 존재한다면 그 타이머도 일시정지 때는 작동하지 않도록 예외 처리를 해야합니다. 일시정지 처리해야 하는 것들은 게임마다 각각 다르기 때문에 딱 몇 가지로 규정하기는 힘듭니다. 하지만 그렇다고 모든 것을 다 정지 처리해야 하는 것은 아니므로 어떤 게임인가에 따라 간단히 몇 가지만으로도 처리가 가능할 수 있습니다. 예를 들어 캐릭터와 적 NPC만 일시정지 처리하고 나머지 게임에 영향을 미치지 않는 기타 환경 오브젝트(집, 나무, 동물 등)는 그냥 무시해도 될 것입니다. 수강생 분께서 프로그래밍에 대한 어느 정도의 자신감이 있으시다면 직접 일시정지 기능을 만드시는 것을 추천 드리지만, 아직은 부담스럽다면 일단은 Time.timeScale = 0 방법을 선택하시길 바랍니다. 대신 제가 강의에서도 언급했던 것처럼, 일시정지 상태에서 게임 계속하기나 로비 복귀 등의 행위 외에 유저의 다른 행위(인벤토리를 열어 무기를 교체하거나 하는 등)는 제한하는 것이 좋습니다. 그렇지 않으면 Time.timeScale = 0 일 때 정상적으로 기능이 작동하지 않는 문제가 발생할 위험이 높기 때문입니다. 만약 직접 일시정지 기능을 구현하고 싶으시고, 좀 더 구체적인 예시와 가이드를 원하신다면 개발하시는 게임에 대한 설명과 대략적인 코드를 burningcarrotstudio@gmail.com으로 보내주세요. 추가적인 도움 드리겠습니다.
- 0
- 2
- 48
질문&답변
LogViewer 설치 시 Warning 로그
안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다. "SendMessage cannot be called during Awake, CheckConsistency, or OnValidate (UICanvas: OnRectTransformDimensionsChange)"GpmLogViewer의 Viewer 오브젝트의 Canvas Scaler 설정을 아래 스크린샷과 같이 적용하면 해결되는지 확인 부탁 드립니다.(사진) (사진) "Errors during XML parse:" "Additionally, the fallback loader failed to parse the XML."Android SDK에서 발생하는 경고로 추측되는데 게임 개발에는 영향을 미치지 않습니다. Android SDK가 업데이트 되면 자동적으로 해결될 것으로 예상하고 있습니다.참고 스레드: https://discussions.unity.com/t/error-during-xml-parse/1530659 결론적으로 두 경고 로그 모두 유니티에서 개발하실 때 문제를 일으키지 않기에 걱정하지 않으셔도 됩니다. 다만 첫 번째 로그에 대한 해결 방법을 알려 드렸습니다.
- 0
- 1
- 55
질문&답변
구매 환불 처리 과정
안녕하세요! BurningCarrot입니다.강의를 수강 해 주셔서 감사 드립니다. 환불 처리에 대한 의견 감사드리고 2월에 iOS 섹션을 완성한 후 보충 강의로 다뤄보겠습니다. 강의가 추가되면 전체 공지 드리겠습니다.감사합니다.
- 0
- 2
- 83