티스토리 뷰
오늘도 참 열심히 했다. 30분만에 끝날 줄 알았는데 2시간이나 걸렸다. 아주 간단한 코드인데도 막혔고, 방법을 찾는데 아직 시간이 좀 걸리는 것 같다. 그리고 컴퓨터가 왜.. 이거 만드는데 느려지는지 모르겠다.
Gamelog 24. 미로찾기 게임 만들기(3)
Gamelog 24_1. 열쇠 배치하기
이번에는 열쇠를 다 먹어야 보물상자를 먹고 종료할 수 있도록 할 것이다.
열쇠는 회색 열쇠가 상단에 나타나고 먹으면 노란색으로 활성화되는 방식이다.
열쇠 3개를 미로 내에 배치해준다.
그리고 이 열쇠는 Empty Object를 생성하여 keys로 묶어줬다.
이름도 target_key로 알기 쉽게 변경하였다.
keys의 Z값은 10이고,
target_key들의 Scale Z값은 1이다.
Z값을 잘 설정해야 오브젝트가 빛 설정을 잘 받는다. 아니면 꺼매지거나 하얗게 된다.
Material도 Default-Diffuse
로 설정하여 빛을 받는 재질로 변경시킨다.
Gamelog 24_1. 점수 열쇠 만들기
미로 상단에 회색 열쇠와 노란색 열쇠를 같은 위치에 겹쳐놔준다.
이때는 Transform > Copy > Component
에서 복사를 하면 좀 더 편하게 위치를 설정할 수 있다.
그리고 회색키는 뒤에 배치될 수 있도록 Order in Layer
를 0으로,
노란키는 앞에 배치될 수 있도록 Order in Layer
를 1로 설정한다.
이제 열쇠를 먹으면 회색 열쇠가 노란색으로 바뀌게 해본다.
미로 안의 노란색 열쇠에 Box Collider 2D
를 모두 설정한다.
그리고 개구리 캐릭터에 On Collision\_Show
스크립트를 추가하여 준다.
열쇠는 하나씩 매핑한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 충돌하면 표시한다
public class OnCollision_Show : MonoBehaviour
{
public string targetObjectName; // 목표 오브젝트 이름 : Inspector에 지정
public string showObjectName; // 표시 오브젝트 이름 : Inspector에 지정
GameObject showObject;
void Start()// 처음에 시행한다
{
// 지우기 전에 표시 오브젝트를 기억해 둔다
showObject = GameObject.Find(showObjectName);
showObject.SetActive(false); // 지운다
}
void OnCollisionEnter2D(Collision2D collision)// 충돌했을 때
{
// 만약 충돌한 것의 이르이 목표 오브젝트면
if (collision.gameObject.name == targetObjectName)
{
showObject.SetActive(true); // 지웠던 것을 표시한다
}
}
}
그러면 일단 열쇠에 닿으면, 회색 열쇠가 활성화되도록 완료되었다.
이제 열쇠에 닿으면 열쇠가 숨겨지도록 On Collision\_Hide
스크립트를 세팅해준다.
이것도 나는 개구리에 다 넣어줬다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 충돌하면 지운다
public class OnCollision_Hide : MonoBehaviour
{
public string targetObjectName; // 목표 오브젝트 이름 :Inspector에 지정
public string hideObjectName; // 지울 오브젝트 이름 :Inspector에 지정
void Start()
{ // 처음은 아무 것도 하지 않는다
}
void OnCollisionEnter2D(Collision2D collision)
{ // 충돌했을 때
// 만약 충돌한 것의 이름이 목표 오브젝트였다면
if (collision.gameObject.name == targetObjectName)
{
// 지울 오브젝트를 찾아서
GameObject hideObject = GameObject.Find(hideObjectName);
hideObject.SetActive(false); // 지운다
}
}
}
그리고 노란색 키들을 묶어놓은 yes_keys에 Show\_Meet Condition
스크립트를 추가한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Show_MeetCondition : MonoBehaviour
{
public string showObjectName; // 표시할 오브젝트 이름
public string targetObjectName1;
public string targetObjectName2;
public string targetObjectName3;
GameObject showObject;
void Start()
{
// 지우기 전에 표시 오브젝트를 기억해 둔다
showObject = GameObject.Find(showObjectName);
showObject.SetActive(false); // 지운다
}
// Update is called once per frame
void FixedUpdate()
{
if (GetActiveState(targetObjectName1) == true) {
if (GetActiveState(targetObjectName2) == true) {
if (GetActiveState(targetObjectName3) == true) {
showObject.SetActive(true);
}
}
}
}
bool GetActiveState(string targetObjectName) {
GameObject targetObject = GameObject.Find(targetObjectName);
if (targetObject) return true;
else return false;
}
}
이 스크립트는 열쇠들이 모두 활성화되면, showObject
를 보여주도록 하는 스크립트이다.
bool GetActiveState(string targetObjectName) {
GameObject targetObject = GameObject.Find(targetObjectName);
if (targetObject) return true;
else return false;
}
이때, NullReferenceException
에러가 발생하는 것을 방지하기 위해
null 체크 로직을 사용하여 한번에 노란색 열쇠로 활성화 되었는지와 에러방지도 한다.
이제 마지막으로, 보물상자를 먹을 경우 게임 클리어가 나타날 수 있도록 스크립트를 추가해주면 완료!
'프로그래밍 > Unity' 카테고리의 다른 글
Gamelog 23. 미로찾기 게임 만들기(2) (2) | 2023.04.13 |
---|---|
Gamelog 22. 미로찾기 게임 만들기(1) (1) | 2023.04.12 |
Gamelog 21. 총알피하기 게임 만들기(5) (0) | 2023.04.04 |
Gamelog 20. 총알피하기 게임 만들기(4) (0) | 2023.04.03 |
Gamelog 19. 총알피하기 게임 만들기(3) (2) | 2023.03.26 |