게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 1주차
0.Singleton(싱글톤) 디자인 패턴
싱글톤이란 , 해당 프로젝트에서 단 하나의 클래스로만 존재해야 되며 외부에서 호출시 어디든지 호출 할 수 있게 하는 디자인 패턴을 뜻한다.
이렇게만 보면 싱글톤이 장점만 있는것 같지만 단점으로 남발하게 되면 각 스크립트끼리 커플링될 확률이 높아 남발이 되면 안된다.
public class GameManager : MonoBehaviour
{
private static GameManager instance; //정적변수
public static GameManager Instance //프로퍼티 선언
{
get
{
if (instance == null)
{
instance = FindObjectOfType<GameManager>();
if (instance == null)
{
GameObject obj = new GameObject();
obj.name = typeof(GameManager).Name;
instance = obj.AddComponent<GameManager>();
}
DontDestroyOnLoad(instance);
}
return instance;
}
}
private void Awake()
{
if(instance != null && instance != this)
{
Destroy(gameObject);
}
else
{
instance = this;
DontDestroyOnLoad(instance);
}
}
}
강의 내용하곤 다른 싱글톤 패턴이지만 복습할겸 다시 작성해보았다.
개인으로 개발할때 자주 사용했던 싱글톤 구조이다. 나중에 generic으로 사용하도록 변경해야한다.
1.기기에 따른 게임 성능 차이 대처법
* frame(프레임)은 1초에 연산되는 횟수를 의미, 즉 60프레임 : 1초에 60번 연산(화면출력 등등)이 일어난다.
하지만 이 프레임은 기기마다 다르기 때문에 게임 진행시에 기기가 좋을수록 그 사람이 유리 할 수 박에 없다.
Application.targetFrameRate = 60;//해당 기기의 프레임을 60으로 고정시켜주는 코드
해당 코드를 사용하여 모든 기기에서 전부 60프레임으로 고정시킬 수 있다.
또한 시간과 관련된 변수를 제어할때는
if (tatalTime > 0f)
{
tatalTime -= Time.deltaTime;
}
else
{
tatalTime = 0f;
EndPanel.SetActive(true);
Time.timeScale = 0f;
}
totalTimeTxt.text = tatalTime.ToString("N2");//소수점 둘째자리만 표시하는 변수
Time.deltatime 메서드를 이용하여 경과된 시간을 받아와 시간값도 다른 기기에서도 같은 값을 가져올 수 있게 할 수 있다.
2.간단한 오브젝트 생성 반복 로직 만들기
========Game Manager class================
[SerializeField] GameObject rain;//inspector 프리팹(게임오브젝트)를 넣을 변수
void Start()
{
InvokeRepeating("MakeRain",0f,1f);
}
void MakeRain()
{
Instantiate(rain);
}
InvokeRepeating(호출할 함수 이름 , n초후에 함수 시작, 함수 동작 주기)
해당 함수는 동작시 호출한 함수를 n초후에 동작하며 함수 동작 주기마다 반복하는 함수이다.
반복을 안하고 일정 타이밍에 동작tl키고 싶으면 Invoke( 호출할 함수 이름 , n초후에 함수 시작)로 사용하면된다.
3.랜덤 난수 받아오기
float x = Random.Range(-2.4f, 2.4f);
Random.Range(최소값,최대값) 해당 함수를 사용하면 최소값 이상 최대값 미만의 수에서 하나의 숫자를 return하는 함수이면 Seed값에 따라 return 되는 값이 다르다.
4.SpriteReneder 에 코드로 접근하여 색상값 변경하기.
public SpriteRenderer spriterenderer; // Inspector에서 SpriteReneder 등록 필수
spriterenderer = GetComponent<SpriteRenderer>();//해당 오브젝트의 SpriteRenderer 컴포넌트 호출
spriterenderer.color = new Color(100 / 255f, 100 / 255f, 1f, 1f); //해당 색상변경
해당 오브젝트에 등록된 SpriteRenderer 컴포넌트를 호출하여 색상을 변경하는 코드다.
각 color의 멤버변수는 (r , g , b , a)로 a는 alpha값(투명도)를 나타낸다.
-.color 값 멤버변수는 float값이므로 색을 지정할떄 255f를 각 색상값을 나눗셈을 하여 사용하게된다.
ex) 파란색으로 색상을 변경하고 싶음 -> new Color(100 / 255f, 100 / 255f, 1f, 1f);
5.Unity 화면 해상도 초기 설정
6.Unity_ UI Button에서 On Click event 설정
해당 동작으로 간단하게 UI Button의 클릭시 동작 조건을 추가할 수 있다.
Unity 퀘스트 달리기 반
2. 배열을 사용한 합계 및 평균 계산
int[] arr = { 10, 20, 30, 40, 50 };
int sum = 0;
int avg = 0;
for(int i =0; i < arr.Length; i++)
{
sum += arr[i];
}
avg = sum / arr.Length;
Console.WriteLine("Sum: " + sum);
Console.WriteLine("Average:: " + avg);
4.숫자 맞추기 게임
Random rand = new Random(); //난수 생성 변수 초기화
int answer = rand.Next(1, 101); // 1 - 100 의 숫자를 랜덤으로 초기화
int num = 0;
do
{
Console.Write("Enter your guess (1 - 100) : ");
string input = Console.ReadLine();
int.TryParse(input, out num);
if (answer > num)
{
Console.WriteLine("Too low! Try again. ");
}
else if (answer < num)
{
Console.WriteLine("Too high! Try again.");
}
else
{
Console.WriteLine("Congratulations! You guessed the number.");
return;
}
} while (answer != num);
5.이중 반복문을 사용한 구구단 출력
int[] arr = { 2, 3, 4, 5, 6, 7, 8, 9 };
void print(int a , int b)
{
Console.Write(a + " x " + b + " = " + a*b);
}
void sort_string(int num)//문자열 정렬 함수
{
if (num >= 10)//곱 결과그 두자릿수면 4칸 띄움
{
Console.Write(" ");
}
else // 곱결과가 한자릿수면 5칸 띄움
{
Console.Write(" ");
}
}
//세로 출력
for (int j = 1; j < 10; j++)
{
for (int i = 0; i < arr.Length; i++)
{
print(arr[i], j);
sort_string(arr[i] * j);
}
Console.WriteLine("");
}
Console.WriteLine("");
Console.WriteLine("");
//가로 출력
for (int i = 0; i < arr.Length; i++)
{
for (int j = 1; j < 10; j++)
{
print(arr[i], j);
sort_string(arr[i] * j);
}
Console.WriteLine("");
}
6. 배열 요소의 최대값과 최소값 찾기
int[] arr = { 20, 10, 40, 100, 30 };
int min = arr[0];
int max = arr[0];
for(int i =0; i < arr.Length; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
if (arr[i] > max)
{
max = arr[i];
}
}
Console.WriteLine("Min Num : " + min);
Console.WriteLine("Max Num : " + max);
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-08-20(화) ::C# Linq.OrderBy() 정렬 알고리즘 ,랜덤으로 원소 섞기(셔플기능) , 광고붙이기(UnityAD) (0) | 2024.08.20 |
---|---|
TIL : 2024-08-19(월) (0) | 2024.08.19 |
TIL : 2024-08-16(금) (0) | 2024.08.16 |
TIL : 2024-08-14(수) (0) | 2024.08.14 |
TIL : 2024-08-12(월) (0) | 2024.08.12 |