[Day 3] Flappy Bird Tutorial 2
오블완 챌린지 3일차
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif)
늘어지게 자다가 일어나서
블로그 쓰고 기타연습 할 생각에
신난 GamJia 입니다
어제 강의에 이어서
Flappy Bird를 만들어 보겠습니다
어제 분리한 Sprite들을 배치해보는데
캐릭터가 가려져서 안 보이는 상황입니다
물론 가린게 바닥이라 밑으로 내리면
당연히 보이겠지만 Sprite Renderer의
Order in Layer를 수정해서 캐릭터가
보일 수 있게 해주겠습니다
Order in Layer의 숫자가 클 수록
위쪽 Layer에 배치 됩니다
Sprite들을 보면 날개 모양이 조금씩 다른
Flappy Bird들이 있는데요
여러개를 ctrl로 선택 후
캐릭터에 드래그 앤 드롭 해볼게요
쉽게 Animation과 Animator를
생성할 수 있는 방법이랍니다
어제 미리 세팅해둔 Asset/Animator 폴더에
Fly라는 이름의 Animation을 생성해줄게요
Animation을 생성해주니 현재 객체의 이름으로
Animator가 생성된걸 확인할 수 있습니다
Animation은 진짜 Animation 그 자체이고
Animator는 Animation들을 관리하는 Component 입니다
Window / Animation을 열어
Animation Tab을 활성화 해주겠습니다
여기서 객체의 Animation들을
재생하고 확인할 수 있습니다
방금 만든 Animation을 확인해봤는데
귀엽게 날갯짓을 하고 있습니다!
이제 이 캐릭터에 물리를
한번 적용해보겠습니다
Collider란 Object가 충돌할 수
있도록 해주는 Component입니다
캐릭터에 일단 Circle Collider 2D를
추가해주겠습니다
Collider 뒤에 2D라고 안 적혀있으면
3D 객체용 Collider입니다
https://docs.unity3d.com/kr/2018.4/Manual/CollidersOverview.html
콜라이더 - Unity 매뉴얼
콜라이더(Collider) 컴포넌트는 물리 충돌 처리를 위한 오브젝트의 형태를 정의합니다. 콜라이더는 보이지 않는 요소이므로 오브젝트의 메시와 정확히 동일한 모양일 필요는 없으며, 실제로는 게
docs.unity3d.com
Collider를 추가했다면 이번에는
Rigidbody 2D를 추가해주겠습니다
Rigidbody는 Object에 물리적인
특성을 부여하는 Component 입니다
중력이나 힘을 받아서 움직일 수 있게 되고
속도와 회전 같은 물리 계산이 적용됩니다
Constraint는 Object의 움직임이나
회전을 특정 축에서 고정하는 설정입니다
Freeze Position X를 true로 설정함으로써
어떤 물리 충돌을 받아도 X 좌표가
변하지는 않습니다
Type | 설명 |
Dynamic | 기본 모드로, 중력이나 외부 힘에 자유롭게 반응합니다. 캐릭터나 움직이는 물체처럼 물리적으로 상호작용이 필요한 오브젝트에 사용합니다. |
Kinematic | 중력이나 외부 힘의 영향을 받지 않지만, 코드로 위치와 회전을 변경할 수 있습니다. 이동은 필요하지만, 물리 엔진과의 충돌 반응은 없을 때 사용합니다. 예를 들어, 움직이는 플랫폼이나 애니메이션이 있는 오브젝트에 적합합니다. |
Static | 완전히 고정된 상태로 물리적으로 움직이지 않아요. 충돌은 감지하지만 스스로 움직이지 않아서, 바닥이나 벽 같은 고정된 오브젝트에 사용합니다. |
https://docs.unity3d.com/kr/2018.4/Manual/RigidbodiesOverview.html
리지드바디 개요 - Unity 매뉴얼
리지드바디(Rigidbody) 는 게임 오브젝트의 물리적 동작을 가능하게 하는 주요 컴포넌트입니다. 리지드바디가 연결된 오브젝트는 중력에 즉시 반응합니다. Collider 컴포넌트도 하나 이상 추가할 경
docs.unity3d.com
방금 내용을 참고해서
바닥 Object에는 네모난 모양의
Collider(Box Collider)와
Kinematic Rigidbody를
적용 해주었습니다
Scene을 저장하고 게임을 실행해보니
중력을 받아 바닥으로 떨어져
바닥의 Box Collider와 부딪힌 모습입니다
Assets / Scripts 폴더에 들어가서
우클릭 후 Create / C# Script 하나
생성해줄게요
Script 이름은 마음대로 지어도 됩니다
저는 Player라고 지었어요
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private Rigidbody2D rigidbody;
private float velocity = 5f;
private float speed=4f;
void Start()
{
rigidbody=GetComponent<Rigidbody2D>();
// 현재 객체에 가지고 있는 Rigidbody 2D 정보를 가져옵니다
}
void Update()
{
if (Input.GetMouseButton(0))// 0=마우스 왼쪽, 1=마우스 휠, 2=마우스 오른쪽
{
rigidbody.velocity=Vector2.up*velocity;
// 현재 rigidbody에 위쪽 방향으로 velocity만큼 힘을 가할게요
}
}
void FixedUpdate()
{
transform.rotation=Quaternion.Euler(0,0,rigidbody.velocity.y*speed);
// 현재 Object의 속도(velocity.y)에 speed를 곱한 값을 각도로 설정
}
}
마우스 좌 클릭을 하면 현재 객체의
Rigidbody에 위쪽 방향으로 힘을 가하는
코드를 작성했습니다
velocity에 더 높은 수치를 입력하면
더 위로 올라가겠죠???
방금 입력한 코드를 저장하고
Add Component를 클릭해서
방금 만든 Component를 넣어주겠습니다
파닥파닥
마우스를 클릭하면 위쪽으로
물리 힘을 주면서 그 힘*speed에 따라
z축이 잘 rotation하고 있습니다
오늘은 여기까지 하고
GitHub에 Commit하는걸로
마무리 하겠습니다!
Commit Log는 잘 적으셨나요?
욕이나 대충 쓴 Log는 입사 과정의
마이너스 요소가 될 수 있기 때문에
신중하게 적는 것이 중요합니다!
감사합니다!!