묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[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 게임 개발 시리즈] Part2: 자료구조와 알고리즘
글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들
콘솔 상태바 우클릭 > 설정으로 들어가셨을 때'기본 터미널 응용 프로그램' 옵션을 Windows 터미널 말고 캡쳐와 같은 Windows 콘솔 호스트로 바꿔보세요강사님 화면에 띄워지는 터미널처럼 보라색 아이콘의 터미널이 띄워지는데 여기선 폰트 설정 안해도 원이 잘 나옵니다!저는 암만 글꼴 설정 이것저것 해봐도 정사각형으로 안나오더라구요 ㅜ
-
미해결[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
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요
while (parent[y, x].Y != y || parent[y, x].X != x)이 while 문에서 NullReferenceException 예외가 걸리는경우.Initialize 함수를 확인해보시길 바랍니다.public void Initialize(int PosY, int PosX, Board board) { PosY = PosY; PosX = PosX; _board = board; BFS(); }이부분을 이렇게 수정하시거나 public void Initialize(int posY, int posX, Board board) { PosY = posY; PosX = posX; _board = board; BFS(); }또는 this. 으로 수정해도 되네요.
-
미해결[유니티 실전 프로젝트] Burger Please 모작
3D인데 직교투영?
안녕하세요~ 언제나 고급진 강의 감사합니다.3D오랜만에 해서 헷갈리는데요.Perspective를 주로 사용했던것 같은데여기서는 직교투영으로 세팅이 되어 있는데왜 그런걸까요?2D 할때 직교투영으로 많이 했었는데3D에서 직교투영으로 하는 이유가 궁금합니다~
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
500 vs 500
500 vs 500을 본적이 없다고 하셨는데최대 몇명까지 다수 PK가 되는 걸 보셨나요?인원수는 2D와 3D 게임이냐에 따라 달라지기도하나요?
-
미해결C# WPF .NET Core(7.0)
강의 기간 연장이 가능할까요?
안녕하세요 강사님! 좋은 강의 감사드립니다.업무랑 여러 상황들 때문에 강의를 못듣고 있다가 어느새 강의 종료일이 다가오고 있는데 혹시 강의 연장이 가능할지요 ㅠㅠ?
-
미해결[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를 써야 더 좋을까요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
OnAcceptHandler 액션 함수
강의 코드에서 _onAcceptHandler에 +=로 onAcceptHandler를 등록해주고 있는데,어차피 액션 함수는 한 번만 변수에 할당해두고 이후 통신할 때마다 재사용되는 구조잖아요?그렇다면 =로 해도 될 것 같은데, +=를 사용한 특별한 이유가 있을까요?
-
해결됨[Unity6] 나만의 서바이벌 게임 만들기
Inventory #1 강의 31분 28초경 오류 납니다
Inventory #1강의 31분 28초경 오류 납니다Assets\00_Scripts\UI\PART\INVENTORY.cs(27,23): error CS1503: Argument 1: cannot convert from 'UnityEngine.GameObject' to 'Item_Panel'go가 gameObject가 아니라는 오류 같은데 어떻게 해야할까?
-
미해결2. 유니티가 어려운 입문자를 위한 입문용 게임 제작
오류 질문입니다
문제 1.기즈모 라인이 scene 화면에서 안보이고 game 화면에서만 보입니다 문제 2 - 해결완료 ! - 문제 3. 스크립트 작성후 저장하니 CommandBuffer: built-in render texture type 3 not found while executing (SetRenderTarget depth buffer)UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)이 오류가 생기기 시작했습니다 game창에서 기즈모를 끄고 하니 오류가사라지는데 계속 기즈모를 끈 상태에서 작업해야 할까요 ?