1 minute read


1. 카메라 제어


지금까지 프로젝트를 만들었으면 Camera가 고정되어 움직일 것이다. 이를 해결하기 위하여 Camera script를 만들어준뒤 다음과 같이 코드를 넣어준다.
Main Camera 오브젝트에 만든 Script를 넣어준 뒤 ScriptPlayerPlayer오브젝트를 끌어다가 넣어준다.

public GameObject player;
public static Camera instance = null;

void Start()
{
    transform.rotation = Quaternion.Euler(61, 0, 0);
}

void Update()
{
    transform.position = player.GetComponent<Transform>().position;
    transform.position += new Vector3(0, 10, -4);
}

trap3

코드를 적용하자 다음과 같이 Camera가 플레이어를 따라다니는 것을 볼 수 있다.


2. UI 구성하기


다음과 같이 Hierarchy -> UI -> Canvas를 만들어 준다.
이후 Canvas 안에 PanelButton, Text를 만들어준 후 Text의 이름을 Timer로 변경한다. 또 Create Empty를 눌러서 UI Manager라는 오브젝트를 생성해준다.

이후 UIManager라는 새로운 Script를 만들어준다.


image

public class UIManager : MonoBehaviour
{
    public float playtime;
    public GameObject Pannel;
    bool timeStart;
    public Text text;

    void Start()
    {
        playtime = 0.0f;
        Time.timeScale = 0;
        timeStart = false;
        playtime = 0;
        
    }

    void Update()
    {
        Timer();
    }

    public void GameStart()
    {
        Time.timeScale = 1;
        Pannel.SetActive(false);
        print("게임시작");
        timeStart = true;
    }

    public void Timer()
    {
        if(timeStart == true)
        {
            playtime += Time.deltaTime;
            text.text = playtime.ToString("N2") + "초";
        }
    }
}

다음과 같이 스크립트를 작성해준 후 만들어준 UI Manager 오브젝트 안에 넣어준다.
Script 안의 PannelText를 넣어준 후 작동시키면 다음과 같이 UI가 생성된다.


play

게임시작 버튼을 누르면 게임이 실행되고, 그 전까지 캐릭터가 정지상태로 있는다.
또한 오른쪽에 Timer가 생성되었다.


3. Coroutine을 사용한 대시 기능


게임에는 대시, 순간이동, 힐등 여러가지 사용 스킬들이 있다.

간단히 다음과 같은 대시 스킬이 있다고 하자

  • shift를 눌러 발동시 2초동안 빨라진다.
  • 스킬 종료시 3초간의 쿨타임이 존재한다.
  • 스킬 사용시, 재사용이 가능할때 Console로 알려준다.

이를 구현하기 위하여 Player Script에 다음과 같은 함수를 넣어준다.


IEnumerator Ghost()
{
    cooldown = true;

    PlayerSpeed = 20;
    print("스킬 발동");
    yield return new WaitForSeconds(2);
    print("스킬 쿨타임");
    PlayerSpeed = 10;
    yield return new WaitForSeconds(3);
    print("스킬 사용가능");
    cooldown = false;
}

이후 PlayerMove()함수에 다음과 같은 else if문을 추가해준다.

else if (Input.GetKey(KeyCode.LeftShift) && !cooldown)
    {
        StartCoroutine(Ghost());
    }


ghost

다음과 같이 잘 작동하는 모습이다.



개인 공부 기록용 블로그입니다.
틀리거나 오류가 있을 경우 제보해주시면 감사하겠습니다.😁