게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 3주차 03/25

정광훈(Unity_9기)·2025년 3월 25일

TIL (Today I Learned)

목록 보기
5/110

●배경 만들기
1, 2번 클릭하고 3번에서 Hexadecimal값을 바꾸는 것으로 색상을 바꿀 수 있다.
마지막으로 4번에서 size를 바꿔주면 Square를 생성하지 않고 배경을 만들 수 있다.

●시작화면 만들기시작화면 만들기
1. Scenes 우클릭
2. Create에서 Scene클릭
3. 4번에 생성된 Scene의 이름을 StartScene으로 바꿔준다.

●시작화면 꾸미기1. StartScene에 Square를 생성해 BackGround로 이름을 바꾼다.
2. 다운 받은 이미지를 Images에서 intro이미지를 Sprite Renderer - Sprite에 드래그하면 4번처럼 화면에 출력된다.

●강아지 만들기 - 밥 쏘기
1. MainScene에서 Square로 Food를 만들어준다.
2. Sprite를 Knob으로 설정하고 Color를 스포이드 모양으로 색 지정
3. MainScene에 있는 Food를 Prefabs폴더를 만들어 4번처럼 이동시킨다.
4. MainScene에 있는 Food는 지운다.

<Food.cs> // Food가 위로 발사

using UnityEngine;
public class Food : MonoBehaviour
{
	void Update()
	{
		transform.position += Vector3.up * 0.5f; 
        // Vector3.up: (0, 1, 0)이기 때문에 position에 y값만 더해진다.
        if (transform.position.y > 27.0f) // y축이 27이상이면 
    	{
        	Destroy(gameObject); // Food 파괴
    	}
    }
}

<Dog.cs>

public class Dog : MonoBehaviour
{
	public GameObject food; // food라는 Prefab생성
    
    void Start()
    {
    	InvokeRepeating("MakeFood", 0.0f, 0.2f); 
        // MakeFood 함수를 바로 실행하기 위해 0f로 설정, 0.5초마다 생성
    }
    
    void MakeFood() 
    {
    	float x = transform.position.x; // x = 강아지의 x축 위치
        float y = transform.position.y + 2.0f; // y = 강아지의 y축 위치
        									   //+2는 강아지 머리 위에서 food를 발사하기 위함
        Instantiate(food, new Vector2(x, y), Quaternion.identity);
        // Quaternion.identity는 별도의 회전값을 주지 않겠다는 의미
        // 우리가 미리 만들어 놓은 food Prefabs 그대로 회전값 없이 생성하겠다는 의미
	}
}

Canvas의 RenderMode를 World Space로 변경해 주기

●고양이 만들기 - 중력, 체력 바 만들기
<Cat.cs>

void Start()
{
 	Application.targetFrameRate = 60; // 60프레임 고정
	float x = Random.Range(-9.0f, 9.0f); // 고양이가 -9.0 ~ 9.0 사이의 랜덤한 x축 위치에서 생성
    float y = 30.0f; // y축이 30되는 지점에서 내려옴
    transform.position = new Vector2(x, y); // 고양이 생성 위치
}

// Update is called once per frame
void Update()
{
	transform.position += Vector3.down * 0.05f; // Vector3.down은 (0, -1, 0)이기에 y축이 -1씩 감소된다.
    											//속도를 늦추기 위해 0.05를 곱함
}

Body Type을 Kinematic 으로 잡아주기 = 중력의 영향을 안 받겠다는 뜻
isTrigger에 체크: 중력의 영향을 안 받을 때에는 이것을 체크해 주세요!
(옵션을 체크하지 않으면 충돌감지가 안된다)
이 설정을 안하면 Food가 위로 올라갔다가 중력을 받고 다시 내려온다. (발사형태가 아니게 됨)

●게이지 채우기1. Canvas에 Square로 Back(체력 바)과 Front(배부름 게이지)를 만든다.
2. Back과 Front의 Anchors와 위치, 색상을 지정해준다.

<Cat.cs>

float full = 5.0f; // 배부름을 5로 초기화
float energy = 0.0f; // 에너지를 0으로 초기화

public GameObject hungryCat; // 배고픈 고양이 게임 오브젝트 불러옴
public GameObject fullCat; // 배부른 고양이 게임 오브젝트 불러옴

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.gameObject.CompareTag("Food")) // Tag가 Food인 게임 오브젝트와 충돌 시
    {
        if (energy < full) // 에너지가 배부름보다 작을 때 (배고플 때)
        {
            energy += 1.0f; // 에너지를 1씩 더한다.
            front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 배부름(x축)이 (energy / full)만큼 찬다 / x가 1이 되었을 때 배부른 상태가 됨
            Destroy(collision.gameObject); // Cat과 충돌 시 파괴
        }
        else // 배부를 때
        {
        	hungryCat.SetActive(false); // 배고픈 고양이 게임 오브젝트 끔
            fullCat.SetActive(true); // 배부른 고양이 게임 오브젝트 켬
        }
    }
}

이렇게 Cat이 Food를 맞으면 Cat아래 주황색으로 배부름 게이지가 차는 것을 확인할 수 있다.

0개의 댓글