일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ui
- 유니티기본
- LINQ
- React Native
- dotween
- unity통신
- unity3D
- 유니티
- 프로그래머스
- 전면광고
- C#
- 코딩테스트
- cs
- 열거형
- http
- 애드몹
- canvasgroup
- 유니티기초
- 모션
- 게임개발
- 광고테스트
- csvhelper
- 애니메이션
- 랜덤
- unity
- enum
- scrollrect
- UGUI
- Admob
- 컴퓨터구조
- Today
- Total
목록유니티기초 (8)
Ruya Games
무한 스크롤이 정확한 용어인지는 모르겠습니다만, 스크롤창의 오브젝트들을 로드 시점에 한번에 생성하지 않고 스크롤이 바닥을 찍어갈때쯤마다 밑의 새로운 오브젝트들을 생성하는 스크롤창을 만들어보려고 합니다.제가 알기로는 아마 비슷한 기능을 하는 에셋이 몇개 있는 것으로 알지만, 구조가 간단할것 같고 다운받아서 수정해가면서 쓰기도 귀찮아서 그냥 직접 만들어보기로 했습니다. 기본적인 무한 스크롤 생성 방법입니다.스크롤이 아래 부분의 특정 지점(scrollBound)에 도달하면 LoadItem() 함수를 통해 오브젝트들을 새로 생성합니다. 이때 생성되는 아이템들의 개수 단위는 itemCount 변수에 저장된 값만큼 생성하게 됩니다.using UnityEngine;using UnityEngine.UI;public c..
스크립트간 순서를 설정하고 싶을 때가 있습니다.예를 들면 각각 캐릭터, 배경, UI를 담당하는 스크립트가 있다고 할때, 배경 > 캐릭터 > UI 순서대로 스크립트를 초기화하고 싶다던가.. 그럴때요. 어찌됬건 스크립트 순서를 지정함으로써 얻을 수 있는 개발상의 이점은 많다고 생각합니다. [DefaultExecutionOrder('숫자')]이렇게 DefaultExecutionOrder 헤더를 사용하시면 됩니다.괄호 안의 숫자가 작을수록 먼저 실행됩니다(음수 가능). 구체적인 사용예시는 아래와 같습니다.using System;using System.Collections;using System.Collections.Generic;using UnityEngine;[DefaultExecutionOrder(1000)..
자식 순서를 확인하고 제어할 일은 은근히 있습니다. 먼저 자식 인덱스를 확인하는 방법입니다. public transform a; void Start() { //a의 자식 인덱스 확인 var childIndex = a.GetSiblingIndex(); } 다음은 특정 자식 오브젝트의 인덱스를 변경하는 방법입니다. public transform a; void Start() { //a의 자식 인덱스 변경 (예시에선 3으로 변경됩니다) var childIndex = a.SetSiblingIndex(3); }
Game창이나 Scene창 등이 모종의 이유로 없어졌을때 다시 여는 방법입니다. 간단하게는 아래 스크린샷처럼 ...클릭 > Add Tab에서 열려는 창을 선택하면 됩니다. 다른 창을 열고싶으시면 상단의 Window탭에서 선택해서 열 수 있습니다.
리스트의 순서를 랜덤으로 설정하는 방법은 여러가지가 있을텐데, 아래는 그중 LINQ를 사용하는 간단한 방법 하나입니다. myList = myList.OrderBy(_ => Guid.NewGuid()); 여기서 값을 하나 추출하고 싶다면 뒤에 First() 또는 FirstOrDefault()를 붙이면 됩니다. var selectValue = myList.OrderBy(_ => Guid.NewGuid()).First(); 여기서 특정 값이 추출되지 않길 바란다면, Remove()로 원소를 제거하고 돌리시면 됩니다. var myList = new List { 0, 1, 2, 3, 4 }; myList.Remove(3); var selectValue = setArray.OrderBy(_ => Guid.NewGu..
UGUI로 화면을 구성하고 테스트할때, 갑자기 잘 되던 터치가 안되거나, 버튼이 눌리지 않는 경우가 있는데요. 기본적으로는 3가지 경우가 있습니다. 1. 레이어 순서 맞추기 유니티의 UGUI는 하이어라키상에서 같은 부모일때 아래로 내려갈수록 위에 배치됩니다. 아래와 같이 5개의 오브젝트가 있고, 모두 겹쳐있다면 가장 아래에 있는 Button_4만 클릭할 수 있는 것이죠. 따라서 이러한 경우에는 배경으로 사용할 오브젝트의 자식index를 가장 위로 올려줘야 합니다. 2. Raycast target 값 설정 배경으로 사용하고 싶지 않아서 다른 오브젝트 앞에 표시하고 싶지만 터치 이벤트를 받고싶지는 않다면, 해당 오브젝트의 Raycast Target설정을 체크 해제하면 됩니다. 3. EventSystem 컴포..
모종의 이유로 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; } }..