728x90
728x90
미션 2를 복제하여 미션 5로 만들어준다.
이미지 맞춰주고 콜라이더도 수정해준다.
rotate를 회전시키면서 fix와 비슷한 위치에 멈추면 성공이다!
미션 2 스크립트를 복사해 미션 5를 만들어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission5 : MonoBehaviour
{
public Transform rotate,handle;
Animator anim;
PlayerCtrl playerCtrl_script;
RectTransform rect_handle;
bool isDrag,isPlay;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
rect_handle = handle.GetComponent<RectTransform>();
}
private void Update()
{
if (isPlay)
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
rect_handle.anchoredPosition = new Vector2(184, Mathf.Clamp(rect_handle.anchoredPosition.y, -195, 195)); // 제한해줌!
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
isDrag = false;
}
}
}
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
isPlay = true;
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
//손잡이 누르면 호출
public void ClickHandle()
{
isDrag = true;
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
}
}
미션 2를 재활용하여 새로 작성한 코드는 거의 없다.
스크립트 작성했으면 public이나 함수 구현에 필요한 것들 다 넣어주기!
그럼 핸들이 제한된 채로 잘 움직인다.
private void Update()
{
if (isPlay)
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
rect_handle.anchoredPosition = new Vector2(184, Mathf.Clamp(rect_handle.anchoredPosition.y, -195, 195)); // 제한해줌!
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
isDrag = false;
}
}
rotate.eulerAngles = new Vector3(0, 0, 90 * rect_handle.anchoredPosition.y / 195);// 최대값 기준으로 박싱한다.
}
}
업데이트에 rotate를 회전해주는 한 줄만 추가해주면 !
잘 움직인다!
이제 미션 성공을 만들어 보자
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission5 : MonoBehaviour
{
public Transform rotate,handle;
Animator anim;
PlayerCtrl playerCtrl_script;
public Color blue, red;
RectTransform rect_handle;
bool isDrag,isPlay;
float rand;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
rect_handle = handle.GetComponent<RectTransform>();
}
private void Update()
{
if (isPlay)
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
rect_handle.anchoredPosition = new Vector2(184, Mathf.Clamp(rect_handle.anchoredPosition.y, -195, 195)); // 제한해줌!
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
// 성공 여부 체크
if(rect_handle.anchoredPosition.y>-5 && rect_handle.anchoredPosition.y < 5)
{
Invoke("MissionSuccess", 0.2f);
isPlay = true;
}
isDrag = false;
}
}
rotate.eulerAngles = new Vector3(0, 0, 90 * rect_handle.anchoredPosition.y / 195);// 최대값 기준으로 박싱한다.
// 정답에 가까워 지면 색 변경
if (rect_handle.anchoredPosition.y > -5 && rect_handle.anchoredPosition.y < 5)
{
rotate.GetComponent<Image>().color = blue;
}
else
{
rotate.GetComponent<Image>().color = red;
}
}
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
// 초기화
rand = 0;
// 랜덤 핸들 위치
rand = Random.Range(-195, 195); // 0이 나올 수 있으므로 -10 ~ 10은 예외처리 해준다.
while(rand >-10 && rand < 10)
{
rand = Random.Range(-195, 195);
}
rect_handle.anchoredPosition = new Vector2(184, rand);
isPlay = true;
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
//손잡이 누르면 호출
public void ClickHandle()
{
isDrag = true;
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
}
}
근데 이렇게 만들면 그냥 핸들 한번에 쭉 올리거나 내리면 끝날거 같긴 한데 일단 이렇게 만들어 본다.
색 넣어주는거 까먹지 말기!
미션은 마우스를 놔야 끝나므로 잘 만들어 졌다.
마지막은 전선 잇기 !
728x90
'개발 > 게임 교육' 카테고리의 다른 글
[Unity class] 게임 교육 20 - 마지막 미션 2 마무리 (1) | 2024.01.06 |
---|---|
[Unity class] 게임 교육 19 - 마지막 미션1 (0) | 2024.01.06 |
[Unity class]게임 교육 17 - 미션 4 (1) | 2024.01.06 |
[Unity]게임 교육 16 - 미션 3 (1) | 2024.01.06 |
[Unity] 게임 교육 15.5 - 쓰레기 버리기 오류 발생! (0) | 2024.01.05 |