와와

[ Unity 슈팅게임 ] 5. 움직이는 배경, 메뉴 씬, 실행 화면 본문

개발/Unity 3D

[ Unity 슈팅게임 ] 5. 움직이는 배경, 메뉴 씬, 실행 화면

정으주 2022. 8. 20. 14:29

 

1. 움직이는 배경 ( Matarial offset 설정 )

 


이렇게 끝없이 이어지는 것 같은 배경을 만들고자 한다.


우선 배경으로 쓸 이미지를 Material 로 만들어야 함

배경 Material

Material 을 하나 생성하여 MainMaps - Albedo 에 원하는 이미지를 넣어 저장한다.
저기 하마 스티커가 붙어있는 부분(offset)을 조절하면 지구본처럼 화면이 제자리에서 돌아간다
오브젝트에 해당 Material 을 입히고 스크립트에서 offset을 조절해주면 끝

이렇게 오브젝트에 Material을 넣어주고


< BG.cs >

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

public class BG : MonoBehaviour
{
    public float scrollSpeed = 0.1f;
    public Material material;

    private Vector2 currentOffset;

    // Start is called before the first frame update
    void Start()
    {
        material = this.GetComponent<Renderer>().material;
        currentOffset = material.GetTextureOffset("_MainTex");
    }

    // Update is called once per frame
    void Update()
    {
        currentOffset += new Vector2(Time.deltaTime * scrollSpeed, 0); 

        material.SetTextureOffset("_MainTex",currentOffset);
    }
}

스크립트에서 Offset의 x값이 계속 증가하도록 해준다.


2. 메뉴 씬 ( 닉네임 입력창, 게임 시작/종료 버튼 )


게임을 실행하면 나오는 첫 씬은 메뉴씬으로 다음과 같다


( 타이틀이 킹받는다면 죄송합니다.. )

중앙에 보이는 입력창에 닉네임을 입력하고 START 버튼을 누르면
PlayerPrefs을 이용해 닉네임을 저장하고 게임씬(Start)으로 넘어가게 된다.

EXIT 버튼을 누르면 앱 자체가 종료된다.

InputField의 Character Limit에서 글자수도 6으로 제한해주었다.



< ButtonManager.cs >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class ButtonManager : MonoBehaviour
{
    public Button StartBtn;
    public Button ExitBtn;
    public InputField playerNameInput;
    private string playerName = null;

    

    // Start is called before the first frame update
    void Start()
    {
        Button StartB = StartBtn.GetComponent<Button>();
        StartB.onClick.AddListener(StartBtnClick);

        Button ExitB = ExitBtn.GetComponent<Button>();
        ExitB.onClick.AddListener(ExitBtnClick);

        playerName = playerNameInput.GetComponent<InputField>().text;
    }

    // Update is called once per frame
    void Update()
    {

    }

    // Start 버튼 누르면
    void StartBtnClick()
    {
        InputName();
        Debug.Log("등록한이름: "+PlayerPrefs.GetString("CurrentPlayerName"));
        SceneManager.LoadScene("Start");
    }

    // Exit 버튼 누르면
    void ExitBtnClick()
    {
        Application.Quit();
    }

    // 닉네임 입력
    public void InputName()
    {

        playerName = playerNameInput.text;
        if(playerName == "")
        {
            playerName = "NoName";
        }

        PlayerPrefs.SetString("CurrentPlayerName", playerName);
        PlayerPrefs.Save();
    }

}




< 실행 화면 >