'내가 만든거'에 해당되는 글 7건

https://youtu.be/SuR9ZSycV5E?si=NxrEhPDd490Mx1KQ

 

 

지금 스팀에서 플레이할 수 있습니다.


 

Devilish League on Steam

Swing, hit, and bounce! Blast enemies with your heavy bat in this hilarious cartoon roguelike!

store.steampowered.com

 

데빌리쉬 리그는 배트 스윙 액션이 가미된 카툰 로그라이크 게임입니다.
모든 것을 날려버리는 시원한 전투, 수십 가지의 독특한 아이템들로 중독성있는 모험을 즐겨보세요!

 

개발 기간 : 2023년 3월 ~ 2024년 1월
인원 : 17명 (기획 3, 플밍 2, 아트 11, QA 1)
개발환경 : 유니티, 젠킨스, 파이썬
레포지토리 : https://github.com/Cuty444/QT_Proto (졸작들 중 유일하게 전체 코드 공개 ㅋㅋ)


 

프로그래머가 2명이 있었지만 다른 프로그래머는 조기 취업으로 인해 작업량에 한계가 있었으므로
2학기부터는 사실상 혼자 작업하는 형태였습니다...

저는 프로그래머로서 적과 전투아이템, 스탯과 버프각종 툴 개발빌드 과정 관리 등을 담당하였습니다.

 


학생 프로젝트지만 최대한 프로답게 (프로세스 & 퀄리티 & 재미) 만들고 싶었습니다.

그래서 최대한 유지보수 하기 좋은 형태로 코드를 설계하고
엔진에 익숙하지 않은 작업자도 쉽게 작업할 수 있는 다양한 툴을 개발하고
개발한 것들에 대한 문서화를 지속적으로 진행하고
청강대 졸작 최초(아마도?)자동 빌드 시스템을 구축하였습니다.

 

노션으로 정리한 이 프로젝트에 대한 자세한 포트폴리오는 여기를 참고하세여

'내가 만든거' 카테고리의 다른 글

길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
등산 시뮬레이터  (0) 2018.06.23
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
블로그 이미지

stuban

ㅇ.ㅇ

,

https://play.google.com/store/apps/details?id=com.SuperBang.RoadRobotRev

2019년 3월 쯤 부터 시작해서

2019년 9월 22 23일에 출시함



길따라 로봇 프로젝트를 시작한 이유는

군대가기 전에 뭔가 이루고 싶어서였습니다.


마침 학교 앱게임 프로젝트와 겹쳐서 매우 힘겨웠지만

매우 보람차고 재미있는 경험이었습니다

( 특히 프로젝트가 2개니깐 2배로 실력이 느는 느낌? )





BIC 2019에 로드로봇을 제출 했는데


당시 이 상태로 제출을 했습니다.


솔직히 별로 좋은 상태는 아니였지만

정말 무슨 일인지 BIC 전시작에 선정되었지요


(하지만 비슷한 시기에 제출한 GIGDC는 떨어짐...)



bic 선정도 됬겠다.

적어도 망신은 당하기 싫어서

그리고 BIC 특수를 누리기 위해


BIC 전 주 출시를 목표로

매일 카페에 살며 개발을 했습니다.


커피를 별로 안좋아해서

주로 더블 베리 스파클링 이나 아이스 초코 같은 비싼 음료를 시켜 먹느라

돈이 좀 많이 깨졌는데 ...


그래도 6000원 짜리 한잔 사서

10시부터 새벽 1시 까지 있는데다가


골드 멤버쉽 찍어서 나름 이득이라고 생각하네요

(혜택이 크지는 않지만 그래도 포인트가 쌓이니깐 뭔가 보람참)


그리고 확실히 카페에 있으니깐 집중효과는 확실했습니다.





BIC 전주에 출시를 목표로 했건만

생각보다 일정 맞추기 힘들었습니다


특히 창작마당은 서버가 들어가는데

내가 관련 지식이 부족했기 때문에

