9/26 Flappy Bird 비슷한게임 #1

Hongryeol In·2024년 9월 26일

멋사유니티TIL

목록 보기
1/3

프로젝트 생성

  1. UnityHub 실행
  2. New Project
  3. Universal 2D
  4. 프로젝트 세팅
  5. 생성!

에셋

배경(Background) 화면 에셋

https://free-game-assets.itch.io/free-horizontal-game-backgrounds

다운받고 압축해제 진행 후 유니티 안에 Drag & Drop

  • Assets/Sprites/Background 폴더 생성

새(Bird) 에셋

https://assetstore.unity.com/packages/2d/characters/2d-cute-birds-4-in-1-mini-pack-237273#content

에셋 구매 후(무료) Unity에서 열기

Download 누르고 In Project->Import눌러서 프로젝트에 추가




배경 생성


2개 이어붙이기

V키를 누르고 모서리에 마우스를 갖다대면 네모칸이 생기는데 이걸로 맞추면 편해요

배경에 스크립트 추가하기


함수 설명

  • Start() : 처음 활성화시에 한 번 호출
  • Update() : 프레임마다 호출
  • FixedUpdate() : 고정된 시간 간격으로 호출. 물리작업시 주로 사용
  • LateUpdate() : 모든 Update() 함수 이후에 호출함
  • Awake() : 스크립트나 오브젝트가 처음 생성될 때 먼저 호출
  • OnEable() / OnDisable() : 오브젝트가 활성화/비활성화 될 때 호출.

함수의 호출 순서
Start() -> Update() -> FixedUpdate() -> Update() -> FixedUpdate() -> .....

배경화면 무한반복

using UnityEngine;

public class Backgound : MonoBehaviour
{
    public float speed = 2;
    public float width = 5;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // 프레임마다 left로 움직이는 코드입니다.
        transform.Translate(Vector2.left * Time.deltaTime * speed);

        if(transform.position.x < -width)
        {
            transform.Translate(new Vector2(width*2, 0));
        }
    }
}

public으로 정의한 변수는 Inspector에서 접근 가능

But! 스크립트보다 유니티 Inspector에 값이 우선순위로 들어감. *주의*


플레이어 생성

스프라이트 랜더러 우선순위


생성 후 플레이어 레이어로 설정

플레이어에 스크립트 추가하기

아까처럼 MonoBehavior Script로 Player 스크립트 생성

가만히 있으면 추락

using UnityEngine;

public class Player : MonoBehaviour
{
    public float Gravity = 10f;
    float v = 0;

    void Start()
    {
        v = 0;
    }

    void Update()
    {
        v += Gravity * Time.deltaTime;
    }

    private void FixedUpdate()
    {
        transform.Translate(Vector2.down*v*Time.fixedDeltaTime);
    }
}
  • Edit > ProjectSetting -> Input Manager -> Axes -> Jump -> Positive Button 이 space로 되어있는지, Name이 Jump인지 확인.
using UnityEngine;

public class Player : MonoBehaviour
{
    public float Gravity = 10f;
    float v = 0;

    void Start()
    {
        v = 0;
    }

    void Update()
    {
    	if (Input.GetButtonDown("Jump"))
   		{
        	Debug.Log("Jump Pressed");
    	}
    	if (Input.GetButtonUp("Jump"))
    	{
        	Debug.Log("Jump Released");
		}
        if (Input.GetButton("Jump"))
        {
            Debug.Log("Jump Kept");
        }

            v += Gravity * Time.deltaTime;
        }

    private void FixedUpdate()
    {
        transform.Translate(Vector2.down*v*Time.fixedDeltaTime);
    }
}

잘 작동 하는지 실행 후 스페이스바를 눌러서 로그가 찍히는지 확인해보자.

정상 작동한다면

using UnityEngine;

public class Player : MonoBehaviour
{
    public float Gravity = 10f;
    float v = 0;

    void Start()
    {
        v = 0;
    }

    void Update()
    {
    // 스페이스바를 누르면 올라가고
    if (Input.GetButton("Jump"))
    {
        v -= Accel * Time.deltaTime;
    }
    // 때면 떨어짐
    else
    {
        v += Gravity * Time.deltaTime;
    }

    }

    private void FixedUpdate()
    {
        transform.Translate(Vector2.down*v*Time.fixedDeltaTime);
    }
}

플레이어 사망 처리

장애물 생성

장애물로 쓸 벽을 그림판으로 그렸다.


유니티로 불러오고
씬에 벽을 추가하고 벽 전용 레이어를 추가했다.


수업 끝!

0개의 댓글