본문 바로가기
Unity

2024/04/05 Unity 기초 프로젝트 Roll-A-Ball 게임 만들기 6

by 민정e 2024. 4. 5.

앞선 내용들은 아래 링크를 누르면 볼 수 있다.

 

Roll A Ball 게임 만들기 1

Roll A Ball 게임 만들기2

Roll A Ball 게임 만들기3

Roll A Ball 게임 만들기4

Roll A Ball 게임 만들기5

움직이는 바닥 만들기

이번에는 좌우로 움직이는 바닥을 만들어 보겠다.

MovingGround 스크립트를 만들어준다. 그리고 다음과 같이 작성해주자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MovingGround : MonoBehaviour
{
    public GameObject[] waypoints; // 배열. 파이썬의 리스트 느낌. Object의 집합
    public GameObject player; 
    int current = 0; // 현재 waypoint의 번호
    float rotSpeed;
    public float speed; // 움직이는 속도
    float WPradius = 1f; // waypoint의 영역

    public bool isRandom;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (isRandom) // 땅을 랜덤으로 움직이고 싶을 때
        {
            if (Vector3.Distance(waypoints[current].transform.position, transform.position) < WPradius)
            {
                current = Random.Range(0, waypoints.Length);
            }
        }

        else
        {
            if (Vector3.Distance(waypoints[current].transform.position, transform.position) < WPradius) // waypoint와 이 게임 오브젝트와의 거리가 1보다 작으면
            {
                if (current < waypoints.Length - 1) // waypoints.Length = waypoints의 개수
                {
                    current++; // current + 1. waypoint번호가 마지막 번호보다 작을 때, 다음 번호로 넘어간다.
                }
                else if (current >= waypoints.Length - 1)
                {
                    current = 0; // waypoint번호가 마지막 번호와 같거나 클때, waypoint의 번호가 0으로 돌아간다.
                }
            }
        }
        transform.position = Vector3.MoveTowards(transform.position, waypoints[current].transform.position, Time.deltaTime * speed); // 땅을 waypoint의 위치로 움직이는데, Time.deltaTime * speed의 속도로 움직인다. 
    }								// MoveTowards(A, B, Speed) A를 B로 Speed의 속도로 움직인다.

    private void OnCollisionEnter(Collision other)
    {
        if (other.gameObject == player)
        {
            player.transform.parent = transform;
        }
    }

    private void OnCollisionExit(Collision other)
    {
        if (other.gameObject == player)
        {
            player.transform.parent = null;
        }
    }
}

 

그 다음, 움직이고 싶은 땅에 부모를 만들어 주고, 같은 부모 안에 waypoint를 2개 만들어준다.

waypoint는 땅이 움직여서 도달할 최종 위치이다. 

waypoint를 움직여서 위치를 설정해주고, Ground에 스크립트를 넣어 waypoint를 추가, 속도를 지정해주면 땅이 움직이게 된다.

 

 

 

땅이 지정해준 waypoint사이를 왔다갔다 하는 것울 볼 수 있다.

 

 

음향설정

게임에 음악을 넣어주도록 하자.

Assets파일에 5.Sounds 파일을 만들어주고, 사용할 음악을 드래그해서 넣어준다.

 

Hierarchy에서 Create Empty를 해주고, 이름을 지정해 준다. 그 다음, add component를 하여 audio source를 추가해준다.

그 다음 audio clip에 음악을 드래그해서 넣어주면 완성이다.