그 부분이 제일 막혔습니다


막 한 1주일이면 만들 수 있을 것 같은 부분이

1달이 꼬박 걸라고 그랬죠



그리고 그래픽도 문제였습니다.

아트 스킬도 매우 부족한 상태에서


꼴에 1인개발 한답시고 모든 에셋을 다 손수 제작하는데

시간도 없고 퀄리티도 안나오는거 같고 미칠 것 같았습니다.



그래도 그나마 UI쪽은 나름 해결책을 마련했는데...


바로 돌려막기였습니다 ㅋㅋ


만약에 이런 스프라이트가 있다?


버튼으로도 쓰고


팝업창 으로도 씀


그리고 색깔을 바꿔서 다른 느낌으로도 사용하고


이 화면은 저 스프라이트가 11개나 쓰였습니다 ㅋㅋㅋ



그리고 창작마당 메인의 상단부분도

얼핏 보면 통짜 같지만


2개의 스프라이트를 7개 겹쳐서 만들었습니다.



이게 다 쉐이더랑 그라디언트 덕분이었습니다


일단 쉐이더는


요렇게 3개 정도 만들어서 썼는데


-스프라이트 색깔을 아예 하나로 바꿔주는 쉐이더

-스프라이트를 흑백으로 바꿔서 그 위에 색을 입히는 쉐이더

-스프라이트 색깔 추가하는 방법을 곱하기에서 스크린으로 바꾸는 쉐이더


그리고 그라디언트는

요런식으로 되어서 그라데이션을 만들 수 있습니다


basemesheffect라는 걸 사용하는 것 같은데

아직 이해가 덜되서 나중에 블로그에 정리할 생각






그래서 BIC 전주에 출시를 했느냐?

당근 못했죠 ㅋㅋㅋ


결국 미완성인 채로 BIC전시가 시작되었습니다


당시에 일단 게임다 만들고 BIC준비를 할 생각이었기 때문에

현수막이나 홍보물, 굿즈 같은건 하나도 만들어 두지 않은 상황


결국 BIC 가기 2일 전에 급하게 스티커만 주문했습니다


스티커는 이런 디자인이었고


1000장이 최소단위라고 해서 

6cm * 6cm 사이즈로 1000장을 주문했습니다


그리고 가격을 4만 5천원을 부르던데

시간이 별로 없어서 시세를 잘 알아보지 못한 관계로

그냥 질러버렸는데


나중에 BIC에 참가한 다른 팀 선배는 2만원인가 주고 뽑았다고 하더랍니다 ㅋㅋ


그리고 

스티커는 이~만~큼 남았습니다 ㅠ


퀄리티도 마음에 안드는데 바가지도 오질라게 뒤집어쓰니 기분이 드럽더웠습니다




BIC는 생각보다 엄청엄청 좋았습니다


버스, 호텔 다 지원해주고

비즈매칭한 사람만 주는 거였지만 간식도 줘서


좀 거지근성만 보인다면 땡전 한푼 없이 다녀올 수 있을 정도였습니다



1번째 날

 

컨퍼런스 데이라고 강연을 듣는 날이었는데

사람이 많아서 그런지 덥고

강연이 조금 지루했습니다...


그리고 당일 오프닝 파티도 진행됬는데

수영장을 개조한 것 같은 파티장에서 열렸습니다


분위기 짱!



2번째 날은 


비즈니스 데이라고 해서 퍼블리셔나 광고사 같은 데서 게임을 보러 오는 날이었습니다


사람이 적기도 하고 내 부스가 허전하기는 하지만

그래도 내 부스에는 사람이 좀 적게 와서 조금 슬펐습니다 ㅠ 


그래도 명함은 많이 받음



3번째 ~ 4번째날


이때는 모니터에 스마트폰 미러링도 하고 해서

전날보다 부스가 아주 조금 있어보이게 되었습니다


덕분에 여서 그런지 그냥 게임 마니아가 많이 와서 그런지는 모르겠지만

