묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Add Animation Event 추가할 때 Inspector 부분에 문제가 있습니다
3:34초에Function, Float, int, String, Object 등 모든 변수가 나와야하는데아무것도 없고No Function Selected 상태입니다수업을 그대로 따라하고 있어서따로 코드 친건 없고이전까지는 모두 다 똑같이 실행되었습니다어떻게 해결해야할까요?? 유니티는 2022.3.21f1 LTS 버전입니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3D fps 제작 중 질문이 있습니다.
모든 계산은 서버에서 하고실제로 클라이언트는 보여주는 역할만 한다고 배웠습니다.여기서 궁금한점이 있는데유니티는 collider를 만들어서 충돌처리를 하는데서버는 따로 유니티를 통해 키는것이 아니라서 collider게산이 쉽지 않을 것 같다는 생각이 들었습니다. 총의 충돌판정을 검사할 때 총알의 현재위치와 총알의 이전위치를 이용해서 선을 만든 후 충돌처리를 하려고 하는데 여기서 플레이어의 머리 몸통 다리 팔을 각각 collider로 나누고싶다면 직접 서버에서 머리 몸통 팔 다리 위치와 collider를 구상하고 collider를 직접 구현하고.. Raycast를 직접 구현해서 사용한다충돌 계산 및 유니티 기능 이용을 목적으로 하는 클라이언트를 따로 제작한 후 각 위치에 collider를 직접 생산하고 유니티에 있는 기능을 이용한다.플레이어의 모든 위치는 동기화 되어있을테니 총알을 쏜 당사자의 컴퓨터에서 충돌판단을 한 후 서버로 충돌여부를 전달한다보통 어떤 방식이 맞는건가요? 흔히 실무자들이 말하는 모든 계산을 서버에서 한다는 말이 당장 개개인의 클라이언트에선 collider조차 만들지 않는다는 느낌인건가요? 그리고 만약 점프를 한다면점프에서 계산마다 올라가고 내려가는걸 서버에서 직접 계산한 후 (9.8중력, 이동속도 등..) 각 플레이어에 동기화시켜주는게 맞는걸까요?아니면 각 클라이언트의 Rigidbody를 이용해서 계산된 높이값을 서버로 전달하는게 맞는걸까요? 로컬상 이동 - 서버로 전달 - 동기화로컬상 이동명령 - 서버에서 이동계산 - 동기화 및 블랜딩 이 강의에선 2번케이스 같은데 3d게임은 1번이 더 나은 것 같기도 하고 해서 질문드립니다.
-
미해결유니티 AR로 만드는 FPS 게임
자동완성 기능은 어떻게 추가 하나요 ?
C# 스크립트 작성시 오타가 많이 나는데 자동완성 기능은 어떻게 추가하나요 ?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
12주차 소스코드 실행하면 오류나네요
이 오류가 어떤오류인가요? 올려주신 파일 받아서 그대로 실행했는데 오류가 나요!~ 심지어 실행이 안됩니다. 타이틀 부터 게임 화면까지 맵이 없는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안전한 게임 개발
안녕하세요. 루키스님의 강의를 듣고 멀티플레이 게임을 만들어보려고 하는데, 어디서부터 어디까지는 서버가 처리하고 나머지는 클라이언트가 처리해야 할지 고민이 됩니다. 서버에 침투할 수 있는 핵을 최대한 막을 수 있는 안전한 상황을 구축하고 싶습니다... 그리고 서버와 클라이언트는 동시에 개발하는 게 좋을까요 아니면 클라이언트를 전부 개발 후 서버를 개발하는 게 좋을까요? 감사합니다.
-
미해결[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) 강의에서 결정 주체가 클라이언트였으면, 저는 서버가 결정하도록 변경탑다운 슈팅 게임 방식의 배틀 로얄 컨셉프로토타입 수준의 완성도 (아래 사진)이 정도면 포폴 메인으로 써먹을 수 있을지 조심스럽게 질문 올립니다.. ㅎㅎ답변 미리 감사합니다.
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
몬스터 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와 직접적으로 연관되는 건가요?아니면 소켓 별도의 버퍼가 또 따로 있는건가요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
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이 많이 실행돼서 그런건가요?