일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Lv.3
- 코테
- 유니티
- c++
- 2870번 수학숙제
- 17070번
- 백준 c++ 2870번
- 코딩테스트
- 백준 1103번
- Lv2
- 백준 2870번
- dfs
- 2870번
- 2870번 c++
- 백준 17070번
- 2468 c++
- 2870번 수학숙제 c++
- 백준
- Algorithm
- 오브젝트 풀링
- 백준 1103번 게임
- C#
- 플레이어 이동
- 백준 c++ 2468번
- Beakjoon
- 백준 17070번 c++
- Unity
- 백준 1103번 c++
- 수학숙제
- 프로그래머스
- Today
- Total
목록분류 전체보기 (207)
주녘공부일지
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b5AOAQ/btrsSbVrfa4/Qinzlse5OAj2mHKysUvmO1/img.png)
0. 주요 클래스 선언된 변수 한 눈에 보기 - 강의라 모두 퍼블릭으로 선언하였지만, 외부에서 접근이 반드시 필요한 아이가 아니라면, 지양하는 것이 좋음 1. 플레이어 무적 시간 OnEnable() : 오브젝트가 활성화 될때마다 호출되는 함수 - 조건문으로 처음 시작할 땐 무적타임x Unbeatable() : 무적 상태를 변경하는 함수 - 투명도를 올려 무적 상태를 나타냄 2. 폭발 효과 프리팹 Explosion 생성 - 기본 이미지는 Null로 설정하고 애니메이터의 파라미터에 Trigger로 Onexplosion 추가 + 오브젝트 풀링에 등록 // objectManager StartExplosion() : target의 타입에 따라 폭발하는 애니메이션 크기 변경 class Enemy에서 로직을 추가해 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/crOOz3/btrsA6mhYEt/GElwWVKokyAWd2H9elc6RK/img.png)
난이도를 너무 어렵게 세팅한 것 같다. 0. 준비하기 - 보스몹의 피격상태는 애니메이션으로 관리할 예정 // 트리거 매개변수 OnHit - 돌아가는 트랜지션의 Has Exit Time 체크 // 컨디션이 따로 없기 때문 Any State : 언제나 실행되는 애니메이션 1. 총알, 적 보스 프리팹 적 기체가 Boss 일 경우 - Awake() : 애니메이션을 가져옴 - OnHit() : 애니메이션의 트리거 매개변수 OnHit 활성화 + 아이템을 드롭하지 않음 - OnEnable() : 보스체력세팅 + 지정된 위치에서 이동x // 2번 - Update() : 보스의 공격패턴은 따로 만들 것이므로 함수호출x - OnTriggerEnter2D() : BorderBullet 태그에 부딪혀도 파괴되지 않음 + 보스..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b0VFz0/btrr9zCr9jb/shzKsBIEYWFN177bxpCt6k/img.png)
0. 준비하기 - Follower 오브젝트 3개 추가, FollowerBullet 프리펩 추가 - 보조 총알도 오브젝트 풀링 등록 ( class ObjectManager에 추가 ) 1. 기본 작동 구현 - class Player에서 필요한 변수와 함수를 가져와서 수정해서 사용 2. 팔로우 로직 ( 상속시키듯 구현 ) Watch(), Follow() : 따라갈 위치를 갱신해주는 함수 // Update()문에서 실행 - Follower(0) 는 Player를 parent로 갖고, Follower(1)는 Follower(0)를, Follower(2)는 Follower(1)을 parent로 가져서 따라가게 만듬 #. Input Pos - 부모 오브젝트의 위치변동이 없다면, 자식도 이동하지 않음 (저장하지 않음)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ARjHu/btrsfXJjw54/xYPHtluXvk20Ts5BwQ5LdK/img.png)
1. 구조체 - 구조체로 사용할 것이기 때문에 Monobehavior의 상속 제거 2. 텍스트 데이터 Resources : 런타임에서 불러오는 에셋이 저장된 폴더 - ReadSpawnFile() : 리스폰 파일을 불러오는 함수 TextAsset : 텍스트 파일 에셋 클래스 - as TextAsset : TextAsset이 아니라면 null ReadLine() : 텍스트 데이터를 한 줄씩 반환 ( 자동 줄 바꿈 ) StringRaeder : 파일 내의 문자열 데이터를 읽는 클래스 // using System.IO; split() : 지정한 구분 문자로 문자열을 나누는 함수 + StringReader로 열어둔 파일은 작업이 끝난 후 꼭 닫아주어야 함 3. 데이터 적용 변경 사항 - 생성할 적 기체, 위치, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b4UusG/btrr7qFuXi6/KjtvpaguK3iTmNNDzmnMGK/img.png)
1. 오브젝트 풀링 오브젝트 풀링 : 미리 생성해둔 풀에서 활성화 / 비활성화로 사용 https://godgjwnsgur7.tistory.com/21 [Unity] Object Pooling 기법 Object Pooling : 오브젝트를 재활용하기 위한 디자인 패턴 ( 최적화 ) 빈번히 생성, 파괴되는 오브젝트들을 풀에 모아서 미리 생성해놓고 활성화 / 비활성화로 관리하며 재사용 - 런타임 중에 수십개 godgjwnsgur7.tistory.com 2. 풀 사용 public ObejctManager obejectManager; - Instantiate()는 MakeObj() 호출로 변경 ( transform.position 로직 작성 ) // 생성 시에 위치를 주지 않기 때문 - Destory() 는 Se..
Object Pooling : 오브젝트를 재활용하기 위한 디자인 패턴 ( 최적화 ) 빈번히 생성, 파괴되는 오브젝트들을 풀에 모아서 미리 생성해놓고 활성화 / 비활성화로 관리하며 재사용 - 런타임 중에 수십개의 다른 오브젝트를 생성하고 파괴하는 것은 성능적으로 굉장히 많은 공간을 차지하기 때문에, 미리 생성함으로써 런타임에서의 불필요한 메모리 낭비를 최소화하지만, Loading 시간이 소요됨 - C++은 힙에 메모리 공간을 할당하고 원하는 시점에 삭제할 수 있지만, ( new, delete ) C#은 사용하지 않는 메모리가 생기면 가비지 컬렉트(GC)가 일정 주기마다 메모리를 정리하기 때문에 GC의 실행 시점을 제어하기 위해서도 사용 - 만약, 풀 안에 오브젝트를 가져오려고 할 때, 모든 오브젝트가 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/doIqDO/btrr2S9nXVi/8X37AMxZ2HmZJDd0X8Dl8k/img.png)
0. 준비하기 - 카메라는 그대로, 배경이 아래로 움직여서 플레이어가 위로 움직이는 것처럼 느껴지게 만듬 - 카메라에서 벗어난 배경은 다시 위쪽으로 붙여서 재활용하여 사용할 예정 ( 1. 스크롤링 ) - Back Group Top, Middle, Bottom 으로 나눠 Parallax 기법을 사용할 예정 ( 2. 패럴렉스 ) - Back Group Botton, Middle, Top 에 스크립트 추가 ( class Background ) + 이미지는 위에서 아래로 움직일 예정 1. Scrooling 기법 - Camera View 높이 = Size x2 // veiwHeight - 기본 셋팅 (시작 셋팅) : startIndex = 2, endIndex = 0 - sprites[0] : 가장 밑에 있는 스..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbwVPW/btrr4x4s9gq/lHKSGA953FgSjneydd0Ib1/img.png)
0. 준비하기 - string 으로 타입을 저장하여 분류 - Rigidbody2D를 가져와 아이템을 * 1f의 속도로 떨어뜨림 - OnTriggerEnter2D로 BorderBullet 태그에 닿으면 객체를 파괴 - Boom Icon은 기본 셋팅 투명도 0 ( 폭탄의 사용 가능 갯수를 투명도 0, 1로 나타내는 로직이기 때문 ) 1. 충돌 로직 - Item 태그에 닿으면 실행할 로직을 추가 ( power, boom 은 최댓값에 도달하면 점수로 변환 ) - 예외처리 내용 : 아이템 중복 드롭 방지 - 적 기체 파괴 시 랜덤한 확률로 아이템 드롭하는 로직 추가 ( Instantiate()로 생성 ) 2. 필살기 - isBoomTime : 필살기 중복 사용 방지 - boomEffect (GameObject) ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ci5Dln/btrswUZ2Ftk/kk0oNo5ty4KSRgAM50FXG0/img.png)
0. 목숨과 점수 UI 배치 - UICanvas 에 Text와 Image를 추가하여 Rect Transform를 설정 Tip) 우측 이미지 상태에서 Shift와 Art를 눌러서 선택 - Scale With Screen Size : 기준 해상도의 UI 크기 유지 // 웬만하면 이 외에는 사용할 일 없음 1. UI 로직 - 각 적 기체의 점수는 Enemy 스크립트에서 int형 변수로 선언하여 관리 - Text, Image, 등의 UI 변수는 using UnityEngine.UI를 선언해야 사용 가능 string.Format() : 지정된 양식으로 문자열을 변환해주는 함수 - "{0:n0}" : 세자리마다 쉼표로 나누는 양식 UpdateLifeIcon(int life) : int형 변수 life를 인자로 받아..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QmMu6/btrrYRDlFZ0/yuMbjzVfMw0wFknrLSen4k/img.png)
1. 생성된 적 이동 - ranEnemy, ranPoint로 적 기체의 종류와 생성될 위치를 랜덤으로 지정하고, Instantiate()로 생성 - enemyLogic 변수로 Enemy 를 가져와 생성 직후에 플레이어에 대한 정보를 넘겨줌 - ranPoint 5,6번은 우측에 존재하는 스폰포인트이기 때문에 이동방향에 -1을 곱하여 좌측 대각선으로 이동하게 설정하고 우측에서 생성되기 때문에 생성될 적 기체 이미지를 back 기준으로 90도 회전 ( 7,8번은 반대쪽이기 때문에 오른쪽으로 이동 ) - 외에는 위에서 아래로 이동 gameObj.transform.Rotate(back or forward * 각도); - 2D에선 back, forward만 사용 // back : z축 -1 방향 ( 반대방향이라고 ..