다행히도 내 게임에 관심을 가지시는 분들이 많았습니다


난 내 게임이 어려워서 다들 포기할 줄 알았는데

(실제로 비즈니스데이때는 많은 사람들이 포기함)


진짜 거의 끝까지 하시는 분들도 많이 계셨습니다

이분들께 감사드리고 덕분에 많은 힘이 되었습니다


그리고 뜻밖에 문제점도 발견했는데

색맹인 사람이 게임을 플레이하면서

명령블록의 색깔이 구분가지 않는다는 피드백을 주신것 입니다.


이 게임에서 명령블록의 색깔은 중요하기 때문에

이건 좀 중대한 문제 였습니다


그래서 당일 호텔에서 부랴부랴 색약자 배려모드를 추가하였습니다.




BIC가 끝나고 2주가 지나서야 게임을 출시했습니다


22일날 출시했는데


출시하고 보니깐 맵 연결이 다 끊겨서

게임을 시작하면 아무것도 안나오는 사태가 발생하였습니다..


이유는 출시하기 직전에 맵 순서를 검토했는데

그 과정에서 맵 파일 이름을 마구 바꿔댔고

그러다가 연결이 끊겨 버린거,,,


완전 대 참사가 일어나서

임시 방편으로 앱 게시를 취소하고


23일날 다시 출시하였습니다.



그리고 23일


여러 커뮤니티에 홍보글을 돌렸는데




아주 고맙게도 3일이 지난 지금 60명에 가까운 사람들이 다운받아주셨습니다






이제 남은건



아직은 한글만 지원하기 때문에

빠른 시일내에 영어로 변역을 해서 글로벌 출시를 해야함

(영어판 출시 완료)


'내가 만든거' 카테고리의 다른 글

데빌리쉬 리그  (0) 2024.02.18
등산 시뮬레이터  (0) 2018.06.23
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
블로그 이미지

stuban

ㅇ.ㅇ

,

대학교 과목중에서 객체지향 프로그래밍이라는 과목의

기말 발표용으로 만든 텍스트어드벤처게임


이름이 객체지향 프로그래밍이지만 수업에서 클래스를 안배웠기 때문에 

모든 코드가 c스타일임

근데 파일입출력은 c++스타일로 배웠음 ㅋㅋ


시간이 별로 없어서 완벽하지는 않지만

아니 사실 허접한 수준이지만


블로그에 올릴 정도는 되는 퀄리티 인거 같아서 올림



일단 일회용 기말발표용 주제에 스토리도 만들었다.


기술의 발달로 등산은 물론 걸을 일도 없어진 세상

사람들은 쓸데없는 등산을 기피하게 되었다.

등산에 대한 여론이 나빠지다 결국 전 세계적으로 등산을 혐오하기 시작했다.

이에 등산로는 황폐화되었고 이제는 진짜로 위험한 행위가 되어버린 등산은

전 세계적으로 불법이 되어버리고 만다

이에 숨어있던 등산애호가들은 세계비밀등산가및등산로개척가지원협회 설립하여

비밀리에 등산로를 개척하고 있다.

플레이어는 세계비밀등산가및등산로개척가지원협회아시아지부 소속되어 전국의 산을 탐험해야 한다.




게임의 메인

이름대로 등산하는 게임이다.

세이브기능이 있기 때문에 이전에 진행하던 데이터가 있으면 이어서 플레이가능하다.


상하좌우 방향키로 메뉴를 고를 수 있고 엔터키로 선택할 수 있다.

<상점>에서 물건을 등산에 필요한 물건을 구매할 수 있고

<물건들> 메뉴에서 산에 들고갈 물건을 선택할 수 있다.


이건 <상점>

상하 방향키와 엔터로 구매가능하다.

약간 문제가 있는게 까먹고 잔액표시를 안해두었다...

결국 돈개념은 다 잡혀있고 정상작동 하지만

 이 게임안에서 잔액을 볼 수 있는 방법은 없음 ㅋㅋ




