728x90
728x90
이젠 미션 게이지바를 만들어 보자!
이름은 Guage로 해준다.
폰크기에 맞출 것이므로 !
플레이하면 마우스로도 움직일 수 있다.
이제 위치 조정!
이제 새 스크립트를 만들고 미션 안에 넣어준다!
그리고 스크립트 작성!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MissionCtrl : MonoBehaviour
{
int missionCount;
public Slider guage;
// 미션 성공하면 호출
public void MissionSuccess()
{
missionCount++;
guage.value = missionCount / 7f;
}
}
별거 없다. 이제 모든 미션에서 성공하면 이 스크립트가 나오도록 해야 한다.
미션 1부터 다 수정!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission1 : MonoBehaviour
{
public Color red;
Animator anim;
PlayerCtrl playerCtrl_script;
public Image[] images;
MissionCtrl missionCtrl_script;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
missionCtrl_script = FindObjectOfType<MissionCtrl>();
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
// 초기화
for (int i = 0; i < images.Length; i++)
{
images[i].color = Color.white;
}
// 랜덤 작업
for (int i = 0; i < 4; i++)
{
int rand = Random.Range(0, 7);// 0 ~ 6 랜덤
images[rand].color = red;// 랜덤한 숫자를 칠하기, 중복 고려 안했다.== 1~ 4
}
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
// 육각형 버튼 누르면 호출
public void ClickButton()
{
Image img = EventSystem.current.currentSelectedGameObject.GetComponent<Image>(); // 이미지 가져와서 저장
// 버튼 색이 하얀색 이라면
if(img.color == Color.white)
{
// 빨간색으로 !
img.color = red;
}
else
{
// 만약 빨간색이라면 하얀색으로
img.color = Color.white;
}
// 성공 여부 체크
int count = 0;
for (int i = 0; i < images.Length; i++)
{
if (images[i].color == Color.white)
{
count++;
}
}
if(count == images.Length)
{ // 미션 성공
Invoke("MissionSuccess",0.2f);
}
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
missionCtrl_script.MissionSuccess();
}
}
미션 스크립트를 가져와서 저 함수를 실행하도록 하였다.
그런데 한번 실행한 미션은 중복 실행 못하도록 바꿔야 한다. 그래서 한줄 씩 추가해준다.
Mission ctrl에선
public void MissionSuccess(CircleCollider2D coll)
{
missionCount++;
guage.value = missionCount / 7f;
// 성공한 미션은 다시 플레이 하지 못하도록 - 써클 콜라이더 2D 사용해야 한다.
coll.enabled = false;
}
이렇게 바꿔준다.
mission 1에선 콜라이더를 넣어줘야 하므로
missionCtrl_script.MissionSuccess(GetComponent<CircleCollider2D>());
이렇게 바꿔주면 끝이다!
이제 1부터 6까지 넣어준다....
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MissionCtrl : MonoBehaviour
{
int missionCount;
public CircleCollider2D[] colls;
public Slider guage;
// 미션 성공하면 호출
public void MissionSuccess(CircleCollider2D coll)
{
missionCount++;
guage.value = missionCount / 7f;
// 성공한 미션은 다시 플레이 하지 못하도록 - 써클 콜라이더 2D 사용해야 한다.
coll.enabled = false;
}
//미션 초기화 기능
public void MissionReset()
{
guage.value = 0;
missionCount = 0;
//콜라이더도 활성화 해야 한다.
for(int i = 0; i < colls.Length; i++)
{
colls[i].enabled = true;
}
}
}
다 넣었다면 초기화 기능도 추가해준다.
초기화는 메인 메뉴에서 게임 들어갈 때 해준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MainMenu : MonoBehaviour
{
public GameObject missionView;
// 게임 종료 버튼 누르면 호출
public void ClickQuit()
{
// 유니티 에디터
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
// 안드로이드
#else
Application.Quit();
#endif
}
// 미션 버튼 누르면 호출
public void ClickMission()
{
gameObject.SetActive(false);
missionView.SetActive(true);
//캐릭터가 메인 화면에서 보이는 것 때문에 캐릭터를 지운 뒤 여기서 읽어 온다.
GameObject player = Instantiate(Resources.Load("Character"), new Vector3(0,-2,0),Quaternion.identity)as GameObject;
// PlayerCtrl 스크립트를 가져와서 메인 뷰에 게임 오브젝트를 넣는다.
player.GetComponent<PlayerCtrl>().mainView = gameObject;
player.GetComponent<PlayerCtrl>().missionView = missionView;
missionView.SendMessage("MissionReset");
}
}
워낙 옛날에 적은 곳이라 잘 확인해야 한다.
코드 다 적고 콜라이더들 다 넣어야 한다!
이런거 할땐 잠금해서 하고 풀면 된다!
이제 미션 게이지 다 차면 미션 완료 뜨기!
이건 이제 알아서 잘 할꺼라고 생각한다
-1000에서 시작해서 0에서 20초있다가 다시 -1000으로 10초만에 내려간다.
이제 스크립트만 수정해주면 끝!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MissionCtrl : MonoBehaviour
{
public GameObject text_anim,mainView;
int missionCount;
public CircleCollider2D[] colls;
public Slider guage;
// 미션 성공하면 호출
public void MissionSuccess(CircleCollider2D coll)
{
missionCount++;
guage.value = missionCount / 7f;
// 성공한 미션은 다시 플레이 하지 못하도록 - 써클 콜라이더 2D 사용해야 한다.
coll.enabled = false;
//모든 미션 성공 여부 체크
if(guage.value == 1)
{
text_anim.SetActive(true);
Invoke("Change", 1f);
}
}
//미션 초기화 기능
public void MissionReset()
{
text_anim.SetActive(false);
guage.value = 0;
missionCount = 0;
//콜라이더도 활성화 해야 한다.
for(int i = 0; i < colls.Length; i++)
{
colls[i].enabled = true;
}
}
// 미션 모두 성공 시 화면 전환
public void Change()
{
mainView.SetActive(true);
gameObject.SetActive(false);
// 캐릭터 삭제
FindObjectOfType<PlayerCtrl>().DestroyPlayer();
}
}
이제 실행하면 된다!
728x90
'개발 > 게임 교육' 카테고리의 다른 글
[Unity Class] 게임 교육 23 - 쿨타임 (0) | 2024.01.07 |
---|---|
[Unity class] 게임 교육 22 - 킬 퀘스트 준비 (0) | 2024.01.06 |
[Unity class] 게임 교육 20 - 마지막 미션 2 마무리 (1) | 2024.01.06 |
[Unity class] 게임 교육 19 - 마지막 미션1 (0) | 2024.01.06 |
[Unity class] 게임 교육 18 - 각도 조종하기 (1) | 2024.01.06 |