유니티

튜토리얼

잼잼재미 2024. 1. 31. 15:53

 

 

준비


1. Tutorial 빈 게임오브젝트 생성 및 UI 생성

 

Tutorial 빈 게임오브젝트에 Canvas 추가, Canvas의 자식으로 튜토리얼 UI 생성

 

 

2. Area 설정

 

 

Area가 필요한 경우, Tutorial 빈 게임오브젝트에 Area를 IsTrigger로 설정, 햇갈리지 않게 Tutorial의 숫자와 맞춰준다.

 

 

스크립트


1. IslandTutorial

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

public class IslandTutorial : MonoBehaviour
{
    [Header("Tutorial")]
    [SerializeField] private GameObject[] _tutorials;
    [HideInInspector] public bool[] IsTutorialActive;	// 단 한번만 실행하기 위해
    private bool _isPause;	

    void Start()
    {
        IsTutorialActive = new bool[_tutorials.Length];
        for (int i = 0; i < _tutorials.Length; i++)
        {
            IsTutorialActive[i] = false;
        }
        
        TutorialActive(0);
    }

    void Update()
    {
    	// 마우스 왼쪽 클릭 시, 튜토리얼 창 끄기
        if(_isPause == true && Input.GetMouseButtonDown(0))
        {
            foreach (GameObject tutorial in _tutorials)
            {
                tutorial.SetActive(false);
            }
            Time.timeScale = 1f;           
            _isPause = false;
        }
        
		// 특정 조건에서 튜토리얼 실행
        if(GameManager.I.PlayerManager.Player.GetComponent<ResourceCollector>().Resources >= 10 && !IsTutorialActive[3])
        {
            TutorialActive(3);
        }
    }

    public void TutorialActive(int num)
    {
        _tutorials[num].SetActive(true);
        Time.timeScale = 0f;
        _isPause = true;
        IsTutorialActive[num] = true;
    }

}

 

 

2. IslandTutorialCollider

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

public class IslandTutorialCollider : MonoBehaviour
{
    private IslandTutorial _islandTutorial;

    private void Start()
    {
        _islandTutorial = transform.parent.gameObject.GetComponent<IslandTutorial>();
    }

    private void OnTriggerEnter(Collider other)
    {
        if(transform.name == "Area1" && !_islandTutorial.IsTutorialActive[1])
        {
            if(other.CompareTag("Player")) _islandTutorial.TutorialActive(1);
        }
        else if (transform.name == "Area2" && !_islandTutorial.IsTutorialActive[2])
        {
            if (other.CompareTag("Player")) _islandTutorial.TutorialActive(2);
        }
        else if (transform.name == "Area4" && !_islandTutorial.IsTutorialActive[4])
        {
            if (other.CompareTag("Player")) _islandTutorial.TutorialActive(4);
        }
        else if (transform.name == "Area5" && !_islandTutorial.IsTutorialActive[5])
        {
            if (other.CompareTag("Player")) _islandTutorial.TutorialActive(5);
        }
    }
}

 

 

3. 구현 순서


1. IslandTutorial 스크립트 연결

 

Tutorial 게임오브젝트에 스크립트를 연결하고, Tutorials 배열에 Canvas에 있는 SetActive 할 UI를 연결해준다.

 

 

2. IslandTutorialCollider 스크립트 연결

 

각각 Area에 모두 스크립트를 연결하고, 콜라이더 범위를 설정하고 IsTrigger 체크를 해준다.

'유니티' 카테고리의 다른 글

게임 종료  (0) 2024.02.07
로딩 씬 구현  (0) 2024.02.01
DataManager  (0) 2024.01.30
AddForce  (0) 2024.01.26
범위 내 콜라이더 판별 (OverlapSphere)  (0) 2024.01.17