여긴 <물건들>

역시 방향키와 엔터로 담을 수 있고

써있지는 않지만 (이것도 실수,,,) X키를 눌러서 가방과 인벤토리를 오갈 수 있다.


가방은 포인터로 구현했고 인벤토리는 배열로 구현했다...

내가 왜 그랬는지는 몰라도

머리가 나쁘면 머리가 고생한다


이건 인게임

인게임부분은 꾸밀 겨를이 없었기 때문에

좀 많이 밋밋하다.


<상태보기>로 상태를 보고

<물건들>로 물건을 사용할 수 있다.


물건을 사용하면 다음으로 진행된다.



물건을 사용했을때.

앞에 1 있는건 디버그용으로 잠깐 해둔건데 이것도 실수로 못지움...



산마다 난이도가 있는데

난이도에 따라 어떤 상황이 발생하고

에 따라 좋은상황나쁜상황이 됨


그리고 좋은상황일때 지능이 높으면 효과가 2배가 되고

나쁜상황일때 민첩성이 높으면 나쁜효과가 절반이 됨



이건 좋은상황


나쁜상황 + 정상 도착

정상에 도착하면 보상으로 기력 30을 줌

참고로 정상이 끝이 아니라 하산도 해야함


이건 나쁜상황인데 민첩이 높아서 절반만 깍인거


아무 상황도 없는 상황 + 등산 끝


등산이 끝나면 

세계비밀등산가및등산로개척가지원협회아시아지부 

에서 지원금이 나온다.

지원금은 (산 높이) * (산 난이도) * 10






최대한 하드코딩을 피하기 위해서

웬만한 데이터는 텍스트파일로 따로 뽑아서 리소스 폴더에 넣어놨음.


help.txt는 도움말

item.txt는 아이템 정보들

m(숫자).txt는 산 아스키아트들

main.txt는 메인 로고 아스키아트

mountain.txt는 산 정보들

situation.txt는 상황들  




int대신에 char을 많이 썼음

어차피 정수형인거는 똑같기 때문에 뭘 쓰나 정상적으로 작동하고

용량이 2배나 차이나기 때문에 큰 수를 다루는게 아니라면 char을 쓰는게 좋다고 생각함


솔직히 도토리키재기이지만 뜬금없는 결벽증이 생겨서 그렇게함

다만

돈을 저장하는 변수와

비트플래그

 파일입출력할때는 다른 타입을 쓰기도 함


파일 입출력할때 다른 타입을 쓴 이유는

"<<" 으로 파일입출력을 했는데 char을 쓰면 문제가 있어서....

그냥 내 실력 문제임




메모리 아낀다고 별 지X를 했지만 UI부분에서 재귀함수를 남발했음

ㅋㅋㅋ


이유는 그냥 보기 편하고 왠지 넣으면 교수님이 더 좋아할거 같아서

위에 있는 사진은 그나마 볼만하지만


나중에는

정의가 이따시 만큼 길어져버린 함수가 나와벌임...

(<물건들> 이나 <상점>을 구현할 때 쓰는 함수임)


물론 재귀함수만의 문제는 아니고

디펄트 파라미터를 정의해놨기 때문에 더 길어보이고

실제로 쓸때는 짧게 쓸 수 있음.






구현하려다가 시간이 없어서 구현못한게 많이 있음

특히 마지막으로 작업했던 등산상황부분이 심각한데

MtStateMTEffect 열거형들은 산에 날씨나 시간같은 개념을 추가하려다가 못한 흔적이고

Situation 구조체의 effectCountORCode 변수는

원래 아이템을 줍는 상황을 만들려고 했는데 포기한 흔적임... 


그 외에도 리소스파일에도 포기한 흔적이 많이 남아있고

디버그하던 흔적이 남아있다거나

체력이나 기력이 마이너스가 되면 게임오버를 해야하는데

그것도 구현안함...




구현할때 가장 신경써서 만든 부분은

단언컨대 아이템이라고 할 수 있음



