묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨AI 시대의 혁신적인 게임 개발 입문 with Unity6
카메라 보더
카메라 흰색 보더라인은 어디서 켜고 끌수있나요?
-
해결됨C# 프로그래밍 기초부터 실전 활용까지
30강 듣고 질문이있습니다.
안녕하십니까 선생님 ㅎ30번 강의 메서드 매개변수 강의중에 1:58초에 This. 을 한번에 Model 이랑, Color앞에 넣으시는거는 어떻게 하신건지 궁금합니다.
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
20) 16. 저장프로시저 쪽 new MapperConfiguration(cfg => { })
var configuration = new MapperConfiguration(cfg => { });이 부분 오류가 나던데 var configuration = new MapperConfiguration(cfg => { }, NullLoggerFactory.Instance);저는 이렇게 해서 오류 해결했습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Part7 Part9 질문이 있습니다.
포폴을 Part7 기반으로 만들고 있습니다.클라로 지원을 할예정인데 Part7만을 기반으로 포폴을 만들어도 괜찮나요?그리고 DB연동같은 부분들을 해보고싶은데 Part8을 듣지 않고도 Part9부터 들어도 괜찮을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
UnhandledException 으로 서버 터지는 경우
안녕하세요,해당 강의에서 만든 코드 기반으로 제 게임에 맞춘 서버를 AWS EC2에서 몇 주째 실행중입니다. 개발 컴퓨터에서 테스트할때도 그렇고 EC2에서 할때도 그렇고 강제 종료될때가 있어서 꺼지면 로그 남기게 해서 몇개 원인을 찾았는데요, UnhandledException이 뜨면서 강제종료 되는 경우가 두가지 있는 것 같습니다.제 유추 상으로는 포트포워딩으로 게임 포트 이외에는 인바운드를 거절했는데도 쓰레기IP들이 서버를 터트리고 가는 것 같습니다. 첫번째.[11-24 18:31:38] FATAL [UnhandledException] System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) at System.Net.Sockets.Socket.Shutdown(SocketShutdown how) at ServerCore.Session.Disconnect() in \Server\ServerCore\Session.cs:line 103 at ServerCore.Session.OnRecvCompleted(Object sender, SocketAsyncEventArgs args) in \Server\ServerCore\Session.cs:line 193 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.Sockets.SocketAsyncEventArgs.<>c.<.cctor>b__173_0(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) at System.Threading.ThreadPoolTypedWorkItemQueue`2.System.Threading.IThreadPoolWorkItem.Execute() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()이 오류는 Session.cs에 소켓 Shutdown에서 발생했습니다.public void Disconnect() { if (Interlocked.Exchange(ref _disconnected, 1) == 1) return; OnDisconnected(_socket.RemoteEndPoint); _socket.Shutdown(SocketShutdown.Both); _socket.Close(); Clear(); }서버가 터지면 안되니 임시 방편으로 try catch로 감싸놨습니다.try { _socket.Shutdown(SocketShutdown.Both); } catch (Exception e) { Console.WriteLine($"[NEW ADDED] SOCKET SHUTDOWN Failed {e}"); } try { _socket.Close(); } catch (Exception e) { Console.WriteLine($"[NEW ADDED] SOCKET CLOSE Failed {e}"); } 두번째.[11-25 10:16:12] FATAL [UnhandledException] System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Sockets.Socket'. at System.Net.Sockets.Socket.get_RemoteEndPoint() at ServerCore.Listener.OnAcceptCompleted(Object sender, SocketAsyncEventArgs args) in Server\ServerCore\Listener.cs:line 45 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Net.Sockets.SocketAsyncEventArgs.<>c.<.cctor>b__173_0(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) at System.Threading.ThreadPoolTypedWorkItemQueue`2.System.Threading.IThreadPoolWorkItem.Execute() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() --------------------------------------------------이 오류는 Listener.cs의 RemoteEndPoint를 가져오는 부분에서 발생했는데요, void OnAcceptCompleted(object sender, SocketAsyncEventArgs args) { if (args.SocketError == SocketError.Success) { Session session = _sessionFactory.Invoke(); session.Start(args.AcceptSocket); session.OnConnected(args.AcceptSocket.RemoteEndPoint); } else Console.WriteLine(args.SocketError.ToString()); RegisterAccept(args); }비쥬얼 스튜디오에서도 args.AcceptSocket.RemoteEndPoint 는 null일수도 있다고 뜨기는 하는데이부분도 != null을 붙여서 해야하는지 try catch로 감싸야하는지 궁금합니다.근본적인 원인은 예외가 왜 발생하는지 알아야하는데 전부 API 단이라 try catch 혹은 != null 빼고는 대책을 강구하기가 어렵습니다. 요약하자면이런 UnhandledException이 나올때 해당 코드를 try { } catch로 해주것이 괜찮은 방법인가요?혹시 근본적인 해결책이 있다면 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
프로퍼티 강의 질문 있습니다.
안녕하세요? Property 강의에 11분 23초 구간에서 이해가 되지 않는 부분이 있어 질문 드립니다.Knight 클래스에서 선언한 Hp 프로퍼티에서 get, set의 대상이 되는 변수가 int hp라는 것은 명시되지 않았는데, 어떻게 _hp에 세팅이 되고, 불러올 수 있게 되는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
.
.
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
UserDataManager 코드 질문입니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UserDataManager : SingletonBehaviour<UserDataManager> { public bool ExistsSavedData { get; private set; } public List<IUserData> UserDataList { get; private set; } = new List<IUserData>(); protected override void Init() { base.Init(); UserDataList.Add(new UserSettingData()); UserDataList.Add(new UserGoodsData()); } public void SetDefaultUserData() { for(int i = 0; i < UserDataList.Count; i++) { UserDataList[i].SetDefaultData(); } } public void LoadUserData() { ExistsSavedData = PlayerPrefs.GetInt("ExistsSavedData") == 1 ? true : false; if(ExistsSavedData) { for (int i = 0; i < UserDataList.Count; i++) { UserDataList[i].LoadData(); } } } public void SaveUserData() { bool hasSaveError = false; for(int i =0; i < UserDataList.Count; i++) { bool isSaveSuccess = UserDataList[i].SaveData(); if(!isSaveSuccess) { hasSaveError = true; } } if(!hasSaveError) { ExistsSavedData = true; PlayerPrefs.SetInt("ExistsSavedData", 1); PlayerPrefs.Save(); } } }위 코드의if(!hasSaveError) { ExistsSavedData = true; PlayerPrefs.SetInt("ExistsSavedData", 1); PlayerPrefs.Save(); }이 부분에서 PlayerPrefs에 "ExistsSavedData"를 1로 저장해주는 이유가 있나요??제 짧은 생각으로는 ExistsSavedData가 어차피 true로 처리되기 때문에 필요가 없지 않을까라는 의견입니다이와 더불어 LoadUserData()에서도 PlayerPrefs.GetInt()를 안하고 if(ExistsSavedData) 문만 가지고는 안되는지 궁금합니다. 강의 잘 듣고 있습니다. 감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
디버그 불가.. Unity에 연결 불가
어제까지 됬었는데, 갑자기 안됩니다. 찾아보니 갑자기 또 된다고 하시는분 있던데.. 해결 방법 아시는분 답변 부탁드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
.
.
-
해결됨데이터베이스를 결합한 Unity 실전 게임 만들기
GetValueAsync(1)강의에서 Update메소드 질문입니다.
질문은 언제든지 해주세요!질문은 강의와 관련된 부분만 해주시면 됩니다!userInfoCache로 처음 Start할때 불러와서 저장을 한다음에 Update에서 비동기프로그래밍으로 CoinText를 업데이트 해주셨는데어차피 캐시값을 불러와 UI를 계속 갱신하는건 불필요한 작업 아닌가요?Update메소드에서 왜 작업을 하는지 궁금합니다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
Addressables로 등록한 Slice된 Sprite의 하위 Sprite 접근법에 대해 질문드립니다
현재 Effect animation을 만드는 중, animator의 사용 대신 SpriteRenderer의 sprite만 교체하는 방식으로 최적화를 시도하고 있습니다.여기서 문제된 점이 class에 sprite[]를 선언 후 해당 class를 부착한 GameObject에 inspector에서 미리 slice된 sprite의 내용물들을 할당해줄 경우, Sprite(2D and UI)타입은 메인 스레드 외에서 할당되면 안된다는 에러가 나서 런타임 내에 할당하는 방식을 시도중입니다.Addressables를 이용하여 slice된 Sprite를 로딩할 경우, Sprite의 slice된 첫번째 sprite만 Load가능하고 나머지는 호출이 불가능합니다. 이를 해결하기 위해 LoadAssetAsync대신 LoadAssetsAsync를 이용한 LoadAsync 생성 등 여러가지로 시도해보았으나 전부 실패하여 결국 Sprite를 Unity 내에서 slice하는 대신 각자 개별 Sprite로 만들어서 import해야 한다는 방식에 이르렀습니다.다만, 이 방식은 최적화를 위해 굳이 animator를 사용하지 않으려고 한 의미가 없어진다고 판단되어 Addressables에서 Slice된 Sprite의 사용 방법에 대한 의견 여쭤보고 싶습니다.
-
해결됨【2025年版】Unity×C#入門講座|2Dタワーディフェンスゲーム開発マスター|クリック&バトルシステムの作り方
수업 자료 링크를 어디서 볼 수 있나요?
쩝.. 일본 강의를 번역한 거였군요.좀 표시해 두시지.수업 자료 링크만 알려주십시오.한번 공부해 보겠습니다.
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
수업에서는 게임 로직 루프에서의 게임 틱(game tick)에 대해 다루지 않아 CPU 사용률이 항상 높게 유지되는 문제가 발생한다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
수업에서는 게임 로직 루프에서의 게임 틱(game tick)에 대해 다루지 않아 CPU 사용률이 항상 높게 유지되는 문제가 발생한다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
유니티 데이터 저장객체 ScriptableObject에 대해 의견 여쭤보고 싶습니다
데이터 저장 방식에 대하여 공부하던 중, ScriptableObject라는 유니티 데이터 저장 용 객체에 대해 알게 되었습니다.보통 현업에서 일할 때 캐릭터/몬스터의 스텟 등 에디터 내에서 조절해주는 경우는 ScriptableObject를 사용하고, 세이브 파일, 설정 값 저장 등 런타임 동안 읽고 쓸 가능성이 있는 데이터는 Json 및 xml 파일에 데이터를 저장한다고 배웠습니다.선생님의 수업에서 DataManager들은 스텟같은 전자에 속하는 데이터들도 Json or xml 파일로 데이터를 저장하는 것으로 배워서 궁금한 점이 1. 추측하기로는 배포 후 밸런스 패치 등 외부에서 스텟등을 조절해주기 위해 Json방식을 쓰는 것일까 하는데 맞나요?2. ScriptableObject 방식이 문자열 읽고 파싱하고 C#데이터로 바꾸는 Json 사용 방식보다 성능이 우수하다고 하는데 전자를 별로 사용하지 않는 이유가 있나요?3. 현업에서는 ScriptableObject를 자주 사용하나요?4. 선생님의 ScriptableObject에 대한 개인 의견(ex. 불편함, 효율적임, ...)은 어떠신가요?이렇게 4가지입니다.항상 좋은 수업들 올려주셔서 감사합니다. 새로운 강의를 볼 때마다 새로운 가르침을 얻을 수 있어 좋습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
컨텐츠 단, 엔진 단
컨텐츠 단, 엔진 단이 뭐에요?
-
미해결【2025年】Unity × C#で作る本格2D戦略型タワーディフェンスゲーム開発講座
녹음 확인 해주세요
4분50초경에 이상한 목소리가 녹음이 되어 있는것 같습니다
-
해결됨C# 프로그래밍 기초부터 실전 활용까지
오늘 첫 강의를 들었습니다.
안녕하세요 오늘 첫 강의를 결제하고 들었는데 혹시 Visual Studio 자료는 다운받는곳은 없나요??필기같은것이 되어있는 자료? 혹시 어디에서 다운받는지 알려주시면 감사하겠습니다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
안녕하세요 선생님 공부중에 궁금한게 있어서 질문 드려요
안녕하세요 선생님 현재 올려주신 게임을 하나하나 분석하면서 공부하고 있는 취준생 입니다.다름이 아니라 이건 치트를 쓰지 않으면 잘 찾을수 없는 부분인데 제가 이해한게 맞는지 궁금하여 질문 드립니다.일단 첫번째 버그? 이상한 부분은 서포트 스킬을 배웠을때 수치 변화 입니다. 예를들어 공격력을 5프로 올리는 서포트 스킬을 배웠을때 5프로 수치가 상승해야 하는데 10프로가 상승을 하길래 브레이크 포인트로 차근차근 넘겨보니 UpdatePlayerStat 함수를 호출할대 InitCreaureStat 을 호출하는데 거기서 Atk,MaxHp 등의 값을 곱해주고 다시 updateplayerstat 에서 처리를 또 해주더라구요 그래서 일단은 InitCreautreStat 함수 부분에 Stat 처리를 해주는 부분을 주석처리 해서 중복으로 서포트 스킬의 general 타입들이 적용되는걸 막았는데 이렇게 하는게 맞는건지 궁금합니다. 두번째 이상한 부분은 special 서포트 스킬 부분입니다.이것도 역시 치트를 쓰지않으면 정말 찾기가 힘든 부분인데 현재 skillbook 스크립트 부분에서 addsupportskill 을 통해서 서포트 스킬을 추가하고 있는데 여기서 special 서포트 스킬의 경우에 skillbase 에 updateskilldata 함수에서 해당 공격스킬의 추가 값을 처리해 주는걸로 알고 있습니다 근데 여기서 예를들어 일렉트로닉 필드의 범위를 0.1 증가해주는 스킬을 배웠다고 했을때 처음에 배울때는 0.1이 정상적으로 증가를 하는데 두번째 일렉트로닉 필드 0.1 증가를 배웠을때 SupportSkills 리스트를 순회하면서 값을 적용하는데 이미 0.1이 증가된 specail 스킬을 한번 더 순회를 하여 0.1 + 0.1 해서 0.2가 되어야 하는데 0.1증가되서 0.2가 된 상태에서 한번 더 순회를 해서 0.3이 되는 현상이 있다는걸 알게 되었습니다.그래서 현재 해결책으로는 AddSupportSkill 에서 Special 서포트 스킬을 SkillBase 의 updateskillData 부분에서 처리를 넘겨줬는데 그러지 않고 그냥 AddSupportSkill 함수 내에서 변경된 값을 추가를 하고 UpdateSkillData 함수로 넘기지 않고 처리 하는 방식으로 수정을 해서 이상하게 수치가 나오는 부분을 수정을 하고 기존의 Skillbase 스크립트 부분의 UpdateSKillData 함수 부분에서 처리하는 부분을 주석처리 해줘서 일단 중첩되서 처리가 되는 값을 수정을 해주었는데 혹시 더 나은 방법이 있는지 궁금하여 질문을 남깁니다.일단 이렇게 좋은 자료를 주셔서 너무 감사드리고 앞으로도 계속 꾸준히 코드를 뜯어보며 공부를 열심히 하겠습니다. 날씨가 많이 추운데 감기 조심하시고 공부하다가 궁금한 부분은 이곳에 또 남기도록 하겠습니다.