안녕하세요? 선생님 구매해놓고 인제서야 틈틈히 보고있습니다. 다름이 아니고 소스분석을 하면서 강좌를 보고싶은데 (완성형 소스는 질문 게시판 답변에 링크를 통해서 받았습니다.) 완성형 소스로는 섹션별 영상을 보면서 분석하기 어렵겠더라고요. 유데미를 보면 섹션별로 소스가 제공되는경우가 있는데 있으시다면 공유 해주실수있으실까요? (일일이 타이핑하면서 따라가는것보다 영상에 맞는 소스를 같이 보면서 진행해야 직관적으로 이해하기가 수월하고 편하더라고요.) 만약 없다면 제공할 계획은 있으신지 궁금합니다. 수고하세요!
에러가 발생하는 경우 public Dictionary<string, int> c = new Dictionary<string, int>(); c.Add("A", 5); 에러가 발생하지 않는 경우 public Dictionary<string, int> c = new Dictionary<string, int>(); private void Start() { c.Add("A", 5); } 왜 Start() 메서드 안에 있으면 에러가 발생하지 않고 dictionary 선언 후 바로 Add를 하면 에러가 발생하는지 궁금합니다.
불덩이를 날리고 불덩이에 맞으면 데미지를 주고 화상이 1스택 쌓는 스킬이 있는데 만약 다른 스킬을 획득하면 불덩이 스킬로 맞추어 데미지를 주었을 때 폭발이 일어나 불덩이와 다른 데미지를 추가로 주고 화상을 2스택 쌓는 스킬을 붙이고 싶은데 스킬에 스킬로 스킬에 달린 카테고리별로 이펙트를 추가하는 구현해 내었는데 스킬에 스킬로 스킬을 추가하는 방법을 알고 싶습니다
b.Remove(3); // b리스트의 세 번째 값을 제거 안녕하세요! 위처럼 설명해주셨는데, 세 번째 값 제거는 세 번째 인덱스인덱스처럼 보여져 값이 3인 것을 제거하는 것으로 설명해주시는 것이 좀 더 명확한 설명이지 않나 싶어서 글 남깁니다. 직접 코드를 b.Remove(300);을 해보니 값이 300인 요소가 지워졌습니다.
매번 패킷을 보낼 때마다 byte 배열을 할당해서 그 참조를 Session의 Send 함수로 전달하면 굳이 SendBuffer로 값을 한번 더 복사하는 과정 없이도 동작할 것 같습니다. 그런데도 SendBuffer라는 클래스를 만들어서 관리하는 이유는 잦은 배열 할당으로 인한 Memory Fragmentation를 최소화하기 위함인가요?
유저데이터로드와 유저레지스터를 이렇게 수정했는데 상관없나요? 수업에 나온 그대로 코드를 입력했는데 유닛 123도 같이 비활성화되서요ㅠㅠ 일단은 123활성화 45비활성화는 되는데 코드가 너무 달라진 것 같아서 질문드립니다. using UnityEngine; using UnityEngine.UI; public class UserDataLoad : MonoBehaviour { [SerializeField] Text UserNickNameText; [SerializeField] Button[] CharBtns; int[] CharNum; void Start() { CharNum = new int[5]; // 유닛 데이터 불러오기 (Unit1~Unit3 기본값 1, Unit4~Unit5 기본값 0) for (int i = 0; i < 5; i++) { CharNum[i] = PlayerPrefs.GetInt("Unit" + (i + 1), (i < 3 ? 1 : 0)); // Unit1~Unit3 기본값 1, Unit4~Unit5 기본값 0 } // 버튼 활성화 상태 설정 UpdateButtonStates(); } void Update() { // 닉네임 업데이트 UserNickNameText.text = PlayerPrefs.GetString("UserNickName"); } void UpdateButtonStates() { for (int i = 0; i < 5; i++) { CharBtns[i].interactable = (CharNum[i] == 1); } } } using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class UserRegister : MonoBehaviour { [SerializeField] InputField NickNameInput; string NickName; public void OnClickRegister() { NickName = NickNameInput.text; // 사용자 정보 저장 PlayerPrefs.SetString("UserNickName", NickName); PlayerPrefs.SetInt("Coin", 1000); PlayerPrefs.SetInt("Level", 1); PlayerPrefs.SetInt("WinCount", 0); // 유닛 활성화 상태 저장 PlayerPrefs.SetInt("Unit1", 1); PlayerPrefs.SetInt("Unit2", 1); PlayerPrefs.SetInt("Unit3", 1); PlayerPrefs.SetInt("Unit4", 0); PlayerPrefs.SetInt("Unit5", 0); PlayerPrefs.Save(); // 다음 씬으로 이동 SceneManager.LoadScene("User Scene"); } }
아직 초반 강의 부분을 보고 있지만 일부 리소들에 대해서 리소스 폴더에서 로드하는 내용들이 제법 있는 것 같은데 제가 알기로는 리소스 폴더에서 로드하는 방식의 경우 빌드 시 전부 포함이 되기 때문에 무거워져 비선호한다로 알고 있습니다. 현업에서 정말로 이렇게 쓰이는지가 궁금합니다. 추가적인 질문으로는 요즘 결합도 관련해서 경험이 많이 부족했어서 이것저것 고민을 하고 있는 상황입니다. 챗지피티를 통해 인스턴스를 통한 다른 클래스에서의 사용이 결합도를 높이는 좋지 않은 것으로 챗지피티에서 알려주고 있는데 싱글톤을 통한 인스턴스들을 또 사용이 제법 나오는데 이또한 현업에서도 허용범위인가요??
안녕하세요. Quest System을 보고 참고하면서 구현을 하다가 확장성과 유연성에 대한 궁금증이 생겨 의견을 물어보고 싶어서 질문드립니다. Quest의 경우 다양한 조건이 있을 수 있는데 예를 들면, 제한 시간 안에 clear를 했는가, 특정 스킬을 사용하지 않았는가, 특정 아이템을 보유하고 있는 상태로 완료했는가 등등 이런 경우에 가능하면 관리하기 쉬우면서 의존성도 낮추는 방향으로 계속 고민해 보고 있는데 어떤 방식으로 구현하는 게 좋을까요?? 해봤을 때 Task 단위로 요구사항이 달라지니 Task에서 event를 연결하는게 직관적이긴한데 너무 하드코딩 방식인 것 같고(하드 코딩이 나쁘다는 것은 아니고 필요하면 해야 겠지만 좀 더 좋은 방법이 있을 것 같아서 일단은 스킵하고 찾아보고 있습니다), Event Hub 같은 기능을 만들어서 관리해보려고도 해봤는데 DynamicInvoke나 object를 쓰게 되서 프레임마다 update하는 경우도 생기는데 성능이 부담되는 것 같습니다..
UserGoodsData클래스와 UserSettingsData클래스에서 사운드, 골드, 젬의 값이 바뀌어도 다시 실행하면 Default값으로 계속 초기화됩니다. UserDataManager의 LoadData함수가 호출되지않는 이유를 잘 모르겠습니다. 추가로 레지스트리 편집기에서 확인해봤을 때, 커스텀메뉴를 통해 젬과 골드를 늘리면 레지스트리값은 변화하지만, 실행하면 초기화되는 상황입니다.