unsigned short형 변수중에

앞에 6비트를 효과를 나타내는 플래그로 사용하고

나머지를 그 효과의 파워를 저장하는데 씀


가뜩이나 표현가능한 수가 적은 short형이지만 

어차피 실제로 사용하는 양은 100단위에서 움직이니깐

나름 효율적인 판단이라고 생각하고 있음


사용할때는 

앞에 6비트는 일반적으로 비트플래그 사용하듯이 하고

쉬프트 연산자로 앞에 앞에 플래그부분을 밀어버려서 파워를 따로 저장함


다행히 교수님도 좋아하는거 같았음





주석을 달때 장난식으로 단 부분이 몇개 있음

교수님이 보고 뭐라할지는 몰라도 내가 재미있었으니깐 그만임 ㅎ


장난주석의 예

게임 끝나고 동적해제하는 함수임






솔직히 집에있는 웬만한 프로그래밍

뒷장은 책 처음 샀을때 빼고 펼치지도 않았을 정도로

공부를 겁나 대충함


덕분에 보통 책의 후반부에 있는 파일입출력은 거의 안써봤는데

이번기회에 많이 써봄


아무튼, 문제는 디버그모드에서는 잘 되는데 릴리즈모드로 빌드하니깐 

텍스트파일들을 못찾는지 못읽는지 게임 실행이 안됨

릴리즈 모드도 솔직히 이번기회에 처음써봄...




이건 좀 변명이지만 1교시부터 시작하는 수업을 들으려고

새벽 6시에 일어나서 통학하는 상황이라

수업시간에 많이 졸았었는데(그와중에 결석이나 지각 ZER0)


교수님이 "이거 만드느라고 졸았구나" 라고 해주심 ㅎ

아마도 좋은 의미겠지?

(A+을 받았으니깐 좋은 의미인거 확정! ㅋ)





마지막으로 소스파일

final_exam.zip


'내가 만든거' 카테고리의 다른 글

데빌리쉬 리그  (0) 2024.02.18
길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
블로그 이미지

stuban

ㅇ.ㅇ

,


지금 동아리에서 만들고 있는 게임의 맵에디터입니다.


오브젝트들을 배치하면 xml로 맵파일을 만들어주고

나중에 불러와서 수정할 수 있습니다.


오브젝트를 배치할때 자석처럼 서로 붙는 기능이 있기때문에

쉽게 맵을 만들고 수정할 수 있고.

영점을 고려하지 않고 맵을 만들어도 알아서 중앙을 잡아서 저장하는 기능이 있습니다. (동영상에는 안나와 있지만 아무튼 그런기능있음)


문제까지는 아니고 주의사항으로는 시작점과 끝점을 무조건 설정해야한다는 점..?..





다른팀들 엑셀로 끄적일때 우리팀은 이걸로 편하게 ~~~

심지어 잘하면 모바일에서도 가능 !

'내가 만든거' 카테고리의 다른 글

길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
등산 시뮬레이터  (0) 2018.06.23
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
마인크래프트 만들었다  (0) 2017.05.24
블로그 이미지

stuban

ㅇ.ㅇ

,


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
32
33
34
35
36
37
38
39
40
41
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
/*
 상하좌우스와이프와 그냥 클릭을 구분 가능하게 함
사용할 스크립트에 MonoBehaviour 대신에 TouchGesture를 상속시켜주고
버추얼 함수들을 오버로딩해서 사용하셈
*/
public class TouchGesture : MonoBehaviour
{
    private const float SwipeDis = 10;//스와이프 허용 범위 수정하고 싶으면 이거 수정하셈
    private Vector2 StartPos;
 
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            StartPos = Input.mousePosition;
        }
        if (Input.GetMouseButtonUp(0))
        {
            Vector2 p = (Vector2)Input.mousePosition - StartPos;
 
            if (Mathf.Abs(p.x) < SwipeDis && Mathf.Abs(p.y) < SwipeDis)
                GetClick();
            else
            {
                if (Mathf.Abs(p.x) > Mathf.Abs(p.y))
                    GetSwipe(StartPos, new Vector2(Mathf.Sign(p.x), 0));
                else if (Mathf.Abs(p.x) < Mathf.Abs(p.y))
                    GetSwipe(StartPos, new Vector2(0, Mathf.Sign(p.y)));
            }
        }
    }
 
    public virtual void GetClick() { }
    public virtual void GetSwipe(Vector2 StartPos, Vector2 dir) { }
}
 
