묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
SceneType 질문
강의를 다 들어서 이제 첫 단추부터 풀어보려고 게임씬 스크립트 열고 분석하려 했는데 SceneType 변수가 있길래 뭐하는 코드지 하고 검색해 봤는데 해당 변수를 활용하는 부분이 안보여서 어떤 로직인지 잘 모르겠어요 해당 변수는 어떤 용도로 작성됐나요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
달리기 애니메이션 에러
연결은 했는데 저런 에러가 나요 ㅠㅠ
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
데이터 로드 관련 질문
안녕하세요! 강의 잘 듣고 있습니다.13. 데이터 테이블 관리 시스템 부분을 듣다가 몇 가지 의문점이 있어 질문 드립니다. CSV Reader가 List<Dictionary<string, object>>를 반환하고 있고, 이를 로드 함수에서 실제 데이터로 형변환해 사용하고 있습니다. 그런데 object 타입을 값 타입으로 변환하면 언박싱이 발생해서성능에 좋지 않다고 알고 있습니다. 통일성을 위해서 object 타입으로 쓰신 건지, 로드 과정이 Awake에서 한 번에 일어나기 때문에 괜찮은지 궁금합니다. 그리고 object 대신 string을 반환하는건 어떤지도 여쭤보고 싶습니다. 챕터 데이터를 검색할 때 리스트에서 순회를 하는데 딕셔너리 같은 별도의 자료 구조에 저장하지 않은 이유가 궁금합니다. 감사합니다.
-
미해결[Unity6] 함께 만들어가는 서바이벌 게임 개발 - 스팀 출시 도전기
12강
12강은 언제 업데이트될까요?
-
미해결2. 유니티가 어려운 입문자를 위한 입문용 게임 제작
2강 22화 보스제작 미사일 데미지적용안되는부분 ..
보스에게 불릿을 쏘면 데미지가 적용되지만 미사일을 쏘면 데미지가 적용이 안되는 버그가 있는데 해결을 못하고있습니다..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
이제는 제가 루키즈 님하고 똑같은 생각을 가지고 무언가 만든다는걸 느꼈어요.실력이 그만큼 상승했다는걸 체감했습니다. 정말 감사합니다. 꼭 rpg 게임을 하나 만들어서 저도 진정한 개발자가 되고 싶네요 사운드 매니져 만들때 딕셔너리로 캐싱을 하는 부분에서 정말 놀랐습니다. 전 그냥 2편까지만 보고 캐싱하는 부분에서 딕셔너리로 캐싱하면 좋겠다 라고 생각해서 만들었는데 루키즈 님도 동일하게 만들고 계시더라구요. 사실 딕셔너리 말고 이걸 pool작업이 이미 되어 있는 부분으로 처리할까도 고민했는데 이부분은 어차피 유니티에서 미리 작업 할수 있는 부분이라 클립으로 그냥 캐싱하는게 좋을듯 하여 딕셔너리로 처리 했는데 저랑 동일하게 생각하는 부분이 있어서 놀랐습니다. 항상 몸 건강하시고 감사드립니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C++ 전혀 모르는데 C# 서버
C++ 전혀 모르는데 C#서버 만드는데전혀 지장 없을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의에 질문이 있습니다
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace ServerParctice { internal class Connector { Func<Session> _sessionFactory; public void Connect(IPEndPoint endPoint, Func<Session> sessionFactory) // 커넥트할건데 비동기로 할거 { // 일단 연결할 상대방의 주소를 알아야겟지? Socket socket = new Socket(endPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp); SocketAsyncEventArgs connectArgs = new SocketAsyncEventArgs(); _sessionFactory = sessionFactory; connectArgs.Completed += OnConnectCompleted; connectArgs.RemoteEndPoint = endPoint; connectArgs.UserToken = socket; RegisterConnect(connectArgs); } void RegisterConnect(SocketAsyncEventArgs args) { Socket socket = args.UserToken as Socket; bool pending = socket.ConnectAsync(args); if(pending == false) { OnConnectCompleted(null,args); } } void OnConnectCompleted(object sender, SocketAsyncEventArgs args) { if(args.SocketError == SocketError.Success) { Session session = _sessionFactory.Invoke(); session.Start(args.ConnectSocket); session.OnConnect(args.RemoteEndPoint); } else { Console.WriteLine($"OnConnectCompleted Failed : {args.SocketError} "); } } } }강의 코드인데요, Connector객체는 하나만 만들고 그 Connector가 Connect()를 호출하면서 연결할 서버들의 소켓을 만들고 세션을 만드는데요. Func<Session> sessionFactory; 이 부분이 왜 전역변수로 관리되는지가 궁금해요. Connect()를 호출할때마다 _sessionFactory에 할당되는게 달라지는데 만약 멀티쓰레드 환경에서 동시다발적으로 Connect()를 호출하게 된다고하면 경쟁이 일어날거 같아서요. 만약 Connector객체 하나가 하나의 연결만 관여를 한다면 socket은 왜 전역으로 안 빠져있는지도 궁금하네요
-
해결됨[Unity6] 나만의 서바이벌 게임 만들기
AddMarker를 했는데 east와 west는 잘되는데, north/south가 거꾸로 인식되는데 어떻게 해야할까요?
AddMarker를 했는데 east와 west는 잘되는데, north/south가 거꾸로 인식되는데 어떻게 해야할까요?public void UpdateMarkers(){ for (int i = ActiveMarkers.Count - 1; i >= 0; i--) { MarkerInfo markerInfo = ActiveMarkers[i]; if (markerInfo.TargetTransform == null) { Destroy(markerInfo.MarkerUI.gameObject); ActiveMarkers.RemoveAt(i); continue; } float heading = PlayerTransform.eulerAngles.y; Vector3 directionToTarget = markerInfo.TargetTransform.position - PlayerTransform.position; float distance = Vector3.Distance(markerInfo.TargetTransform.position, PlayerTransform.position); float targetAngle = Mathf.Atan2(-directionToTarget.x, directionToTarget.z) * Mathf.Rad2Deg; // 각도 생성 float relativeAngle = (heading - targetAngle + 360.0f) % 360.0f; float normalizedAngle = relativeAngle / 360.0f; // float xPosition = Mathf.Lerp(-CompassWidth, CompassWidth, normalizedAngle); markerInfo.MarkerUI.anchoredPosition = new Vector2(xPosition, markerInfo.MarkerUI.anchoredPosition.y); markerInfo.MarkerText.text = string.Format("{0:0.0} m", distance); }}
-
미해결[Unity6] 나만의 서바이벌 게임 만들기
3강의 내용이 1강과 동일합니다
3강의 내용이 1강과 동일합니다 영상이슈일까요? 멈출때 미끄러지듯 멈추는 문제 해결하겠다고 하고선 영상이 갑자기 끝납니다.
-
해결됨AI 시대의 혁신적인 게임 개발 입문 with Unity6
코딩 계란레벨이라 자질구리한 질문? 입니다.
순서대로 따라하면서 이해하려고 하고 있습니다.해당 강의 포인트씬1은 엔터로 결과출력씬2는 버튼으로 결과출력씬3은 엔터 및 버튼으로 결과출력으로 설명이 된거 같은데,,2랑 3이랑 같지 않나요?2에서도 버튼 및 엔터로 출력이 되는거 맞죠?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티스레드 이해도 질문
안녕하세요 강사님멀티쓰레드 부분을 봤는데여기서 개념적인 부분만 이해했고 코드도 이게 뭐하는건지만 이해 했는데 요정도만 알고 다음 스탭으로 넘어가도 될까요? 아니면 좀 깊게 이해 한 후에 다음 장을 넘어가는게 좋을까요?
-
해결됨[Unity6] 나만의 서바이벌 게임 만들기
Text Object 애니메이션 이슈
Text Object 를 만들고 애니메이션으로 좌표 를 정하고 prefab에 등록해서 사용하려는데 자꾸 첫 위치에만 TextObject들이 생성 됩니다 애니메이션에 Destory만 넣으면 정상적으로 캐릭터 주변에 TextObject가 생성되는데 어느 곳을 봐야 할까요?
-
해결됨[Unity6] 나만의 서바이벌 게임 만들기
Material 방식 수정 후 처음 포탈 할때만 아래 오류가 발생합니다
Material 'Opaque_M' has a missing parent with GUID: ffa1ddcbeccdb954fa4dd4547bab8262.UnityEngine.Renderer:get_material ()Building_OBJ/<CompletedCoroutine>d__20:MoveNext () (at Assets/00_Scripts/Building/Building_OBJ.cs:92)UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator)Building_OBJ:BuildCompleted () (at Assets/00_Scripts/Building/Building_OBJ.cs:74)Building_OBJ/<SliderFillCoroutine>d__22:MoveNext () (at Assets/00_Scripts/Building/Building_OBJ.cs:141)UnityEngine.SetupCoroutine:InvokeMoveNext (System.Collections.IEnumerator,intptr)코드는 아래와 같습니다private IEnumerator CompletedCoroutine(){ float current = 0.0f; float percent = 0.0f; float emissionStart = 1.0f; float emissionEnd = 20.0f; Color startColor = Color.white; Color endColor = Color.black; while (percent < 1.0f) { current += Time.deltaTime; percent += current / 1.0f; float lerpEmission = Mathf.Lerp(emissionStart, emissionEnd, percent); renderer.material.SetColor("_EmissionColor", startColor * lerpEmission); yield return null; }에서 float lerpEmission = Mathf.Lerp(emissionStart, emissionEnd, percent);이 부분에서 오래가 발생합니다 chat gpt에 물어보니 Opaque_M(또는 Transparent_M)이 Material Variant인데 부모 GUID가 유실됨.부모 GUID가 유실되었다고 하네요
-
미해결[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
소스코드 문의드립니다.
안녕하세요 강사님.매번 좋은 강의 감사합니다.프로젝트강의를 진행하면서 도움을 받고자 전체 프로젝트 소스를 받을 수 있을까요??이메일 dandy83ten@gmail.com
-
미해결[유니티 실전 프로젝트] Burger Please 모작
3D인데 직교투영?
안녕하세요~ 언제나 고급진 강의 감사합니다.3D오랜만에 해서 헷갈리는데요.Perspective를 주로 사용했던것 같은데여기서는 직교투영으로 세팅이 되어 있는데왜 그런걸까요?2D 할때 직교투영으로 많이 했었는데3D에서 직교투영으로 하는 이유가 궁금합니다~
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
500 vs 500
500 vs 500을 본적이 없다고 하셨는데최대 몇명까지 다수 PK가 되는 걸 보셨나요?인원수는 2D와 3D 게임이냐에 따라 달라지기도하나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
지난 강의와 이어지는게 맞을까요?
18. Skill AI 보고 이어서 19. Protobuf 이식 (코드 리뷰)강의를 보는데, "지난 시간에 이러이러한 강의를 했다"라는 말씀을 하시는데 지난 시간에 서버 관련 강의가 아예 없었어서.. 이어지지가 않네요.. 어떻게 된 것인지 모르겠어서 혼란 스럽네요 ㅠㅠ 중간에 이어지는것이 없고 19번째 강의를 보려니 무슨 말씀이신지 잘 따라가지를 못하겠어요.. 갑자기 저 파일은 왜 지우시며,, 저게 뭐지 싶어서.. 혹시 제가 뭔가 못찾고있으려나요..?ㅠ
-
해결됨유니티 시스템 프로그래밍 Pt.2 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
18 유저 데이터 온라인DB 로드 및 저장 PT4의 UserInventoryData 클래스에 대하여
private void ConvertFirestoreDictToData(Dictionary<string, object> dict) { EquippedWeaponData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedWeaponData"]); EquippedShieldData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedShieldData"]); EquippedChestArmourData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedChestArmourData"]); EquippedBootsData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedBootsData"]); EquippedGlovesData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedGlovesData"]); EquippedAccessoryData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedAccessoryData"]); InventoryItemDataList = ConvertDictToInventoryList((List<object>)dict["InventoryItemDataList"]); if(dict.TryGetValue("EquippedWeaponData", out var equippedWeaponDataValue) && equippedWeaponDataValue is Dictionary<string, object> equippedWeaponDataDict) EquippedWeaponData = ConvertDictToUserItemData(equippedWeaponDataDict); if (dict.TryGetValue("EquippedShieldData", out var equippedShieldDataValue) && equippedShieldDataValue is Dictionary<string, object> equippedShieldDataDict) EquippedShieldData = ConvertDictToUserItemData(equippedShieldDataDict); if (dict.TryGetValue("EquippedChestArmourData", out var equippedChestArmorDataValue) && equippedChestArmorDataValue is Dictionary<string, object> equippedChestArmorDataDict) EquippedChestArmourData = ConvertDictToUserItemData(equippedChestArmorDataDict); if (dict.TryGetValue("EquippedBootsData", out var equippedBootsDataValue) && equippedBootsDataValue is Dictionary<string, object> equippedBootsDataDict) EquippedBootsData = ConvertDictToUserItemData(equippedBootsDataDict); if (dict.TryGetValue("EquippedGlovesData", out var equippedGlovesDataValue) && equippedGlovesDataValue is Dictionary<string, object> equippedGlovesDataDict) EquippedGlovesData = ConvertDictToUserItemData(equippedGlovesDataDict); if (dict.TryGetValue("EquippedAccessoryData", out var equippedAccessoryDataValue) && equippedAccessoryDataValue is Dictionary<string, object> equippedAccessoryDataDict) EquippedAccessoryData = ConvertDictToUserItemData(equippedAccessoryDataDict); if (dict.TryGetValue("InventoryItemDataList", out var inventoryItemDataListValue) && inventoryItemDataListValue is List<object> inventoryItemDataList) InventoryItemDataList = ConvertDictToInventoryList(inventoryItemDataList); }위와 같이 수정하셨는데, trygetvalue로 체크하는것으로 바꾸었으니 아래와 같은 부분을 지워주는게 맞지 않나요? 안그러면 중복 처리 되는게 아닌가요? EquippedWeaponData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedWeaponData"]); EquippedShieldData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedShieldData"]); EquippedChestArmourData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedChestArmourData"]); EquippedBootsData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedBootsData"]); EquippedGlovesData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedGlovesData"]); EquippedAccessoryData = ConvertDictToUserItemData((Dictionary<string, object>)dict["EquippedAccessoryData"]); InventoryItemDataList = ConvertDictToInventoryList((List<object>)dict["InventoryItemDataList"]);
-
해결됨AI 시대의 혁신적인 게임 개발 입문 with Unity6
질문이 하나 있습니다.
기존에 VISUAL STUDIO 2022 를 사용중인데VISUAL STUDIO CODE를 써야 더 좋을까요