게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 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 화면 해상도 초기 설정

Game 화면에서 (+) 버튼을 눌러 새로 해상도를 설정 할 수 있다.

 

6.Unity_ UI Button에서 On Click event 설정

Inspector에서 본 Button 컴포넌트 구조
Retry Button Script를 컴포넌트로 추가하고 Button 컴포넌트에서 OnClick() 동작시 동작하게 할 Event 설정 (아직 어떤 동작을 하지는 설정 안한 모습)
Retry Button의 Retry() 함수 호출을 설정하는 모습

해당 동작으로 간단하게 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);

+ Recent posts