cs


'내가 만든거' 카테고리의 다른 글

길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
등산 시뮬레이터  (0) 2018.06.23
맵 에디터 !!!!  (0) 2018.05.11
유니티 사운드 매니저  (2) 2017.08.22
마인크래프트 만들었다  (0) 2017.05.24
블로그 이미지

stuban

ㅇ.ㅇ

,
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class SoundManager : MonoBehaviour
{
    private static SoundManager _Instance = null;
 
    public static SoundManager I
    {
        get
        {
            if (_Instance == null)
            {
                Debug.Log("instance is null");
            }
            return _Instance;
        }
    }
 
    void Awake()
    {
        _Instance = this;
    }
 
 
    public int audioSourceCount = 3;
 
    [SerializeField]
    [Header("clips"), Tooltip("오디오 클립들")]
    public AudioClip[] BGMs = new AudioClip[2];
    public AudioClip[] SFXs = new AudioClip[3];
 
 
    private AudioSource BGMsource;
    private AudioSource[] SFXsource;
 
    public delegate void CallBack();
    CallBack BGMendCallBack;
 
    void OnEnable()
    {
        float volume = PlayerPrefs.GetFloat("volumeBGM"1);
 
        BGMsource = gameObject.AddComponent<AudioSource>();
        BGMsource.volume = volume;
        BGMsource.playOnAwake = false;
        BGMsource.loop = true;
 
        //sfx 소스 초기화
        SFXsource = new AudioSource[audioSourceCount];
 
        volume = PlayerPrefs.GetFloat("volumeSFX"1);
 
        for (int i = 0; i < SFXsource.Length; i++)
        {
            SFXsource[i] = gameObject.AddComponent<AudioSource>();
            SFXsource[i].playOnAwake = false;
            SFXsource[i].volume = volume;
        }
 
 
        ChangeBGM("Game"false);
    }
 
    /**********SFX***********/
 
    public void PlaySFX(string name, bool loop = falsefloat pitch = 1)//효과음 재생
    {
        for (int i = 0; i < SFXs.Length; i++)
        {
            if (SFXs[i].name == name)
            {
                AudioSource a = GetEmptySource();
                a.loop = loop;
                a.pitch = pitch;
                a.clip = SFXs[i];
                a.Play();
                return;
            }
        }
    }
 
    public void StopSFXByName(string name)
    {
        for (int i = 0; i < SFXsource.Length; i++)
        {
            if (SFXsource[i].clip.name == name)
                SFXsource[i].Stop();
        }
    }
 
    private AudioSource GetEmptySource()//비어있는 오디오 소스 반환
    {
        int lageindex = 0;
        float lageProgress = 0;
        for (int i = 0; i < SFXsource.Length; i++)
        {
            if (!SFXsource[i].isPlaying)
            {
                return SFXsource[i];
            }
 
            //만약 비어있는 오디오 소스를 못찿으면 가장 진행도가 높은 오디오 소스 반환(루프중인건 스킵)
 
            float progress = SFXsource[i].time / SFXsource[i].clip.length;
            if (progress > lageProgress && !SFXsource[i].loop)
            {
                lageindex = i;
                lageProgress = progress;
            }
        }
        return SFXsource[lageindex];
    }
 
    /**********BGM***********/
 
    private AudioClip changeClip;//바뀌는 클립
    private bool isChanging = false;
    private float startTime;
 
 
    [SerializeField]
    [Header("Changing speed"), Tooltip("브금 바꾸는 속도")]
    public float ChangingSpeed;
 
    public void ChangeBGM(string name, bool isSmooth = false, CallBack callback = null)//브금 변경 (브금이름 , 부드럽게 바꾸기)
    {
        BGMendCallBack = callback;
 
        changeClip = null;
        for (int i = 0; i < BGMs.Length; i++)//브금 클립 탐색
        {
            if (BGMs[i].name == name)
            {
                changeClip = BGMs[i];
            }
        }
 
        if (changeClip == null)//없으면 탈주
            return;
 
        if (!isSmooth)
        {
            BGMsource.clip = changeClip;
            BGMsource.Play();
        }
        else
        {
            startTime = Time.time;
            isChanging = true;
        }
    }
 
    public string GetRandomBGMName()
    {
        return BGMs[Random.Range(0, BGMs.Length)].name;
    }
 
    private void Update()
    {
        if (!isChanging) return;
 
        float progress = (Time.time - startTime) * ChangingSpeed;//부드러운 오디오 전환
        BGMsource.volume = Mathf.Lerp(PlayerPrefs.GetFloat("volumeBGM"1), 0, progress);
 
        if (progress > 1)
        {
            isChanging = false;
            BGMsource.volume = PlayerPrefs.GetFloat("volumeBGM"1);
            BGMsource.clip = changeClip;
            BGMsource.Play();
        }
    }
 
    public void StopBGM()
    {
        BGMsource.Stop();
    }
 
    public void SetPitch(float pitch)
    {
        BGMsource.pitch = pitch;
    }
 
 
    //비주얼라이저용 오디오 샘플
    public float[] GetAudioSample(int sampleCount, FFTWindow fft)
    {
        float[] samples = new float[sampleCount];
 
        BGMsource.GetSpectrumData(samples, 0, fft);
 
        if (samples != null)
            return samples;
        else
            return null;
    }
 
    //볼륨
 
    public void changeBGMVolume(float volume)
    {
        PlayerPrefs.SetFloat("volumeBGM", volume);
        BGMsource.volume = volume;
    }
 
 
    public void changeSFXVolume(float volume)
    {
        PlayerPrefs.SetFloat("volumeSFX", volume);
        for (int i = 0; i < SFXsource.Length; i++)
        {
            SFXsource[i].volume = volume;
        }
    }
}
 
