묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
send 와 recv 관련하여 질문이 있습니다!
클라입장에서 Connect를 통해 연결을하고 연결된 소켓에 Send를 하게되면 서버입장에서 Recv하게되는부분에서 1.public void Start(Socket socket){ _socket = socket; _recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); _recvArgs.SetBuffer(new byte[1024], 0, 1024); _sendArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnSendCompleted); RegisterRecv();}이부분에서 RegisterRecv를 하나만 써 준 것이 낚싯대에 비유하여 접근을 하고있을시 다른쪽에서 접근을 못한다고 하셨는데. 이게 구조적으로 그렇게 짜여진 것인가요??+ 또 RegisterRecv() 이것을 여러게 써주면 lock을 걸어야 하는건가요 ?? 2.그리고 OnSendCompleted 에도 lock을 건 이유가_sendArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnSendCompleted);이 부분에서 중복해서 들어오는 것을 방지하기 위해 거셨다고 하셨습니다. 그럼 Recv의_recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted);이 부분은 어떻게 다른건가요?? 이 부분은 제 나름대로 이해하려고 예를 든 부분입니다. 제대로 이해했는지 봐주시면 감사합니다!Send와 Recv를 게임의 1:1 채팅에 적용하면 A유저와 B 유저가 1:1 채팅을 하고있는 중에 A유저가 채팅을 보내면 클라에서 Send를 하고 서버에서 Recv를 해 받고 그걸 서버 Send를 통해 B유저 클라에 보내준다 (이 부분에서 서버 Send는 1:1하고있는 B에만 가야하니까 lock을 검 : 또 다른 유저(클라)가 보낸 채팅? 들이 섞이지않게... )
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이 강의의 완성본을 커스텀하면 포폴 메인 수준이 가능할까요?
안녕하세요? 오늘은 양해를 구하면서 조금 모호한 질문을 들고 왔습니다. 제목대로 완성본을 커스텀하면 메인 포폴로 내세울 수 있을정도인지 궁금합니다.제가 수강한 강의는 C# Part4. 서버와 Part7. 유니티 연동 입니다. 물론 커스텀 과정에서멀티스레드 이해TCP 통신 과정 이해클라이언트 <--> 서버 간 패킷 송수신 및 로직 이해은 어느 정도 되었다고 자신하고 있고, 저의 주요 변경 사항은Zone 단위 개념 삭제Zone 개념 삭제에 따른 모든 방향 이동 및 모든 방향 투사체 발사이동_Packet / 발사_Packet 등의 결정 주체 변경- ex) 강의에서 결정 주체가 클라이언트였으면, 저는 서버가 결정하도록 변경탑다운 슈팅 게임 방식의 배틀 로얄 컨셉프로토타입 수준의 완성도 (아래 사진)이 정도면 포폴 메인으로 써먹을 수 있을지 조심스럽게 질문 올립니다.. ㅎㅎ답변 미리 감사합니다.
-
해결됨[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
몬스터 Object Tile을 만든뒤로부터 이상한 에러문구가 발생합니다.
In order to call GetTransformInfoExpectUpToDate, RendererUpdateManager.UpdateAll must be called first.UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&) 라는 오류가 발생하는데요. 현재까지 Play를 통해 게임을 실행할때 아무 영향을 주지 않으나, Unity를 처음 실행할때만 발생합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener 수업부분 질문입니다!
코드 실행하면 이런식으로 브레이크포인트가 잡히는데 왜 이런거 일까요 .. 밑줄도 많이생기고 해서 질문남깁니다!
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
텍스트 드래그 앤 드롭
게임매니저 2/2 에 이제 텍스트가아닌 텍스트메쉬프로를 쓰게되었는데요 선생님강의처럼 드래그엔 드롭이안되네요 ㅠㅠ 아시는분계실까요score text 랑 best score text가 드래그 드롭이안됩니다..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
EventHandler<T> 를 사용하는 이유가 무엇인가요?
Listener 클래스에 args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); 부분을 args.Completed += OnAcceptCompleted; 이렇게 바꾸어도 문제가 생기지 않는데 왜 EventHandler<T> 를 사용하는 것인가요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
안녕하세요 랜덤오브젝트 생성기에서 질문있습니다.
16:04 에 prop prefabs에 저는 사이즈가 안나오는데 왜그럴까요..?using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpawnGenerator : MonoBehaviour { public GameObject[] propPrefabs; private BoxCollider area; public int count = 100; private List<GameObject> props = new List<GameObject>(); void Start() { area = GetComponent<BoxCollider>(); for (int i = 0; i < count; i++) { Spawn(); } area.enabled = false; } private void Spawn() { int selection = Random.Range(0, propPrefabs.Length); GameObject selectedPrefab = propPrefabs[selection]; Vector3 spawnPos = GetRandomPosition(); GameObject instance = Instantiate(selectedPrefab, spawnPos, Quaternion.identity); props.Add(instance); } private Vector3 GetRandomPosition() { Vector3 basePosition = transform.position; Vector3 size = area.size; float posX = basePosition.x + Random.Range(-size.x/2f, size.x/2f); float posY = basePosition.y + Random.Range(-size.y/2f, size.y/2f); float posZ = basePosition.z + Random.Range(-size.z/2f, size.z/2f); Vector3 spawnPos = new Vector3(posX,posY,posZ); return spawnPos; } // Update is called once per frame void Update() { } }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RecvBuffer 질문
안녕하세요. Session에서 _recvArgs.SetBuffer() 하는 부분에서 궁금증이 생겼습니다. _recvBuffer.WriteSegment는 다음에 올 패킷 사이즈가 어느 정도인지 모르니버퍼의 offset + writePos부터 여유공간 끝까지(FreeSize)를 뭉탱이로 가리켜서 주는걸로 이해했습니다.그리고 _recvArgs는 WriteSegment가 가리키는 공간을 자신의 버퍼로 사용합니다. 만약, 실제로 보내고자 했던 패킷의 사이즈가 10인데, _recvArgs의 FreeSize가 5라면,소켓은 일단 5만큼만 버퍼에 넣은 다음에 버리고, 나머지 5만큼의 재전송을 요청하는 건가요?아니면 아예 버리고 재전송을 요청하는건가요?그것도 아니라면 물밑(하위 레이어)에서 버퍼가 꽉 찼다는 신호를 서로 주고받아서 혼잡(?)이라 판단하고 애초에 보내지 않고 기다리는건가요? (버퍼가 비어지길 기다리다가 지치면 Disconnect 혹은 Loss?) 그리고 RecvBuffer의 Buffer가TCP 이론을 배울 때 말하는 window size와 직접적으로 연관되는 건가요?아니면 소켓 별도의 버퍼가 또 따로 있는건가요?
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
Open File in Solution
강의 중간중간에 Open File in Solution 이라는 팝업 띄우셔서 바로 클래스로 찾아가시는데 어떤 단축키를 눌러야 되는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Unity 연동 시 Disconnect 문제
안녕하세요 강사님코드비교도 하고 소스코드를 다운 받아서 시도를 해도 해결이 되지 않아 문의 드립니다.유니티 2022.3.15f 버전을 사용하고 net8.0을 이용하여 서버 및 클라이언트 빌드를 했습니다.유니티 연동까지 했고, 버퍼크기는 65535로 설정해두었습니다.유니티 connector.cs에서 클라이언트를 1로 설정했을 때에는 문제가 없으나2 이상 올릴 경우 1번이 무조건 disconnect 처리가 됩니다. 100이상 올릴 경우 중간에 패킷조립에 실패하여서버가 종료됩니다. 며칠을 고민하고 코드를 비교하고 강사님의 코드로만 진행을 해도 똑같아 문의남깁니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Connector 강의에서 에러가 뜹니다..
모듈이나 라이브러리를 빌드하고 있으면 /main을 지정할 수 없습니다. 라고 에러가 뜨고 있습니다. vs2022 버전으로 사용하고 있구요. DummyClient랑 Server 모두 참조 프로젝트로 ServerCore를 걸어주었습니다. 위가 ServerCore의 속성이구요. 이게 Server의 속성입니다.DummyClient도 똑같아요. 어디가 문제인걸까요 ?
-
미해결유니티 AR로 만드는 FPS 게임
이미지가 없는거같습니다
영상 처음부분에 이미지 가없는거 같습니다 경로를알려주실수 있나요 ?
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
1번 강의 IdentifiedObjectEditor 스크립트에서 에러가 납니다.
NullReferenceException: SerializedObject of SerializedProperty has been Disposed.UnityEditor.SerializedProperty.get_propertyType () (at <04e0fdd0fac34142a67859e48fe87770>:0)UnityEditor.EditorGUILayout.IsChildrenIncluded (UnityEditor.SerializedProperty prop) (at <04e0fdd0fac34142a67859e48fe87770>:0)UnityEditor.EditorGUILayout.PropertyField (UnityEditor.SerializedProperty property, UnityEngine.GUILayoutOption[] options) (at <04e0fdd0fac34142a67859e48fe87770>:0)IdentifiedObjectEditor.OnInspectorGUI () (at Assets/Scripts/Editor/IdentifiedObjectEditor.cs:99)UnityEditor.UIElements.InspectorElement+<>c__DisplayClass74_0.<CreateInspectorElementUsingIMGUI>b__0 () (at <04e0fdd0fac34142a67859e48fe87770>:0) 이런 에러인데 에러가 나는 시점이 인스펙터에서 코드네임을 변경한 후 엔터키를 눌렀을 때 발생합니다.EditorGUILayout.PropertyField(displayNameProperty);이름 변경 후 displayName을 그려줄 때 에러가 나는데 아무래도 OnEable 함수에서 FindProperty함수로 값을 제대로 가져오지 못하고 있는 것 같은데 어떻게 해야할까요? [SerializeField] private Category[] categories; [SerializeField] private Sprite icon; [SerializeField] private int id = -1; [SerializeField] private string codeName; [SerializeField] private string displayName; [SerializeField] private string description; categoriesProperty = serializedObject.FindProperty("categories"); iconProperty = serializedObject.FindProperty("icon"); idProperty = serializedObject.FindProperty("id"); codeNameProperty = serializedObject.FindProperty("codeName"); displayNameProperty = serializedObject.FindProperty("displayName"); descriptionProperty = serializedObject.FindProperty("description");혹시 제가 직접 타이핑한게 문제일까 싶어서 코드를 다운로드 받고 복붙해봤는데도 에러가 발생합니다.이 현상을 그대로 두고 진행해도 될까요?이름 변경은 제대로 됩니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
section1 7-stat 강좌에서 delegate를 사용하신 이유가 궁금합니다.
public delegate void ValueChangedHandler(Stat stat, float currentValue, float prevValue); public event ValueChangedHandler onValueChanged;public event Action<Stat, float, float> onValueChanged; 위와 같이 delegate를 사용하셨는데, 아래 action 대신 사용하면 어떤 차이가 있는지, 또는 특별한 이유가 있는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Console.Writeline 메모리누수
JobTimer 까지 모두 수강하고 Session쪽 코드에서 RecvBuffer _recvBuffer = new RecvBuffer(1024); 이것만 이렇게 다시 수정했습니다. 그리고 실행시켰는데 메모리가 늘어나더니 저런 오류가 떠서 Console.Writeline 쪽 코드를 지우고 실행시키니까이렇게 메모리가 계속 늘어나지 않고 일정하게 유지 되는데 단순히 Console.Writeline이 많이 실행돼서 그런건가요?
-
미해결따라하면서 배우는 고박사의 유니티 기초
다른 강의도 듣고 싶어요
https://www.youtube.com/@unitynote/playlists 에서 2D기초강의를 듣고 싶은데 2D횡스크롤 게임(예 : 메탈슬러그, 슈퍼마리오)을 만들려면 어느 강의를 추천할수 있나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync() 와 BeginAccept() 의 차이가 궁금합니다.
이 강의를 구매하기 전 이런저런 자료를 찾아보며 혼자 TCP 통신을 공부하고 있었습니다. 그런데 제가 공부할 때는 Begin~() 를 사용했었습니다. 그런데 이 강의 에서는 ~Async() 를 사용하더라고요 사용하기는 Begin~() 이 더 간단하던데 이 강의에서 ~Async() 를 사용하는 다른 이유가 있을까요? 궁금합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
ServerCore 일부 복붙하는걸 심볼릭링크로 해도 괜찮을까요?
유니티 측에서 사용자정의 심볼을 넣어서위 사진과 같이 전처리기를 사용해Server측에서는 Console.WriteLineClient측에서는 Debug.Log이 호출되도록 구성하였습니다. 에디터상에서 실행하는것까지는 크게 문제없이 잘 되는 것 같습니다! 이러면 어느쪽에서든 로직 사소하게 변경해도복붙 까먹는 일이 없어 좋아보이는데혹시 퍼블리싱단계나 추후에 크게 문제될 부분이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Poolable 컴포넌트를 코드를 통해 넣어주려면
강의에선 Poolable 컴포넌트를 유니티 실행 전에 유니티에서 드래그앤드롭으로 미리 넣어줍니다.제 질문은 강의처럼 미리 넣어주는게 아닌 실행된 뒤에 코드에서 GetOrAddComponent함수를 통해 넣어주려고 합니다.그런데 코드에서 GetOrAddComponent함수를 통해 넣어주면 복제가 된 뒤에 넣어져 풀링이 되지 않습니다. ResourceManager의 Instantiate 함수를 보면 Object.Instantiate를 실행하기 전에 풀링된 오브젝트가 있는지 확인을 해서 그런거 같습니다.Pop()함수가 호출이 안되니 _pool Dictionary에 새로 생성되지 않습니다.제 생각에는 Push 함수에서도 CreatePool을 해주는 방식이나 ResourceManager의 Instantiate 함수 안에서 Object.Instantiate를 실행하기 전에 오브젝트의 이름이나 태그를 통해 미리 넣어주고 복사하는 방식이 생각이 나는데 전자는 강의에서 말씀하신 예외사항에 대처할 수 없고 후자는 그리 효율적이라고 생각되지 않습니다.혹시 다른 좋은 방법이 있을까요?강의에서 말씀한 내용이라면 죄송합니다.
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
어드레서블 관련 궁금한 점이 있습니다
안녕하세요 좋은 강의 감사합니다.어드레서블 관련해서 궁금한 점이 있어서요. 앱을 출시하고 업데이트 할 때, 검토 기간이 어느 정도 소요되는 것으로 알고 있습니다. (UI_LobbyScene.prefab 을 예시로 가져왔습니다)현재 버전인 A 를 (화살표 기준으로) 위의 이미지, 업데이트 될 버전 B 를 아래의 이미지로 가정 했을 때,어드레서블 파일들을 업데이트 하고, 검토를 보낸다면, 검토가 완료되기 전 까지어드레서블 만 업데이트 된 A 버전의 사람들은작동하지 않는 [이벤트] 버튼을 사용하게 될 것 같은데요. 아직 이벤트 기능을 포함한 스크립트가 생성된 B 버전의 앱은 출시가 되지 않은 상황 이기 때문입니다. 혹시 이 부분을 어떻게 해결 하면 좋을까요?