오늘은 예전에 올렸던 부드러운 이동을 위한 스크립트 강좌를 보신
게임메이커 카페의 랩톤님께서 적용할 만한 예제 소스가 있었으면 좋겠다고 하셔서 스크립트를 하나 들고 왔습니다.
UI이동 스크립트에요.
이런 식으로 모여라 촛불집회에서도 UI이동에 쓰였네요. 스크립트로 간단하게 적용할 수 있습니다.
어제 올린 자신만의 스크립트만들기 와 같이 보시면 좋을 것 같네요.
create 이벤트에 scr_gui_moving_create(-view_xview,0,view_xview,0,30) 를 넣어 주었습니다.
scr_gui_moving_create 스크립트는 이렇게 구성되어있어요
///scr_gui_moving_create(xstart,ystart,xend,yend,time)간단하죠? -view_xview,0 이라는 초기 x,y 위치와 view_xview,0 이라는 x,y 위치를 넣어주고 시간은 30스텝으로 주었습니다.
gui_start_xpos = argument0 //시작 x 위치
gui_start_ypos = argument1//시작 y 위치
gui_end_xpos = argument2 //목표 x 좌표 지점
gui_end_ypos = argument3//목표 y 좌표 지점
duration = argument4 // 목표까지 걸리는 스텝 시간 변수
//초기화
gui_now_xpos = argument0
gui_now_ypos = argument1
time = 0 //현재 시간 변수
x = gui_now_xpos
y = gui_now_ypos
gui_status = 0 //UI 상태
left mouse click 이벤트(실제 게임에는 메뉴 오브젝트의 드로우 이벤트에 버튼을 그리고 버튼을 눌렀을 경우 실행되게 만들어 두었습니다.)
에는 gui_status를 한번 누르면 1로 바꾸고 다시 누르면 0으로 바뀌도록 했습니다.
draw이벤트에는 scr_gui_moviing_draw 스크립트를 만들어서 아래처럼 넣어주었습니다.ifgui_status = 0 {
scr_gui_moving_create(view_xview,0,-view_xview,0,30); //퇴장이벤트로 전환
gui_status = 1
}
else
{
scr_gui_moving_create(-view_xview,0,view_xview,0,30); //등장이벤트로 전환
gui_status = 0
}
drea_self();; // 이걸 빼먹으면 드로우 이벤트 등록된 오브젝트는 스프라이트를 안그려줘요.저번 강좌에서 설명한 argument_count를 썼기 때문에
scr_gui_moviing_draw(EaseLinear); // EaseLinear 부분을 원하시는 타 ease 함수 예를들면 EaseInOutQuad 등으로 바꾸세요.
scr_gui_moviing_draw();
이런식으로 인수를 빼도 괜찮습니다.
scr_gui_moviing_draw는 아래처럼 구성을 할거에요.
///scr_gui_moviing_draw(easeing)
switch (gui_status)
{
case 0: // UI 등장 이벤트 실행
x = gui_start_xpos
y = gui_start_ypos
time += 1 //스텝마다 1을 더해줌
if argument_count = 1 easings = /s!crip/_execute(argument[0],time, 0, time/duration,duration);
else easings = EaseInOutQuad(time, 0, time/duration,duration);
//옵션값, 인수가 있으면 인수대로 없으면 EaseInOutQuad을 적용.
//easeInOutCubic 알고리즘의 값을 리턴해서 easings에 기록 easeInOutCubic자리에 다른 알고리즘을 넣어도 됨.
gui_now_xpos = lerp(gui_start_xpos,gui_end_xpos,easings);
gui_now_ypos = lerp(gui_start_ypos,gui_end_ypos,easings);
//초기값,최종값과 현재 위치값을 시간에 따라서 비교해서 출력
x = gui_now_xpos
y = gui_now_ypos
if time > duration // 완료시간이 넘어가면
{
time = 0
gui_status = 2 // 대기 중으로 바꿈
}
break;
case 1: //UI 퇴장 이벤트
time += 1 //스텝마다 1을 더해줌
easings = EaseInOutCubic(time, 0, time/duration,duration);
//easeInOutCubic 알고리즘의 값을 리턴해서 easings에 기록 easeInOutCubic자리에 다른 알고리즘을 넣어도 됨.
gui_now_xpos = lerp(gui_end_xpos,gui_start_xpos,easings);
gui_now_ypos = lerp(gui_end_ypos,gui_start_ypos,easings);
//초기값,최종값과 현재 위치값을 시간에 따라서 비교해서 출력
x = gui_now_xpos
y = gui_now_ypos
if time > duration // 완료시간이 넘어가면 초기화
{
gui_status = 2 //대기중으로 바꿈
}
break;
case 2 : // 대기 중
// 대기 중 기타 등등 스크립트를 넣어주세요. 비워두셔도 무방.
break;
}
스크립트 만드는데 꽤나 고생했던 기억이 나네요...ㅠ_ㅠ
예제는 왼쪽에서 등장해서 왼쪽으로 들어가지만
실제 인게임에서는 오른쪽에서 왼쪽으로 사라진다던가 다양하게 쓰이고 있습니다.
모여라 촛불 집회도 한번씩 다운로드 해주세요~
어제는 뉴스보다가 화가 나서 평화상(?) 과 고래풍선들도 업데이트 했답니다.
https://play.google.com/store/apps/details?id=com.raggletaggle.million_candles
그럼 다음시간까지 안녕~
인디 게임 개발자들을 대신하여 감사함을 전해드리고 싶습니다.