cs



여러번 프로젝트에 사용하며 천천히 많은부분을 고쳐 나갔는데


(아직도 남아 있을지 모르지만) BGM관련 버그 고치고

새로운 기능도 몇가지 추가했다.


이름으로 브금이랑 효과음을 호출할 수 있다.

효과음호출할때 피치를 조정할 수 있고

비주얼라이저같은걸 만들기 위한 샘플을 받아오는 함수도 있다.


'내가 만든거' 카테고리의 다른 글

길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
등산 시뮬레이터  (0) 2018.06.23
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
마인크래프트 만들었다  (0) 2017.05.24
블로그 이미지

stuban

ㅇ.ㅇ

,

마인크래프트 만들었다.

토요일부터 오늘까지 주말에는 게임하다가 평일에는 수업듣고 남는 시간에 짬짬히 만들었다

맵만드는 부분은 어떻게 해도 방법이 안떠오르길래 유튜브 튜토리얼을 보고 만들었고 세이브 시스템과 이동부분은 내가 직접 만들었다.


(아 실제 게임에서는 동영상에처럼 렉 안걸림 (라이트캠이 쓰레기인거임))

UI는 내가 직접 게임에서 캡쳐해서 넣었고 텍스쳐는 구글에서 슬쩍했음 

무한맵은 시간도 없고 실력도 없어서,,, 일단은 안만들었다


minecraft.z01

minecraft.zip


이거는 게임실행 파일

'내가 만든거' 카테고리의 다른 글

길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
등산 시뮬레이터  (0) 2018.06.23
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
블로그 이미지

stuban

ㅇ.ㅇ

,