묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
반환이 정확이 뭔지 모르겠습니다ㅠ
제목 그대로 반환이 정확이 뭔지 모르겠습니다ㅠ 앞서 이 코드를 작성할 땐 result 값을 반환하기 때문에 return을 썼다는 건 알겠습니다. 그런데 위의 코드에서는 반환값이 없기 때문에 void를 썼고, 그래서 return도 쓰지 않았는데 어떻게 연산의 결과가 Console.WriteLine에 들어갈 수 있는 건가요? 그리고 변수의 위치에 관해서도 궁금한 게 있는데, Add 함수 내에서 선언한 변수는 main 함수로 넘어갈 수 있지만 반대로 main에서 선언한 함수는 ref를 사용하지 않고는 Add 함수로 못 넘어가는 건가요? 그런 거라면 변수의 위치에 따라 왜 이런 변화가 생기는 건지 궁금합니다.혹시 뒤에 나올 강의에 해당 내용이 등장한다면 어떤 강의에 등장하는지도 알려주셨으면 합니다. 좋은 강의 찍어주셔서 감사합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
질문이 여러개 있어요!
1.구조체는 어느 상황에 쓰이나요? 그냥 객체가 해줄 수 있는 역할이 구조체의 역할을 포괄하고 같은 계층의 비슷한 데이터를 묶는 역할은 열거형이 할 수 있으니까 구조체는 별로 안 쓰일것 같아서요..아,열거형은 문자열만 사용 가능한가요? 2.Knight Clone()도 함수인가요? 반환값이 객체인 함수라고 보면 되는 건가요? 3.얕은 복사는 그냥 한 객체를 다른 이름으로 참조하는 것이라 볼 수 있겠고 깊은 복사는 같은 값을 가진 아예 다른 객체를 만드는 거라고 보면 되나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
13:50초에요
여러 줄을 긁어서 한번에 주석처리 하시던데 이거 어떻게 하신건가요?????
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티 쓰레드 질문 드립니다.
멀티 쓰레드 질문 드립니다. GameRoom 이 JobQueue를 가지고 있어서 멀트 쓰레드에서 안전하다고 하셨는데 GameRoom 의 Broadcast , Enter,Leave 등은 JobQueue 를 이용 하니 멀티 쓰레드에서 안전 한거 같은데 GameRoom 의 Flush 는 어떻게 안전 할수가 있나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
질문드립니다.
강의 내용을 약간 벗어난 내용 같기는 하지만 궁금해서 질문드려봅니다. Map의 콜리젼 데이터를 txt파일로 만들어서 클라와 서버에서 사용하고, 스탯 데이터와 같은 것들을 json 형태로 관리하고 있는데 이런 파일들은 얼마든지 악의적인 변경이 가능할 것 같은 생각이 들었습니다. AES 암호화 알고리즘을 C#에서 기본적으로 제공해주는 것으로 알고 있는데 파일을 암호화해서 저장하고 복호화해서 불러오는게 필요할까요? 키는 서버에서 받아서 진행하면 어떨까하는 생각이 들었습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷모아보내기 실습 보내는 갯수가 500으로 안떨어지는경우
더미클라이언트 수를 500으로 설정하고 실행 했을때 500으로 유지되지는 않고 267 정도로 계속 보내게 됩니다. 프로세스 메모리는 일정하게 유지가 되구요. 이런경우 프로세스 성능에 따라서 모아보내기가 적게 자주 보내게 될수도있나요? 예를 들어 while에서 패킷을 모아보내는 수가 500이 안차더라도 보낼수 있는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Action Invoke 질문입니다.
action 에 이벤트를 할당하고 Invoke 해서 실행시키는데 이게 그냥 실행시키는거랑 어떤 차이가 있을까요? Action<PacketSession, IPacket> action = null;if (_handler.TryGetValue(p.Protocol, out action)){ //1 action.Invoke(session, p); //2 action(session, p);}
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IP가 틀려서그런지 유니티에서 서버로 접속이 안되네요.
첫번째 사진이 서버 IP로그구요. 밑에 사진이 유니티 클라이언트 IP로그 입니다. 유니티에서 서버로 접속할때 OnConnectCompleted Fail: ConnectionRefused 로그가 뜨면서 플레이어 케릭터가 생성이 안되는 현상이 발생했습니다. 서버에 연결이 실패한 원인을 찾아보니 서버쪽에선 아이피가 :::1인반면 유니티쪽은 127.부터 시작하는 아이피로 서로 틀리더라고요. 서버쪽 로그를 보니 더미 클라에서 모아 보내기가 계속 찍히는거 보면 문제는 없어보입니다만, 이 경우 어떻게 해야될까요? 잘 부탁드립니다 ^^
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Packet Queue 질문
안녕하세요. "Rookiss"님, Packet Queue에 대해서 질문드리려고 합니다. Push() 에 대해서는 BackGround Thread가 계속 Push하므로 lock을 거는 이유가 맞다고 생각되는데 Pop()에 대해서는 Unity의 Main-Thread만 사용한다면 따로 lock을 걸 필요가 없다고 생각되는데 혹시 다른 이유가 있어서 lock을 거신건가요?? 답변해주시면 감사하겠습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Tag기능 대신 Poolable 컴포넌트를 만드신 이유가 궁금합니다.
좋은 영상 올려주셔서 감사합니다. 별로 중요한 내용은 아니지만 궁금증에 한 번 질문해봅니다. 기존의 경험으로 게임을 만들 때, 무언가를 분류해야 한다면 Tag를 많이 사용했습니다. 이 영상을 보지 않고 풀링 오브젝트 패턴을 스스로 만들었다면, Poolable태그를 만들어서 풀링하고 싶은 프리팹에게 걸어줬을 것 같아요. Poolable 컴포넌트를 이용했을 때의 장점이 있다면, 알고싶습니다!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
리소스 매니저 만들때 랩핑이라는게 나오는데 정확히 어떤 개념인건가요?
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 리소스 매니저를 만드실때 랩핑을 한다고 하시면서 막 뭔가 하시던데 정확히 어떤 개념인건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
void OnHitEvent() 오류
플레이어 OnHitEvent()는 잘 작동했었는데, 몬스터 OnHitEvent()가 잘 안되어서 (디버깅으로 확인 해보니 몬스터 OnHitEvent()으로 안들어 오는 현상 확인.) 애니메이션에 문제가 있나 다른 애니메이션으로 넣어봤더니 플레이어 OnHitEvent()까지 작동이 안되기 시작했습니다. 혹시 Base Controller와 PlayerController와 MonsterController 사이에 Init의 문제가 있을까 싶어서 몬스터 AI#1 강의를 계속해서 돌려봤는데 스크립트에는 문제가 없었습니다. 메일로 파일 보내드리니 확인부탁드립니다.. ㅠㅠ 혼자 해결해 나가보고싶어서 계속해서 해봤는데 잘 되질 않아 죄송합니다. 항상 감사드립니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
길이 없는 경우
해당 강의를 학습후 뒷부분 강의를 듣다가 문득 든 생각입니다. 목적지까지 길이 없는 경우가 만들어질수도 있다고 생각을 하는데 계속 실행해도 결국 목적지까지 길이 만들어지게 됩니다. 우연의 일치인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
실행시 자동으로 실행된다고 하셨는데
해당 방법은 디버그시 알아서 배치 파일을 열어준다는 의미인가요? 그렇다면 어떻게 할 수 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 메모리 배리어 강의 부분 관련해서 질문드립니다.
using System; using System.Threading; using System.Threading.Tasks; namespace ServerCore { class Program { static volatile int x = 0; static volatile int y = 0; static volatile int r1 = 0; static volatile int r2 = 0; static void Thread_1() { y = 1; //store y r1 = x; //load x } static void Thread_2() { x = 1; // store x r2 = y; //load y } static void Main(string[] args) { int count = 0; while(true) { count++; x = y = r1 = r2 = 0; Task t1 = new Task(Thread_1); Task t2 = new Task(Thread_2); t1.Start(); t2.Start(); Task.WaitAll(t1, t2); if (r1 == 0 && r2 == 0) break; } Console.WriteLine($"{count}번 만에 빠져나옴"); } } } 메모리 배리어 강의에서는 위 코드의 루프를 거의 100번 이하로 빠져나오는데 제가 했을때는 적으면 8000번 많으면 10만까지 루프를 돌더라구요. 어떤 차이점 때문에 이렇게 루프 반복 횟수가 차이나는 걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 선생님 Thread.Yeild(); 에 대해서 질문 합니다.
while(true) { int expected = 0; int desired = 1; if (Interlocked.CompareExchange(ref _locked, desired, expected) == expected) break; Thread.Yield(); } 이 코드를 정리를 해보면 만약에 A 쓰레드가 있고, B쓰레드가 있다 A쓰레드가 공유 자원을 점유하고 있으면 lock이 0에서 1로 바뀌고 B 쓰레드는 접근 하려니까 lock이 1이니까 계속 무한 루프를 돈다. 이것은 성능상의 저하를 불러 일으킨다. 왜? 쓸데없는 행동이기 때문에 따라서 A쓰레드가 공유자원을 사용을 끝날 때 까지 B쓰레드를 무한루프를 돌게 하지말고 재우는데 Thread.sleep, yeild.. 뭐 이런 함수를 이용해서 재우는데 그럼 무한 루프가 잠시 멈추는 상황이잖아요? 그럼 a쓰레드가 공유자원을 쓰고 나왔다는 것을 어떻게 알 수 있나요? 검색 해보니까 sleep을 os가 깨운다는데 그럼 정리를 해보면 면접관님 께서 만약 이런 질문을 하시면 일단 OS가 A 쓰레드가 할일을 끝냈으니, 잠자고 있던 B쓰레드를 깨워서 그때부터 반복을 해서 다시 LOCK 검사를 진행합니다. LOCK 변수 값이 0이라면 컨텍스트 스위칭이 일어나는데 A 쓰레드의 정보가 레지스터에서 지워지고 B 쓰레드 정보가 채워짐으로써 B 쓰레드가 CPU를 점유하고 이제 B쓰레드가 공유자원 _num변수를 사용해서 _num++연산이 진행이 됩니다. 이렇게 저는 해당 챕터 강의를 이해 하고 정리를 했거 든요 혹시 틀린 점이 있다면 알려주심 감사하겠습니다. 아 그 sleep 걸어놓고 os가 깨우는 거 맞는지도 알려주시면 감사하겠습니다. ^^
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
동일한 질문이 있는 것 같은데 이해가 잘 안되서 다시 질문 드립니다
transform.position += transform.TransformDirection(Vector3.forward); Vector3.forward는 (0,0,+1) 이것을 TransformDirection을 통해 월드좌표로 바꾸면 월드 +z축 방향으로 이동한다는 의미 아닌가요?? 저희가 원하는건 Player를 기준으로 한 로컬좌표에서 +z축 방향으로 이동하고 싶은것인데 말이죠 실제로 TransformDirection을 사용하지 않으면 그냥 월드좌표를 기준으로 진행하는데 여기서 TransformDirection을 통해 월드로 바꾼다는 것이 이해가 잘 되지 않습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이동 동기화들을 보면서 생각한게 있는데요.
만약에 애니메이션 이나 따로 동기화 하는 부분이라면 애니메이션 동기화를 예를들면, 파라미터 데이터를 하나씩 보내는거 보다는 한 캐릭터에 모든 파라미터 데이터를 모았다가 한번에 서버로 보내는게 최고에 방법인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
interface, abstract 차이에 대한 질문
제가 인터페이스와 abstract의 차이가 어려워서 인터넷을 찾아보던 중 다음과 같이 차이를 말해둔 것이 있던데 그 의미를 모르겠습니다. 인터페이스 : 구현이 아닌 서명만 가질 수 있다. abstract : 구현을 제공할 수 있다. 이 차이와 더불어서 "구현" 이라는 말도 정확히 무엇을 뜻하는지 헷갈립니다. 도와주세요..
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티쓰레드와 관련해서 질문이 있습니다.
멀티쓰레드를 학습하게 되면서 나름대로 정리를 해보았는데요. 멀티쓰레드 환경에서는 쓰레드가 공유하는 자원에 대한 일관성이 보장되어야 한다. 즉, 특정 쓰레드에서 공유 자원의 데이터를 변경하면 다른 쓰레드에서도 똑같이 변경된 데이터를 다뤄야한다. 이러한 문제를 해결하기 위해 쓰레드가 공유 자원에 접근하기 전 Lock을 걸고 들어가서 다른 쓰레드가 해당 자원에 접근하지 못하도록 막고, UnLock을 통해서 다른 쓰레드가 접근할 수 있게 해준다. 이 때 접근한 쓰레드는 변경된 공유 자원 데이터를 사용하게 된다. 이렇게 이해한게 맞는건가요 ? 원자성이라는 개념을 이해하기를 하나의 작업을 처리할 때 수행되는 모든 과정들을 일련의 한 묶음으로 보고 이것은 마치 더이상 나누어지지 않는 것처럼 모두 수행되거나 모두 수행되지 않아야 한다. 그런데 Lock을 통해서 원자성을 구현한다고 이해하고 있는데 이게 맞는건지 궁금합니다... 왜냐하면 Lock을 통해서 공유자원에 다른 쓰레드가 접근을 못하게 막는것은 맞지만 Unlock을 할 때까지 여러가지 작업을 할 수 있는데 그것은 원자성을 보장하지 않는 거 같다고 생각해서입니다.