728x90
728x90
핸들을 당겨야 한다!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission2 : MonoBehaviour
{
public Transform trash,handle;
Animator anim;
PlayerCtrl playerCtrl_script;
RectTransform rect_handle;
bool isDrag;
Vector2 originPos;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
rect_handle = handle.GetComponent<RectTransform>();
originPos = rect_handle.anchoredPosition;//핸들의 원 위치를 저장
}
private void Update()
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
rect_handle.anchoredPosition = originPos;
isDrag = false;
}
}
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
// 초기화
for(int i = 0; i < trash.childCount; i++)
{ // 생성된 쓰레기 만큼
Destroy(trash.GetChild(i).gameObject);
}
// 쓰레기 스폰
for(int i = 0; i < 10; i++)
{
// 사과
GameObject trash4 =Instantiate(Resources.Load("Trash/Trash 4"),trash)as GameObject;
trash4.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash4.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 캔
GameObject trash5 = Instantiate(Resources.Load("Trash/Trash 5"), trash) as GameObject;
trash5.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash5.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
for(int i = 0; i < 3; i++)
{
// 병
GameObject trash1 =Instantiate(Resources.Load("Trash/Trash 1"),trash)as GameObject;
trash1.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash1.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 생선
GameObject trash2 = Instantiate(Resources.Load("Trash/Trash 2"), trash) as GameObject;
trash2.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash2.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
//비닐
GameObject trash3 = Instantiate(Resources.Load("Trash/Trash 3"), trash) as GameObject;
trash3.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash3.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
//손잡이 누르면 호출
public void ClickHandle()
{
isDrag = true;
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
}
}
mission 2 코드 수정!
그 후 mission 2에 핸들 넣어주고, handle에서 event trigger를 아래와 같이 만들어 준다.
다시 말하지만 항상 게임은 끄고 수정합시다...ㅠ
이제 잘 된다!
그리고 핸들 움직임의 y축을 최대 위치 를 조정해줘야 한다
rect_handle.anchoredPosition = new Vector2(originPos.x, Mathf.Clamp(rect_handle.anchoredPosition.y,-135,-47)); // 제한해줌!
이 한줄만 추가해주면 된다.
핸들 위치 인풋 바로 밑에 넣어주면 된다.
이제 쓰레기가 내려가는 모션을 만든다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission2 : MonoBehaviour
{
public Transform trash,handle;
Animator anim;
PlayerCtrl playerCtrl_script;
public GameObject bottom; //바닥을 꺼야 한다.
RectTransform rect_handle;
bool isDrag,isPlay;
Vector2 originPos;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
rect_handle = handle.GetComponent<RectTransform>();
originPos = rect_handle.anchoredPosition;//핸들의 원 위치를 저장
}
private void Update()
{
if (isPlay)
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
rect_handle.anchoredPosition = new Vector2(originPos.x, Mathf.Clamp(rect_handle.anchoredPosition.y, -135, -47)); // 제한해줌!
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
rect_handle.anchoredPosition = originPos;
isDrag = false;
}
}
// 쓰레기 내려갈 조건
if (rect_handle.anchoredPosition.y <= -130)
{
bottom.SetActive(false);
}
else
{
bottom.SetActive(true);
}
// 쓰레기가 끝까지 내려가지 않게 삭제해준다.
for (int i = 0; i < trash.childCount; i++)
{
if (trash.GetChild(i).GetComponent<RectTransform>().anchoredPosition.y <= -600)
{
Destroy(trash.GetChild(i).gameObject);
}
}
//성공여부 체크
if (trash.childCount == 0)
{
MissionSuccess();
isPlay = false;
}
}
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
// 초기화
for(int i = 0; i < trash.childCount; i++)
{ // 생성된 쓰레기 만큼
Destroy(trash.GetChild(i).gameObject);
}
// 쓰레기 스폰
for(int i = 0; i < 10; i++)
{
// 사과
GameObject trash4 =Instantiate(Resources.Load("Trash/Trash 4"),trash)as GameObject;
trash4.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash4.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 캔
GameObject trash5 = Instantiate(Resources.Load("Trash/Trash 5"), trash) as GameObject;
trash5.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash5.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
for(int i = 0; i < 3; i++)
{
// 병
GameObject trash1 =Instantiate(Resources.Load("Trash/Trash 1"),trash)as GameObject;
trash1.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash1.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 생선
GameObject trash2 = Instantiate(Resources.Load("Trash/Trash 2"), trash) as GameObject;
trash2.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash2.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
//비닐
GameObject trash3 = Instantiate(Resources.Load("Trash/Trash 3"), trash) as GameObject;
trash3.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash3.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
isPlay = true;
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
//손잡이 누르면 호출
public void ClickHandle()
{
isDrag = true;
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
}
}
코드는 위와 같다. isPlay를 통해 update가 과도하게 진행되는 것을 막는다.
바텀도 잘 추가해주기!
이제 잘 된다!
디테일을 잘 살려보자
이렇게하면 쓰레기통 밖에 있는 쓰레기는 보이지 않게 된다.
이제 손잡이를 당기면 흔들리는 모션을 추가해준다.
그리고 애니메이션도 Trash_Shake 이름으로 추가해준다.
5초마다 움직임을 진동처럼 설정해준다.
애니메이션을 추가했으면 스크립트도 수정해줘야지
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Mission2 : MonoBehaviour
{
public Transform trash,handle;
Animator anim;
PlayerCtrl playerCtrl_script;
public GameObject bottom; //바닥을 꺼야 한다.
public Animator anim_shake;
RectTransform rect_handle;
bool isDrag,isPlay;
Vector2 originPos;
// Start is called before the first frame update
void Start()
{
//getcomponent를 그냥 쓰면 안된다. 여기서 애니메이션은 하위 파일에 있다.
anim = GetComponentInChildren<Animator>();
rect_handle = handle.GetComponent<RectTransform>();
originPos = rect_handle.anchoredPosition;//핸들의 원 위치를 저장
}
private void Update()
{
if (isPlay)
{
// 드래그
if (isDrag)
{ // 핸들의 위치를 이동해준다.
handle.position = Input.mousePosition;
rect_handle.anchoredPosition = new Vector2(originPos.x, Mathf.Clamp(rect_handle.anchoredPosition.y, -135, -47)); // 제한해줌!
anim_shake.enabled = true;
// 드래그 끝
if (Input.GetMouseButtonUp(0))
{ // 움직임이 끝났을 때 핸들의 위치를 원위치해준다.
rect_handle.anchoredPosition = originPos;
isDrag = false;
anim_shake.enabled = false;
}
}
// 쓰레기 내려갈 조건
if (rect_handle.anchoredPosition.y <= -130)
{
bottom.SetActive(false);
}
else
{
bottom.SetActive(true);
}
// 쓰레기가 끝까지 내려가지 않게 삭제해준다.
for (int i = 0; i < trash.childCount; i++)
{
if (trash.GetChild(i).GetComponent<RectTransform>().anchoredPosition.y <= -600)
{
Destroy(trash.GetChild(i).gameObject);
}
}
//성공여부 체크
if (trash.childCount == 0)
{
MissionSuccess();
isPlay = false;
}
}
}
//미션 시작
public void MissionStart()
{
anim.SetBool("IsUp", true);
playerCtrl_script = FindObjectOfType<PlayerCtrl>();
// 초기화
for(int i = 0; i < trash.childCount; i++)
{ // 생성된 쓰레기 만큼
Destroy(trash.GetChild(i).gameObject);
}
// 쓰레기 스폰
for(int i = 0; i < 10; i++)
{
// 사과
GameObject trash4 =Instantiate(Resources.Load("Trash/Trash 4"),trash)as GameObject;
trash4.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash4.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 캔
GameObject trash5 = Instantiate(Resources.Load("Trash/Trash 5"), trash) as GameObject;
trash5.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash5.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
for(int i = 0; i < 3; i++)
{
// 병
GameObject trash1 =Instantiate(Resources.Load("Trash/Trash 1"),trash)as GameObject;
trash1.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash1.GetComponent<RectTransform>().eulerAngles = new Vector3(0,0, Random.Range(0, 180)); // 각도 랜덤 지정
// 생선
GameObject trash2 = Instantiate(Resources.Load("Trash/Trash 2"), trash) as GameObject;
trash2.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash2.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
//비닐
GameObject trash3 = Instantiate(Resources.Load("Trash/Trash 3"), trash) as GameObject;
trash3.GetComponent<RectTransform>().anchoredPosition = new Vector2(Random.Range(-180, 180), Random.Range(-180, 180)); // 위치 랜덤 지정
trash3.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, Random.Range(0, 180)); // 각도 랜덤 지정
}
isPlay = true;
}
//x버튼 누르면 호출
public void ClickCancle()
{
anim.SetBool("IsUp", false);
playerCtrl_script.MissionEnd();
}
//손잡이 누르면 호출
public void ClickHandle()
{
isDrag = true;
}
// 미션 성공하면 호출될 함수
public void MissionSuccess()
{
ClickCancle();
}
}
코드엔 애니메이션 추가!
그리고 백그라운드도 미션 2에 넣어주기!
그럼 끝이다!
728x90
'개발 > 게임 교육' 카테고리의 다른 글
[Unity]게임 교육 16 - 미션 3 (1) | 2024.01.06 |
---|---|
[Unity] 게임 교육 15.5 - 쓰레기 버리기 오류 발생! (0) | 2024.01.05 |
[Unity] 게임 교육 14 - 미션 2 (0) | 2024.01.02 |
[Unity] 게임 교육 13 - 첫 번째 미션 만들기 (0) | 2024.01.02 |
[unity]게임 교육 12 - 미션 애니메이션 제작 (48) | 2024.01.02 |