일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- canvasgroup
- 프로그래머스
- unity통신
- Admob
- 랜덤
- LINQ
- C#
- 광고테스트
- 애니메이션
- ui
- dotween
- 열거형
- 모션
- React Native
- csvhelper
- unity3D
- 유니티
- 게임개발
- 유니티기본
- 컴퓨터구조
- unity
- enum
- 코딩테스트
- 유니티기초
- cs
- scrollrect
- 애드몹
- http
- 전면광고
- UGUI
- Today
- Total
목록C# (17)
Ruya Games
모종의 이유로 list의 맨앞 또는 맨뒤 값을 제거하고 싶을때가 있는데요. list.RemoveAt을 사용하면 Index를 사용해서 원소를 제거할수 있습니다. var myList = new List(); ... myList.RemoveAt(0) // 맨처음 원소 제거 myList.RemoveAt(myList.Count - 1) //마지막 원소 제거 이렇게 제거하면 됩니다. 다만 유의할점은 위의 예시처럼 gameObject들이 담긴 List라면 리스트에서 원소를 제거해도 씬에서 gameObject들은 삭제되지 않습니다. 원인은 list에 담긴 gameObject 정보들은 참조값이고, RemoveAt함수는 리스트 내의 참조값만을 제거하기 때문입니다. 따라서 리스트에 담긴 게임오브젝트를 실제로 유니티 씬 안에..
이번에 구현해야 할 내용은 움직이는 오브젝트를 이어서 생성하기 입니다. 무한맵도 비슷한 느낌으로 구현 가능합니다. 아래는 간단한 구현 방법입니다. 1. Time.deltaTime으로 리스폰 시간 설정 Time.deltaTime을 사용해서 리스폰 시간을 관리합니다. 아래는 사용 예시입니다. private float timeSinceLastSpawn; private const float respawnTime = 5f; private void Update() { if (respawnTime < timeSinceLastSpawn) { timeSinceLastSpawn = 0f; //여기에 오브젝트 생성 함수를 추가합니다. } else { timeSinceLastSpawn += Time.deltaTime; } }..
모두들 보통 게임을 개발할때 60프레임을 기본으로 생각하고 개발하실것 같은데요. 에디터에서는 성능에 따라 프레임이 200이 경우도 있어서, 제한을 걸어두지 않으면 개발이 원활하지 않습니다. 유니티에서 안드로이드 앱을 빌드하는 경우에는 기본 프레임을 30으로 설정하여 빌드하는데요. 이 설정값을 60으로 변경하는 방법입니다. private void Start() { Application.TargetFrameRate = 60; } 이렇게 설정해두면 기기에서도 프레임이 60으로 설정되고, 에디터에서 개발할때도 프레임이 60으로 고정됩니다. 실행시에 에디터에서 프레임을 확인하는 방법은, Game 윈도우의 Stats 버튼을 클릭하면 확인 가능합니다. Statsistics 창에서는 프레임 외의 정보도 확인 가능한데,..
리스트나 배열의 원소들의 순서를 랜덤으로 섞는 방법은 linq와 Guid를 사용해서 간단히 구현 가능합니다. using System.Linq; public class GameManager : MonoBehaviour { public List randomList; void Start() { randomList = randomList.OrderBy(_ => Guid.NewGuid()).ToList(); } }
이제 구현해야 할 내용은 아래와 같습니다. 플레이어의 블록이 이동했을때 이동한 지점 아래의 블록 색상과 플레이어 블록의 색상이 같다면, 아래의 블록을 제거하고 블레이어 블록은 떨어진다. 그리고 현재 블록들의 기본 상태는 매 프레임마다 일정 값만큼 위로 올라가고 있고, transform.Translate로 구현되어 있습니다. 그렇다면 동작은 플레이어 블록을 이동시킨다. 플레이어 블록의 이동이 끝났을때 아래 블록의 색상값을 확인한다. 색상값이 일치한다면 아래 블록을 제거한다. 일시적으로 transform.Translate의 동작을 멈추고, 플레이어 블록을 아래로 떨어지도록 한다. 플레이어 블록의 아랫면이 다른 블록과 닿으면 다시 다른 블록처럼 위로 상승하도록 한다. 이 순서로 동작해야 합니다. 1번은 구현했..
만드려는 게임의 기본 시스템은 이러합니다. 모든 블록들은 랜덤한 색상값을 갖고, 플레이어의 블록 아래에 플레이어와 같은 색상값을 가진 블록이 있다면 아래의 블록은 사라지고 플레이어의 블록은 밑으로 떨어집니다. 그렇다면 블록 오브젝트마다 색상값을 지정해줘야합니다. int로 지정해줘도 되고, string으로 지정해줘도 되지만 enum(열거형)으로 설정하려고 합니다. int에 비해 가독성도 좋고, string에 비해 오타가 발생할 일도 없으며, 인스펙터상에서 드롭다운으로 값을 지정해줄수 있습니다! enum을 설정하는 방법은 아래와 같습니다. public enum BlockColor { Blue, Red, Pink, Green, White } enum 타입은 첫번째 값부터 0에 대응되고, 순서에 따라 1씩 증가..
사용되는 변수들 public GameObject torpedo; public List transformList; private List vectorsList; public float speed; torpedo : 곡선을 따라 움직일 오브젝트 transformList : 베지어 곡선의 point 오브젝트들 vectorsList : point 오브젝트들의 transform.position 값들 speed : 오브젝트의 속도 베지어 커브 계산 함수 private static Vector3 Bezier(List points, float value) { List step1 = points.ToList(); int pastTemp = 0; for(int i = 1; i < points.Count; i++) { va..