일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 게임
- ar
- Unity
- 게임제작
- 인터페이스
- 델리게이트
- github
- callbyvalue
- 소규모프로젝트
- AR세팅
- 확장메서드
- 병맛게임
- AR Foundation
- 레이캐스트
- ExtensionMethod
- 리듬게임에디터
- ARProgect
- 짐벌락
- Quaternion
- 게임개발
- 유니티
- raycast
- Euler
- 리듬게임
- C#
- 깃허브
- callbyreference
- 로케트
- 1인개발
- AR게임
- Today
- Total
목록C# (8)
Ssssong += Dev
ThrowBall! 만드느라 잠시 넣어놨던 리듬게임 다시 꺼내서 뚝딱거리고 있다. 에디터에서 찍은 노트를 세이브/로드 할 수 있는 기능을 추가하였다. 에디터에서 노트를 저장하면 플레이 화면에서도 노트 정보를 가져올 수 있다. Json 파일에 노트 정보를 저장하고 있다. 이런 식으로 음악 이름, 저장 시간, 난이도, 라인간격, bpm, 그리고 각 라인에 찍혀 나올 정보가 기록된다. { "musicName": "Scherzo Waltz", "dataTime": "20220617135058", "difficulty": "Normal", "lineGap": 50.0, "bpm": 240, "leftDial": [ "4;startLine", "13;endLine" ], "leftNormal": [ "6" ], "..
델리게이트는 정해진 기능을 대신 할 수 있는 대리자이다. delegate 리턴타입 델리게이트명(매개변수) 형식으로 규격을 정해줄 수 있다. //델리게이트 선언 public delegate void PrintInfoDel(); //델리게이트 형식을 매개 변수로 받아오기 void PrintInfo(PrintInfoDel printInfoDel) { Debug.Log("---------------"); target.ShowInfo(); Debug.Log("---------------"); } void Start() { Player player = new Player(); //델리게이트 적용 PrintInfo(player.ShowInfo); } 델리게이트는 비슷한 형식의 함수가 일부분의 기능만 다르게 동작할 때..
https://www.youtube.com/watch?v=CcSG_BKB7WM 지난 4월 제작했던 뮤직비디오 겸 리듬게임이다. velog에는 올렸었는데 블로그를 티스토리로 바꾸면서 이 작업을 올리지 않았기에 따로 업로드한다. 유니티로 만드는 뮤직비디오가 목표였기에 그다지 게임으로서 확장성이 있지는 않지만 이 작업을 좀 더 발전시키려 현재 장기프로젝트에 리듬게임 제작 프로젝트를 진행하고 있다.
확장 메서드란? - 기존에 제공되는 클래스 또는 외부 라이브러리에 속해 있는 클래스에 새로운 기능을 "상속"이 아닌 메서드를 이용해서 기능을 확장하는 것을 의미한다. 확장 메서드의 특징 - C# 언어의 확장 메서드는 정적 클래스만을 통해서 정의하는 것이 가능하다. 즉, 정적 클래스가 아니면 확장 메서드 자체를 구현하는 것이 불가능하다. - C# 언어의 확장 메서드를 정의하는 정적 클래스는 반드시 최상단 영역에 위치시켜야 한다. - 특정 클래스의 중첩 클래스(클래스 안에 클래스를 선언한 형태)로는 확장 메서드를 정의하는 것이 불가능 구조체, 클래스에 기본으로 내장되어 있는 여러 메서드들 이외에 원하는 메서드를 추가하여 사용할 수 있다. public static class ExtensionMethod { /..
추상클래스, 추상함수(abstract) 기능이 여기서 완성되지 않음. 상속하는 자식에서 기능을 완성시켜 주어야 함. 추상함수를 하나 이상 포함하고 있는 클래스이다. 미완성된 클래스이기 때문에 해당 클래스를 상속받는 자식들은 완성되지 않은 함수들을 완성시켜 주어야 한다. 추상클래스 자체로는 완성되지 않았기 때문에 객체를 찍어낼 수 없으며 인스턴스화 할 수도 없다. 추상함수(추상메서드)는 구현이 이루어지지 않고 정의만 할 수 있다. 클래스 다이어그램에서 > 로 클래스를 표시하며 추상 메서드는 void { abstract } 이렇게 표시한다. '해당 클래스를 구현하는 틀'이라 볼 수 있으며 협업할 때 중요하게 다뤄진다. 인터페이스(interface) 해당 추가 기능을 꼭 구현하겠다는 약속. 인터페이스 기능의 ..
C#에서 사용하는 디자인패턴인 인터페이스이다. 유니티에서 IPointerHandler 시리즈 사용할 때 조금씩 맛봤었다. 기능을 인터페이스로 정의해 두고, 필요한 클래스에 상속하여 사용할 수 있다. public interface IInterface { // 인터페이스는 약속이다. // 인터페이스 이름 규칙 : 앞에 I를 붙인다. // 인터페이스 안에는 함수만 만들 수 있고 기능의 형태만 만들어 줄 수 있다. //인터페이스 함수는 앞에 public이 생략되어 있다. void Function(); } public interface IFly { void Fly(); } public interface IAttack { void Attack(); } public class Dragon : Monster, IAtt..
헷갈리는 부분 다시 정리... 일반적으로 구조체의 복사는 값의 복사이고(깊은 복사) 클래스의 복사는 주소의 복사이다.(얕은 복사) 유니티에서 인스펙터 창에 public으로 끌어다 놓은 객체는 클래스의 복사로, 변경 시 원본의 변경이 일어난다. public Transform tempTransform; //이후 인스펙터 창에서 tempTransform에 오브젝트 복사해 넣음 Vector3 tempVec = new Vector3(10, 10, 10); tempTransform.position = tempVec; 이런 식으로 사용했을 때 원본 오브젝트의 포지션이 바뀌게 된다. 그러나 int num = 10; 이렇게 선언된 변수 num은 int가 구조체이기 때문에 int num = 10; int input = 0..
오늘 수업 시간 중에 제트카라 커스텀하기가 과제였지만 대충 부딪히면 게임오버된다는 요소만 가져온 채 새로 만들었다. 시간 정해서 만들 때 얼마나 만들 수 있는지 궁금해서 항목 정리해서 빠르게 해 보았다. 원하던 요소는 다 만들었는데 버그가 있다. 부스터 게이지 떨어지는 도중에 다시 누르면 게이지가 굳어버리는... 다시 채울 수 있지만 이전에 채우던 게이지랑 더해서 적용되는지 급발진을 해버린다. 그래서 급발진 게임오버되는 모습까지 찍어봄 ㅋㅋ 수업 시간 도중에 완성이 목표였지만 역시 버그는 피할 수 없나 보다.... 내일 와서 버그만 살짝 고치고 마무리해야지. 버그 고치고 나서도 시간이 있을 것 같으니 좀 더 추가할 것 없는지 생각해봐야겠다.