728x90
728x90
메인 메뉴에서 미션을 누르면 미션으로 화면 전환 되는 것을 만든다.
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);
}
}
메인 메뉴 코드를 위와 같이 고친다.
메인 메뉴의 버튼인 미션과 화면인 미션을 잘 확인해야 한다.
그리고 캐릭터가 바탕화면에 보이는데 캐릭터는 미션에 들어가면 나오게 해야 한다.
그리고 원래 있던 캐릭터는 지워준다.
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);
//캐릭터가 메인 화면에서 보이는 것 때문에 캐릭터를 지운 뒤 여기서 읽어 온다.
Instantiate(Resources.Load("Character"), new Vector3(0,-2,0),Quaternion.identity);
}
}
위와 같은 코드로 mainmenu script를 수정하여 실행해보면 미션버튼이 잘 작동하고, 캐릭터도 야자수에 끼지 않게 된다
이제 게임 나가기 버튼을 만들어 보겠다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; //UI를 선택한 것인지 그냥 움직인 것인지 확인
public class PlayerCtrl : MonoBehaviour
{
public GameObject joyStick, mainView, missionView;
Animator anim;
public float speed;
public Settings settings_script;
public bool isCantMove; // 이건 settings에서 바꾼다.
private void Start()
{
anim = GetComponent<Animator>();
Camera.main.transform.parent = transform; //캐릭터 이탈 방지
Camera.main.transform.localPosition = new Vector3(0, 0, -10);
}
private void Update()
{
if (isCantMove)
{
joyStick.SetActive(false);// 못움직이는 상황에서는 조이스틱도 보이지 않는다.
}
else
{
Move();
}
}
// 캐릭터 움직임 관리
void Move()
{
if (settings_script.isJoyStick)
{
joyStick.SetActive(true);
}
else
{
joyStick.SetActive(false);
// 상하좌우를 터치하여 움직이기
//클릭했는지 판단.
if (Input.GetMouseButton(0))
{ // 좌클릭 누르고 있는 중 컴퓨터 모바일 다 해준다.
if (!EventSystem.current.IsPointerOverGameObject())
{//클릭한 것이 UI가 아니라면
Vector3 dir = (Input.mousePosition - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f)).normalized; // 화면 정중앙을 빼서 얼마나 이동하는지를 노말 백터화 한다.
transform.position += dir * speed * Time.deltaTime;
anim.SetBool("isWalk", true);// 어떤 불값을 어떻게
//왼쪽으로 이동
if (dir.x < 0)
{
transform.localScale = new Vector3(-1, 1, 1);
}
else
{
//오른쪽으로 이동
transform.localScale = new Vector3(1, 1, 1);
}
}
}
else
{ // 이동하지 않을경우
anim.SetBool("isWalk", false);// 어떤 불값을 어떻게
}
}
}
// 캐릭터 삭제
public void DestroyPlayer()
{
Camera.main.transform.parent = null;
Destroy(gameObject);
}
}
위는 PlayerCtrl 코드 수정안이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // 이미지 사용을 할 수 있게 해준다.
public class Settings : MonoBehaviour
{
public bool isJoyStick;
public Image touchBtn, joyStickBtn;
public Color blue;
public PlayerCtrl playerCtrl_script;
// playerctrl에도 추가
GameObject mainView, missionView;
private void Start()
{
mainView = playerCtrl_script.mainView;
missionView = playerCtrl_script.missionView;
}
//설정 버튼을 누르면 호출
public void ClickSetting()
{
gameObject.SetActive(true);
playerCtrl_script.isCantMove= true;
}
// 게임으로 돌아가기 버튼을 누름
public void ClickBack()
{
gameObject.SetActive(false);
playerCtrl_script.isCantMove = false;
}
//터치 이동을 누르면 호출될 함수
public void ClickTouch()
{
isJoyStick = false;
touchBtn.color = blue;
joyStickBtn.color = Color.white;
}
public void ClickJoyStick()
{
isJoyStick = true;
touchBtn.color = Color.white;
joyStickBtn.color = blue;
}
// 게임 나가기 버튼을 누를 시 (미션 -> 메인 화면)
public void ClickQuit()
{
mainView.SetActive(true);
missionView.SetActive(false);
// 캐릭터 삭제
playerCtrl_script.DestroyPlayer();
}
}
위는 settings script 수정이다.
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;
}
}
이건 마지막으로 메인 메뉴 스크립트이다.
728x90
이렇게 하면 종료 버튼도 잘 작동한다!
이번엔 trigger를 체크하여 저 콜라이드는 트리거일 뿐 넘지 못하는 것은 아니고, 전체적인 레이어를 다시 조정해줬다. 그리고 태크 또한 추가해줘서 미션으로 테그 해놨다. 이제 구현하자 코드!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; //UI를 선택한 것인지 그냥 움직인 것인지 확인
public class PlayerCtrl : MonoBehaviour
{
public GameObject joyStick, mainView, missionView;
Animator anim;
public float speed;
public Settings settings_script;
public bool isCantMove; // 이건 settings에서 바꾼다.
private void Start()
{
anim = GetComponent<Animator>();
Camera.main.transform.parent = transform; //캐릭터 이탈 방지
Camera.main.transform.localPosition = new Vector3(0, 0, -10);
}
private void Update()
{
if (isCantMove)
{
joyStick.SetActive(false);// 못움직이는 상황에서는 조이스틱도 보이지 않는다.
}
else
{
Move();
}
}
// 캐릭터 움직임 관리
void Move()
{
if (settings_script.isJoyStick)
{
joyStick.SetActive(true);
}
else
{
joyStick.SetActive(false);
// 상하좌우를 터치하여 움직이기
//클릭했는지 판단.
if (Input.GetMouseButton(0))
{ // 좌클릭 누르고 있는 중 컴퓨터 모바일 다 해준다.
if (!EventSystem.current.IsPointerOverGameObject())
{//클릭한 것이 UI가 아니라면
Vector3 dir = (Input.mousePosition - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f)).normalized; // 화면 정중앙을 빼서 얼마나 이동하는지를 노말 백터화 한다.
transform.position += dir * speed * Time.deltaTime;
anim.SetBool("isWalk", true);// 어떤 불값을 어떻게
//왼쪽으로 이동
if (dir.x < 0)
{
transform.localScale = new Vector3(-1, 1, 1);
}
else
{
//오른쪽으로 이동
transform.localScale = new Vector3(1, 1, 1);
}
}
}
else
{ // 이동하지 않을경우
anim.SetBool("isWalk", false);// 어떤 불값을 어떻게
}
}
}
// 캐릭터 삭제
public void DestroyPlayer()
{
Camera.main.transform.parent = null;
Destroy(gameObject);
}
//트리거와 접촉한 경우
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Mission")
{
print("미션 감지");
}
}
}
이건 구현이 상당히 편했다.
드디어 미션을 하면서 게임에 컨텐츠가 생긴다...!
728x90
'개발 > 게임 교육' 카테고리의 다른 글
[Unity] 게임 교육 13 - 첫 번째 미션 만들기 (0) | 2024.01.02 |
---|---|
[unity]게임 교육 12 - 미션 애니메이션 제작 (48) | 2024.01.02 |
게임 교육 10 - 설정 화면 (0) | 2023.12.29 |
게임 교육 9 - 오류 대처법 (0) | 2023.12.29 |
게임 교육 8 - 게임 맵 (0) | 2023.12.29 |