{"id":27985199,"url":"https://github.com/yarogono/3d_multi_shooting_game","last_synced_at":"2026-04-15T16:03:47.878Z","repository":{"id":193129538,"uuid":"687881818","full_name":"yarogono/3D_Multi_Shooting_Game","owner":"yarogono","description":"유니티 3D 멀티 슈팅게임","archived":false,"fork":false,"pushed_at":"2024-04-13T15:25:01.000Z","size":49696,"stargazers_count":2,"open_issues_count":8,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-05-08T06:58:35.426Z","etag":null,"topics":["3d-game","csharp","gameserver","mysql","unity"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yarogono.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-06T07:47:43.000Z","updated_at":"2024-08-27T09:52:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"38539a3d-686c-496b-b0d7-1df272b18e50","html_url":"https://github.com/yarogono/3D_Multi_Shooting_Game","commit_stats":null,"previous_names":["yarogono/2d_practice","yarogono/3d_multi_shooting_game"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yarogono/3D_Multi_Shooting_Game","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yarogono%2F3D_Multi_Shooting_Game","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yarogono%2F3D_Multi_Shooting_Game/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yarogono%2F3D_Multi_Shooting_Game/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yarogono%2F3D_Multi_Shooting_Game/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yarogono","download_url":"https://codeload.github.com/yarogono/3D_Multi_Shooting_Game/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yarogono%2F3D_Multi_Shooting_Game/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000744,"owners_count":26082879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-game","csharp","gameserver","mysql","unity"],"created_at":"2025-05-08T06:58:33.767Z","updated_at":"2025-10-09T00:08:14.138Z","avatar_url":"https://github.com/yarogono.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 혼자 만들어보는 3D 멀티 액션게임\n---\n\n3D 탑다운 멀티 액션 게임입니다.\n클라이언트부터 게임 서버 엔진, Rest API 서버까지 직접 구현한 프로젝트입니다.\n\n\u003cbr/\u003e\n\n# 기술 스택(Tech stack)\n---\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003e분류\u003c/th\u003e\n\t\t\u003cth\u003e기술\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr align=\"center\"\u003e\n\t\t\u003ctd\u003eLanguage\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/CSharp-purple?style=for-the-badge\u0026logo=csharp\u0026logoColor=\"\u003e\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr align=\"center\"\u003e\n\t\t\u003ctd\u003eGame Engine\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Unity-black?style=for-the-badge\u0026logo=unity\u0026logoColor=white\"\u003e\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr align=\"center\"\u003e\n\t\t\u003ctd\u003eServer\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/ASP.NET Core-blue?style=for-the-badge\u0026logo=.net\u0026logoColor=white\"\u003e\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr align=\"center\"\u003e\n\t\t\u003ctd\u003eDB\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge\u0026logo=MySQL\u0026logoColor=white\"\u003e\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr align=\"center\"\u003e\n\t\t\u003ctd\u003eOther\u003c/td\u003e\n\t\t\u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Entity Framework Core-purple?style=for-the-badge\"\u003e\u003cbr\u003e\n\t\t    \u003cimg src=\"https://img.shields.io/badge/Nginx-green?style=for-the-badge\u0026logo=nginx\u0026logoColor=white\"\u003e\n\t\t\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr/\u003e\n\n# 아키텍처(Architecture)\n---\n\n\u003cimg src=\"https://github.com/yarogono/3D_Multi_Shooting_Game/assets/70641418/6668aefb-4f88-44df-bb90-bf37e9607623\"\u003e\n\n\u003cbr/\u003e\n\n\n# DB 설계\n---\n\n![image](https://github.com/yarogono/3D_Multi_Shooting_Game/assets/70641418/73544b14-1c92-48f0-a447-4c5147da0313)\n\n\u003cbr/\u003e\n\n# 기술 내용\n---\n\n개발을 하면서 만났던 문제 혹은 개선할 점을 작성해봤습니다.  \n구현한 내용을 회고하고 좀 더 자세히 공부하고 습득하기 위해 블로그에 정리했습니다.  \n(블로그 글 링크를 누르시면 블로그로 이동됩니다.)\n\n\u003cbr/\u003e\n\n## 클라이언트\n- 캐릭터가 벽을 통과하는 문제를 Raycast를 사용해서 벽을 감지해서 이동하지 못하도록 해결([블로그](https://velog.io/@yarogono/Unity-%EC%BA%90%EB%A6%AD%ED%84%B0%EA%B0%80-%EB%B2%BD%EC%9D%84-%ED%86%B5%EA%B3%BC%ED%95%98%EB%8A%94-%EB%AC%B8%EC%A0%9C))\n- 반복적으로 작성되는 싱글톤 코드를 제네릭 클래스를 사용해 통합해서 관리하도록 구현 ([블로그](https://velog.io/@yarogono/Unity-%EB%B0%98%EB%B3%B5%EB%90%98%EB%8A%94-%EC%8B%B1%EA%B8%80%ED%86%A4-%EC%BD%94%EB%93%9C-%ED%86%B5%ED%95%A9-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0))\n- GameObject.Find()가 씬의 모든 GameObject와 문자열로 비교하는 성능이슈와 런타임 오류 위험성을 인지하고 개선([블로그](https://velog.io/@yarogono/Unity-GameObject.Find%EC%9D%98-%EC%84%B1%EB%8A%A5-%EC%9D%B4%EC%8A%88))\n- 로컬에서 멀티플레이 게임을 테스트하기 위해 다중 클라이언트를 빌드 후 실행 할 수 있도록 구현([블로그](https://velog.io/@yarogono/C-Unity-%EB%A9%80%ED%8B%B0%ED%94%8C%EB%A0%88%EC%9D%B4-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85))\n\n\u003cbr/\u003e\n\n## 서버\n- 집에 있는 여분의 컴퓨터의 우분투 환경에 C# 게임 서버 환경 구축([블로그](https://velog.io/@yarogono/C-%EB%82%A8%EB%8A%94-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90-%EA%B2%8C%EC%9E%84-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC))\n- 해외에서 해킹 시도를 하는 것을 로깅 시스템을 통해 확인하고, NGINX를 사용해 해외 IP 차단해 대처([블로그](https://velog.io/@yarogono/NGINX%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%ED%95%B4%EC%99%B8-%EC%84%9C%EB%B2%84-%EC%B0%A8%EB%8B%A8%ED%95%98%EA%B8%B0%EC%84%9C%EB%B2%84-%EB%B3%B4%EC%95%88))\n- DataManager를 구현해 기획적으로 수정 소요가 많은 아이템 데이터를 Json으로 저장하고 불러오도록 구현([블로그](https://velog.io/@yarogono/%EA%B2%8C%EC%9E%84-%EC%95%84%EC%9D%B4%ED%85%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EC%96%B4%EB%94%94%EC%84%9C-%EA%B4%80%EB%A6%AC%ED%95%98%EB%A9%B4-%EC%A2%8B%EC%9D%84%EA%B9%8C%EC%84%9C%EB%B2%84-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8))\n- 유저의 비정상적인 종료, 연결을 PingPong 시스템을 사용해 감지하고 서버에서 연결을 종료합니다.[(블로그)](https://velog.io/@yarogono/%EA%B2%8C%EC%9E%84-%EC%84%9C%EB%B2%84-%EC%9C%A0%EC%A0%80%EC%9D%98-%EB%B9%84%EC%A0%95%EC%83%81%EC%A0%81%EC%9D%B8-%EC%A2%85%EB%A3%8C-%EC%97%B0%EA%B2%B0-%ED%95%B4%EC%A0%9C%ED%95%98%EA%B8%B0PingPong-%EC%8B%9C%EC%8A%A4%ED%85%9C)\n- Service, Repository 패턴 적용해서 Controller 코드 분리하기. 객체지향적으로 코드 수정[(블로그)](https://velog.io/@yarogono/ASP.NET-Core-Service-Repository-%ED%8C%A8%ED%84%B4-%EC%A0%81%EC%9A%A9%ED%95%B4%EC%84%9C-Controller-%EC%BD%94%EB%93%9C-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyarogono%2F3d_multi_shooting_game","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyarogono%2F3d_multi_shooting_game","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyarogono%2F3d_multi_shooting_game/lists"}