Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

CJ UNIT 7기 게임TF #2(급식실 게임 - 학생) 본문

프로젝트/CJ UNIT 7기 게임TF

CJ UNIT 7기 게임TF #2(급식실 게임 - 학생)

Hannah0226 2022. 11. 23. 02:02

#1에서 적었던 게임 요소 중 나는 건강마을의 급식실 급식 배식 게임을 담당하였다. 그래서 오늘은 내가 지금까지 만든 급식실 게임을 정리해보려고 한다.

 

게임 방법

140bpm에 맞춰 급식판을 든 학생과 급식판들 들지 않은 학생이 계속 생성된다.

학생이 가운데 급식 받는 지점에 오면 급식판을 든 학생터치해서 밥을 주고, 급식판을 들지 않은 학생스와이프해서 넘긴다.

Point : 급식 받는 정확한 지점에서 눌러야 perfect를 받을 수 있다. 

 

NoteManager

→ 급식판 든 학생과 들지 않은 학생 random과 instantiate 사용해 랜덤으로 계속 생성

spawn_obj = Random.Range(1,3);
if(spawn_obj == 1)  //랜덤수가 1이라면 식판 든 학생 생성
{
	GameObject StudentO = Instantiate(Note_O,tfNoteAppear,Quaternion.identity);
	StudentO.transform.SetParent(this.transform,false);
}                                                                   
else  //랜덤수가 2라면 식판 들지 않은 학생 생성
{
	GameObject StudentX = Instantiate(Note_X,tfNoteAppear,Quaternion.identity);
	StudentX.transform.SetParent(this.transform,false);
}

→ 화면밖으로 벗어난 학생은 collider 사용해 파괴

private void OnTriggerExit2D(Collider2D collision) 
    {
        Destroy(collision.gameObject);
    }

 

 

NoteO / NoteX

→ 식판 든 학생과 식판 안든 학생 프리팹으로 만들어 관리

→ 각 프리팹에 스크립트 넣어서 오른쪽으로 움직이도록

void Update()
    {
        transform.localPosition += Vector3.right * noteSpeed * Time.deltaTime; //학생 오른쪽으로 움직이기
    }

→ 클릭과 스와이프를 구분해야하기 때문에 고민하다 IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler 사용하기로 결정

→ 점수 구간 설정 : perfect 10점, cool 8점, good 6점, bad 1점, miss 0점 (점수는 바뀔수도)

→ perfect, cool, good일땐 밥 받고, 웃는 표정 창캐미로 바꾸기 / bad, miss일땐 우는 표정 창캐미로 바꾸기 (바꾸는 함수는 NotetManager에)

→ 눌렀을 때 각 구간별 점수 effect주기

**변수를 int로 형변환 할때에는 Mathf.RoundToInt를 앞에 붙여줘야한다**

 

NoteO

→ Click 감지되면 눌린 위치 구간 확인해서 각 구간별 점수 부여

→ Drag 감지되면 0점(miss)

 

NoteX

→ Click 감지되면 0점(miss)

→ Drag 감지되면 눌린 위치 구간 학인해서 각 구간별 점수 부여

//식판 들고 있는 학생 코드
public void OnPointerClick(PointerEventData eventData) 
{
	int PerfectX1=-50, PerfectX2=50, CoolX1=-100, CoolX2=100, GoodX1=-200, GoodX2=200, BadX1=-400, BadX2=400;     //P,C,G,B 구역 설정
	int PositionX = Mathf.RoundToInt(transform.localPosition.x); 
	if(PerfectX1 <= PositionX && PositionX <= PerfectX2)
	{
		//perfect 효과 넣기, 점수 부여
	}
	else if(CoolX1 <= PositionX && PositionX <= CoolX2)
	{
		//cool 효과 넣기, 점수 부여
	}
	else if(GoodX1 <= PositionX && PositionX <= GoodX2)
	{
		//good 효과 넣기, 점수 부여
	}
	else if(BadX1 <= PositionX && PositionX <= BadX2)
	{
		//bad 효과 넣기, 점수 부여
	}
	else
	{
		//bad 효과 넣기, 점수 부여
	}
}
    
public void OnBeginDrag(PointerEventData eventData)
{

}

public void OnDrag(PointerEventData eventData)
{

}
    
public void OnEndDrag(PointerEventData eventData)  //스와이프하면 miss뜨도록(식판든 학생이기 때문)
{
	//miss 효과 넣기, 점수 부여
}