{"id":15160306,"url":"https://github.com/bckkingkkang/2d_game_practice","last_synced_at":"2026-01-19T09:01:24.503Z","repository":{"id":253024788,"uuid":"842222003","full_name":"bckkingkkang/2D_Game_practice","owner":"bckkingkkang","description":"새싹부터 시작하는 Unity 게임 개발 2D","archived":false,"fork":false,"pushed_at":"2024-10-04T19:43:47.000Z","size":691,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T18:41:23.007Z","etag":null,"topics":["2d-game","csharp","game-development","unity"],"latest_commit_sha":null,"homepage":"https://www.inflearn.com/course/%EC%83%88%EC%8B%B9%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-unity/dashboard","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/bckkingkkang.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-13T23:22:40.000Z","updated_at":"2024-10-20T09:05:19.000Z","dependencies_parsed_at":"2025-10-24T18:30:55.201Z","dependency_job_id":null,"html_url":"https://github.com/bckkingkkang/2D_Game_practice","commit_stats":null,"previous_names":["bckkingkkang/2d_game_practice"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bckkingkkang/2D_Game_practice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bckkingkkang%2F2D_Game_practice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bckkingkkang%2F2D_Game_practice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bckkingkkang%2F2D_Game_practice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bckkingkkang%2F2D_Game_practice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bckkingkkang","download_url":"https://codeload.github.com/bckkingkkang/2D_Game_practice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bckkingkkang%2F2D_Game_practice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28565001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T08:53:44.001Z","status":"ssl_error","status_checked_at":"2026-01-19T08:52:40.245Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["2d-game","csharp","game-development","unity"],"created_at":"2024-09-26T22:43:47.590Z","updated_at":"2026-01-19T09:01:24.472Z","avatar_url":"https://github.com/bckkingkkang.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"- [에셋 다운로드 및 배치, 중력 구현](https://blog.naver.com/bc_pokemonmaster/223566431376)\n- [MonoBehaviour](https://blog.naver.com/bc_pokemonmaster)\n- [Player 이동](https://blog.naver.com/bc_pokemonmaster/223567945263)\n- [Player 점프](https://blog.naver.com/bc_pokemonmaster/223569781918)\n- [충돌 감지 이벤트](https://blog.naver.com/bc_pokemonmaster/223583642200)\n\n- [Prefab(프리팹)](https://blog.naver.com/bc_pokemonmaster/223595481156)\n- [Instantiate \u0026 Destroy](https://blog.naver.com/bc_pokemonmaster/223595488115)\n\n![1](https://github.com/user-attachments/assets/f9925f3f-e132-4d5d-af7d-81d66d5dc766)\n\n* DOTween\n* Lerp\n\n\n# 2D_Game_practice\n\n* Scene View\n: 작업 중인 씬 내부에 모든 오브젝트를 표시, 배치하는 공간\n* Game View\n: 카메라에서 렌더링되는, 최종적으로 퍼블리시된 애플리케이션을 보여주는 공간\n* Hierarchy\n: 작업 중인 씬 내부에 존재한 모든 오브젝트를 관리하는 공간\n* Inspector\n: 오브젝트, 에셋 등과 같이 Unity 에디터의 거의 모든 요소에 대한 프로퍼티를 확인 및 편집하는 공간\n* Project\n: 프로젝트와 관련된 모든 파일이 표시되는 공간\n* Console\n: 코드를 활용한 디버깅을 표시하는 공간\n\n### 단축키   \nHierarchy_(W) : 오브젝트의 Position 값을 변경   \nHierarchy_(E) : 오브젝트의 Rotation 값을 변경   \nHierarchy_(R) : 오브젝트의 Scale(크기) 값 변경   \nHierarchy_(T) : 오브젝트의 위치, 크기 변경   \n\n### 변수와 연산자\n**변수**\n\u003e * 변할 수 있는 값   \n\u003e * 프로그래밍적 의미로는 데이터를 저장하는 곳\n\n### 메소드와 접근자\n* 접근자 : 접근 범위를 결정\n    * default\n    * private : 선언한 클래스 내부에서만 접근 가능\n    * public : 모든 곳에서 해당 변수나 메소드에 접근이 가능\n    * internal : 같은 어셈블리에서만 public으로 접근 가능\n    * protected : 상속 관계에서만 접근 가능\n----------------------------------------------------------------------\n### Unity의 변수\n#### Unity의 변수 1. Game Object\n\u003e 'GameObject'는 Unity에서 게임을 구성하는 기본적인 요소로, 게임 내 모든 객체를 나타낸다.    \n\u003e\u003e 게임에 등장하는 캐릭터, 배경, 아이템 등 모든 물체는 'GameObject'로 표현된다.    \n\u003e\u003e 그러나 'GameObject' 자체는 단순히 빈 껍데기 역할만 하며, 이 오브젝트에 의미를 부여하기 위해서는 다양한 컴포넌트를 추가해야 한다.    \n\u003e\u003e 컴포넌트는 'GameObject'에 기능을 더해주는 요소로 'Transform', 'Collider', 'Rigidbody'와 같은 물리적 시각적 속성을 추가할 수 있다. 이러한 컴포넌트를 통해 게임 오브젝트는 특정한 동작이나 외형을 가지게 된다.   \n\n##### GameObject의 주요 기능\n**1. SetActive(bool state)**   \nGameObject의 활성화 상태를 변경한다. 'GameObject'는 활성화 상태일 때만 게임 내에서 동작하며, 비활성화 상태일 때는 모든 컴포넌트가 동작을 멈춘다.   \n\u003e true : 오브젝트를 활성화한다. 즉, 게임에서 보이고 동작한다.   \n\u003e false : 오브젝트를 비활성화한다. 즉, 게임에서 보이지 않으며 동작하지 않는다.\n\n`예를 들어 어떤 NPC가 특정 조건에서만 등장해야 하는 경우 NPC의 'GameObject'를 비활성화 상태로 두었다가 조건이 충족되면 활성화할 수 있다.`     \n\n```C#\nGameObject a;\na.SetActive(true);\na.setActive(false);\n```\n\n**2. GetComponent\u003cT\u003e()**    \n이 함수는 해당 'GameObject'가 가지고 있는 특정 컴포넌트를 반환한다. 'T'는 찾고자 하는 컴포넌트의 타입을 지정한다.\n예를 들어 'SpriteRenderer' 컴포넌트를 얻고 싶다면 'GetComponent\u003cSpriteRenderer\u003e()'를 사용한다. 이 방법을 통해 오브젝트에 부착된 컴포넌트에 접근하여 다양한 동작을 제어할 수 있다.    \n\n```C#\npublic class FirstScript : MonoBehaviour\n\n{\n    public GameObject a;\n\n    private void Start()\n    {\n        a.GetComponent\u003cSpriteRenderer\u003e().color = Color.yellow;\n    }\n}\n```\n\n#### Unity의 변수 2. Transform\n'Transform' 컴포넌트는 Unity에서 모든 게임 오브젝트에 기본적으로 포함되는 필수 컴포넌트이다. \nUI 요소를 제외한 모든 게임 오브젝트는 'Transform'을 가지고 있으며, 이 컴포넌트를 통해 오브젝트의 위치(Position), 회전(Rotation), 크기(Scale)를 조정할 수 있다.\nTransform 변수를 선언하여 오브젝트의 위치, 회전, 크기를 쉽게 관리할 수 있다.\nVector3 변수를 사용하여 'Transform'의 위치, 회전, 크기를 정의한 후 Start() 메서드에서 적용한다.\n\n```C#\npublic class FirstScript : MonoBehaviour\n{\n    public Transform a;\n\n    public Vector3 a_position;\n    public Vector3 a_rotation;\n    public Vector3 a_scale;\n\n    private void Start()\n    {\n        a.position = a_position;\n        a.eulerAngles = a_rotation;\n        a.localScale = a_scale;\n    }\n```\n\n\u003e * a.position : 오브젝트의 현재 위치\n\u003e * a.eulerAngles : 오브젝트의 회전 각도\n\u003e * a.localScale : 오브젝트의 크기\n\n`이렇게 되면 Trnasform 컴포넌트의 위치, 회전, 크기가 a_position, a_rotation, a_scale 에 지정된 값으로 설정된다. 이와 같이 Transform을 사용하여 게임 오브젝트의 움직임이나 크기 변화를 손쉽게 제어할 수 있다.`\n\n또한 Transform은 게임 오브젝트의 계층 구조를 관리하는 데에도 중요한 역할을 한다.\n부모-자식 관계를 설정하면 부모 오브젝트의 Transform 변화가 자식 오브젝트에도 영향을 미치게 된다.\n\n#### Unity의 변수 3. Vector\n\u003e Vector는 Unity에서 좌표를 표현하는 데 사용되는 중요한 개념으로 2D와 3D 공간에서 오브젝트의 위치, 방향, 크기 등을 정의할 수 있는 다양한 벡터 타입이 있다.\n\n* Vector2   \n2D 좌표계를 나타내며, x축과 y축을 포함한다. 주로 2D 게임에서 사용되며, 평면 상의 위치를 표현할 때 유용하다.\nVector2 position2D = new Vector2(3.0f, 5.0f);\n여기서 postion2D 는 x=3.0, y=5.0의 좌표를 가지는 2D 벡터이다.\n\n* Vector3   \n3D 좌표계를 나타내며 x, y, z축을 포함한다. 3D 게임에서 주로 사용되며, 공간상의 위치뿐만 아니라 오브젝트의 회전, 크기를 정의할 때도 사용된다.\nVector3 position3D = new Vector3(2.0f, 4.0f, 6.0f);\npostion3D 는  x=2.0, y=4.0, z=6.0의 좌표를 가지는 3D 벡터를 정의한다.\nVector3는 게임 오브젝트의 위치뿐만 아니라 Transform 컴포넌트의 위치, 회전, 크기 값을 정의할 때도 자주 사용된다.\n\n\n---------\n## Monobehaviour\n\u003e Unity 엔진을 사용해 게임을 개발할 때, 스크립트를 작성하기 위해 기본적으로 상속받아야 하는 클래스\n\u003e\u003e Unity의 모든 스크립트는 이 'MonoBehaviour' 클래스를 기반으로 동작하며, 이를 통해 Unity 엔진과 상호작용할 수 있다.\n\nMonoBehaviour는 Unity에서 제공하는 C# 클래스 중 하나로, Unity의 게임 오브젝트에 동작을 추가할 때 사용된다.   \nUnity에서 스크립트를 작성할 때, 이 클래스를 상속받음으로써 Unity의 생명 주기 이벤트를 활용할 수 있으며, 이를 통해 게임 오브젝트의 상태를 업데이트하거나 특정 동작을 구현할 수 있다.   \n\n```C#\nusing UnityEngine;\n\npublic class MyScript : MonoBehaviour\n{\n    // 동작 구현\n}\n```\n\n### MonoBehaviour의 주요 기능\nUnity 엔진과의 상호작용을 돕기 위해 다양한 기능과 메서드를 제공한다. 이를 통해 게임 개발자는 복잡한 게임 로직을 구현할 수 있다.   \n* [생명 주기 메서드 - Lifecycle Methods](https://blog.naver.com/bc_pokemonmaster/223559219577)\n* Unity 이벤트 메서드\n    * OnCollisionEnter() : 충돌이 발생했을 때 호출\n    * OnTriggerEnter() : 트리거 충돌이 발생했을 때 호출\n    * OnMouseDown() : 오브젝트가 클릭되었을 때 호출\n\n### MonoBehaviour 활용 시 주의사항\n1. 스크립트 활성화/비활성화\n   * MonoBehaviour를 상속받은 스크립트는 게임 오브젝트의 활성화 상태에 따라 동작이 달라진다. 게임 오브젝트가 비활성화되면 'update()'와 같은 메서드가 호출되지 않는다. 이를 통해 불필요한 연산을 줄일 수 있다.\n2. Coroutine (코루틴)\n   * MonoBehaviour는 Coroutine을 통해 비동기 작업을 처리할 수 있게 해준다. 코루틴은 게임 루프와 별개로 실행되면서, 일정 시간 후에 동작을 수행하거나 반복 작업을 처리할 때 유용하다.\n3. 일부 경우에는 MonoBehaviour를 상속받지 않는 클래스가 필요할 수 있다.\n   * 예를 들어 단순히 데이터만을 저장하는 클래스이거나, 다른 로직을 처리하는 일반적인 C# 클래스를 구현할 경우네는 MonoBehaviour를 상속받지 않아도 된다.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbckkingkkang%2F2d_game_practice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbckkingkkang%2F2d_game_practice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbckkingkkang%2F2d_game_practice/lists"}