일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 합격
- Unity #Unity2D #Portal
- 게임
- portal
- 1인 게임
- 1인 게임 제작
- 게임제작
- 유니티
- 3회차
- Unity
- 정보처리기사
- 1인 개발
- 1인 게임 개발
- 토이 프로젝트
- 게임 제작
- 자바스크립트 게임
- 정처기
- FPS
- Unity2D
- 게임 개발
- 프로그래머스 #최소힙 #우선순위 큐
- 자바스크립트
- 유니티3d
- unity3d
- 유니티 3D
- 정처기 필기
- Vampire Survivors
- 필기
- 퐁
- Pong
- Today
- Total
Coding Feature.
[Unity 2D] Portal 같은 게임 만들기 #7 레벨 1 디자인, Scene Controller 본문
[Unity 2D] Portal 같은 게임 만들기 #7 레벨 1 디자인, Scene Controller
codingfeature 2024. 1. 9. 13:48이펙트, 효과음 등 추가해야 할 사항들이 많지만 우선 사용자가 플레이할 첫 번째 레벨부터 구현해보도록 하겠습니다!
우선 다음과 같이 레벨을 디자인 해보았습니다.
간략하게 설명하자면, 우선 플레이어의 동선을 블루 포탈 -> 오렌지 포탈 -> 전원 버튼 -> 오렌지 포탈 -> 블루 포탈 -> 나가는 문으로 설정했습니다.
위 과정을 통해 플레이어는
- 블루 포탈, 오렌지 포탈
- 전원 버튼
- 클리어를 위한 나가는 문
의 용도를 알게 됩니다!
우선 나가는 문으로 도달한 경우 다음 레벨을 로딩하는 스크립트(SceneController.cs)를 짜보았습니다.
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneController : MonoBehaviour
{
public static SceneController instance;
private void Awake()
{
if(instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void LoadNextLevel()
{
SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1); // 빌드 index 상 다음 scene 로드.
}
public void LoadScene(string sceneName)
{
SceneManager.LoadSceneAsync(sceneName);
}
}
LoadNextLevel 함수는 빌드 세팅 상 다음 index의 scene을 로드할 수 있도록 해줍니다.
이 함수를 위해서는 빌드 세팅에 들어가 여러 Scene들을 꼭 추가해줘야 합니다.
그리고 LoadScene은 string 으로 scene 이름을 받아서 로드할 수 있도록 해줍니다.
사실 유니티에서 Scene 관리는 처음이라 코드를 아래 영상 고대로 사용했네요.. ㅎㅎ
궁금하시면 참고바랍니다!
https://www.youtube.com/watch?v=E25JWfeCFPA&list=LL&index=5&t=160s
그리고 나가는 문 Game Object에 ObjectScript.cs를 작성해줬습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectScript : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
SceneController.instance.LoadNextLevel();
}
}
}
이전에 SceneController 클래스에서 static으로 선언한 instance 객체를 참조하여 LoadNextLevel() 함수를 호출합니다.
물론 나가는 문 Game Object에 Collision 트리거를 설정해줘야겠죠 :)
그 다음 전원 버튼을 사용해 나가는 문 앞에 놓인 장애물 Blocked 게임 오브젝트를 없애는 스크립트를 작성해보았습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OnOffButtonScript : MonoBehaviour
{
public SpriteRenderer spriteRenderer;
public Sprite OnSprite;
public Sprite OffSprite;
public GameObject Blocked;
bool m_isOn;
private void Start()
{
m_isOn = true;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
if (m_isOn) // 켜져 있는 경우,
{
spriteRenderer.sprite = OffSprite;
Blocked.SetActive(false);
m_isOn = false;
}
else { // 꺼져 있는 경우,
spriteRenderer.sprite = OnSprite;
Blocked.SetActive(true);
m_isOn = true;
}
}
}
}
m_isOn 변수를 통해 버튼이 On인 경우 플레이어가 닿으면 Off sprite로 바꾸고 Blocked 게임 오브젝트를 없애고 반대는 On Sprite로 바꾸고 게임 오브젝트를 다시 만드는 코드를 작성했습니다.
다음은 캐릭터에 애니메이션을 추가해보겠습니다!
'Toy Project > mini-portal [Unity2D]' 카테고리의 다른 글
[Unity 2D] Portal 같은 게임 만들기 #9 메인 메뉴, Sprite 변경, Post Processing, 프레임 제한 (0) | 2024.01.11 |
---|---|
[Unity 2D] Portal 같은 게임 만들기 #8 캐릭터 애니메이션 / 효과음 (0) | 2024.01.09 |
[Unity 2D] Portal 같은 게임 만들기 #6 포탈, 포탈건, 캐릭터의 버그 해결 (0) | 2024.01.08 |
[Unity 2D] Portal 같은 게임 만들기 #5 포탈건 매커니즘 구현하기 2 (포탈 생성하기) (0) | 2024.01.07 |
[Unity 2D] Portal 같은 게임 만들기 #4 포탈건 매커니즘 구현하기 1 (조준선 그리기) (0) | 2024.01.06 |