반응형

안드로이드 스튜디오 gradle에서 Gson 라이브러리 등록하는 방법입니다.

 

- 안으로이드 스튜디오에서 라이브러리 추가 방법

1. 라이브러리 추가

2. 검색

com.google.code.gson:gson:2.8.7

3. 해당 버전 확인 후 OK

1. 아래 사이트 접속.

2. build.gradle 에 Dependency 추가

3. Project Structure에서 라이브러리 적용

-끝-

 


1. https://mvnrepository.com/artifact/com.google.code.gson/gson

2. 원하는 버전선택

Gson 버전선택

3. Build Tool(빌드 관리 프로그램)을 선택

4. build.gradle의 dependancies에 추가

5. File -> Proejct Structure 들어가기

6. Dependencies 탭-> app -> Gson 선택 -> 적용(apply) -> OK

7. 코드 작성해보기

@Test
public void toSJON() {
    Gson g = new Gson();
    Circle a = new Circle(10f, 20f, 40f);
    String json = g.toJson(a);
    Circle b = g.fromJson(json, Circle.class);
    assertTrue(10f == b.getX());
    assertTrue(20f == b.getY());
    assertTrue(40f == b.getRadius());
}
반응형
반응형

1. Board.cs 코드

using UnityEngine;
using System.Collections;

public class Board : MonoBehaviour {

	public int width;
	public int height;

	public int borderSize;
  	void Start () 
	{
		m_allTiles = new Tile[width,height];
		m_allGamePieces = new GamePiece[width,height];

		SetupTiles();
		SetupCamera();
	}
    
    	void SetupCamera()
	{
		Camera.main.transform.position = new Vector3((float)(width - 1)/2f, (float) (height-1) /2f, -10f);

		float aspectRatio = (float) Screen.width / (float) Screen.height;
		float verticalSize = (float) height / 2f + (float) borderSize;
		float horizontalSize = ((float) width / 2f + (float) borderSize ) / aspectRatio;

		Camera.main.orthographicSize = (verticalSize > horizontalSize) ? verticalSize: horizontalSize;
	}
}

2. Canvas, Image 추가하기

Hierachy에 Canvas와 Image를 추가하고, Canvas에 Image 개체를 위치시킵니다.(가장 오른쪽 그림 참고)

 

3. Canvas의 Camera 설정 하기

Hierachy에서 Canvas를 선택한다음 'Render Camera'의 설정값을 Main Camera로 설정합니다.

위 그림처럼 빨간 네모를 선택하세요.

 

4. 배경색 넣기

Canvas안에 있는 Image를 꽉찬 화면비율로 변경하고, 색을 지정합니다.

Hierachy에서 Image개체를 선택합니다.

Rect Transform에서 왼쪽에 위치한 'stretch'를 클릭하면 'Anchor Presets'창이 뜹니다.

가장 오른쪽 아래 있는 꽉채우기 를 선택하시면 됩니다.

 

그다음 Iamge의 색을 변경하기 위해 오른쪽 그림에 있는 빨간 네모쪽을 클릭하여 원하는 색으로 지정합니다.

 

5. 결과물

보기와 같이 중앙에 카메라가 위치하여 적절한 화면을 보입니다.


원리 이해하기

Main camera의 Projection이 Orthographic일 때를 기준으로 합니다.

(2D 게임은 주로 Orthographic 입니다.)

보드의 세로, 가로 크기에 따라 자동적으로 카메라가 적절히 세팅합니다.

보드의 타일 갯수상관없습니다.

5x10, 5x5, 10x5 각 크기에 맞추어 자동으로 세팅합니다.

 

카메라가 화면의 중심에 위치하는데 5개의 변수가 영향을 미칩니다.

Board.borderSize, Board.width, Board.height, Screen.width, Screen.height

Board.borderSize: 보드에서 화면까지의 여백의 크기

Board.width: 가로축 타일의 갯수

Board.height: 게로축 타일의 갯수

Screen.width: 게임 화면의 밑변

Screen.height: 게임 화면의 높이

1. Aspect ratio 구하기

Aspect Ratio(종횡비): 가로(Width)와 세로(Height)의 비율

종횡비: 화면 높이 / 화면 밑변

화면 밑변: 화면 높이 x 종횡비

화면 높이: orthographic 길이

 

카메라가 정중앙 위치하려면 화면(Screen)의 높이와 밑변의 반씩 되는 값만 있으면 될것 같지만,

메인 카메라의 위치를 Board 타일의 갯수에 따라 자동적으로 중앙에 위치하도록 합니다.

그래야 타일 양옆 위아래로 여백이 생겨서 안정감 있는 화면이 구성됩니다.

	void SetupCamera()
	{
		Camera.main.transform.position = new Vector3((float)(width - 1)/2f, (float) (height-1) /2f, -10f);
		float aspectRatio = (float) Screen.width / (float) Screen.height;
	}

width -1, height -1로 설정한 이유는, 배열이 0Base 이기 때문입니다.

높이와 밑변의 반값으로 x, y축 값을 지정합니다. (z 값은 -10을 디폴트 값으로합니다.)

2. 수직, 수평 orthographic 크기 구하기

void SetupCamera()
{
// --------------------------------생략---------------------------------------------------
	float verticalSize = (float) height / 2f + (float) borderSize;
	float horizontalSize = ((float) width / 2f + (float) borderSize ) / aspectRatio;
	Camera.main.orthographicSize = (verticalSize > horizontalSize) ? verticalSize: horizontalSize;
}

게임 화면이 세로 이기 때문에 verticalSize는 y축(height)의 절반 + 여백(borderSize)로 쉽게 구할 수 있습니다.

 

horizontal은 x축이 y축 보다 많은 10x5와 같은 경우에 사용됩니다.

border의 unit: board의 타일 1개로 정해집니다.

수직(vertical)

수평(horizontal)

 

반응형

'프로그래밍 > Unity' 카테고리의 다른 글

Grid - Puzzle Game in Unity 그리드 만들기  (0) 2022.10.18
간접등 만들기 - particular System  (0) 2022.01.03
씬 생성 및 이동  (1) 2020.05.15
반응형

유니티에서 위의 그림과 같은 그리드를 만들어 보도록하겠습니다.

(가운데 있는 GamePiece는 다른 포스트에서 다루도록하겠습니다.)

 

5x5 퍼즐 게임에서 그리드는 만드는 방법입니다.

 

해당 포스팅을 따라해도 화면이 생각과 다르게 나옵니다.

이러한 문제는 카메라 세팅을 만지면 해결할 수 있으니 다음 글에서 확인해주세요.


0. 용어설명

GamePiece: 동그라미 Game Object로써, 사용자가 움직일 대상입니다.

GamePiece

Tile: 그리드에서 각 칸에 해당되는 Game Object로써, Board안에서 배열로 위치합니다.

Tile

Board: Tile과 GamePiece prefab에 위치(좌표)를 설정하는 Game Object입니다. 

1. 보드 (Board)

1. GameObject 생성

Hierarchy에서 Create Empty를 선택하여 GameObject를 생성합니다.

생성된 Game Object의 이름을 "Board"로 변경합니다.

 

2. 스크립트 추가

Project-Assets에서 C#Script를 생성합니다.

파일 이름을 "Board"로 변경합니다.

using UnityEngine;
using System.Collections;

public class Board : MonoBehaviour {

  public int width; // 
  public int height;
  public GameObject tilePrefab;
  private Tile[,] m_tiles;

  void Start () 
  {
    m_tiles = new Tile[width,height];
    SetupTiles();
  }

  void SetupTiles()
  {
    for (int i=0; i < width; i++)
    {
      for (int j=0; j < height; j++)
      {
        GameObject tile = Instantiate (tilePrefab, new Vector3(i, j, 0), Quaternion.identity) as GameObject;
        tile.name = "Tile ("+i+","+j+")";
        m_tiles[i,j] = tile.GetComponent<Tile>();
        tile.transform.parent = transform;
      }
    }
  }
}

width: 타일의 갯수, height: 타일의 갯수.

tilePrefab: 보드에 배치하는 Game Object.

m_tiles: 좌표에 필요한 tilePrefab의 배열.

 

SetupTiles(): 

tilePrefab을 이용하여 Game Object 인스턴스를 생성하여 보드에 나열합니다.

보드에 나열할때는 Tile이라는 prefab을 이용하여 나란히 정렬합니다.

좌표는 for문으로 i는 x축을, j는 y축으로 합니다.

 

해당 작업이 끝났다면, Board GameObject를 선택하여 Inspector에서

Add Component를 이용하여 Board.cs를 추가합니다.

2. 타일(Tile)

1. GameObject 생성

Hierarchy에서 Create Empty를 선택하여 GameObject를 생성합니다.

생성된 Game Object의 이름을 "Tile"로 변경합니다.

 

2. Rendering 추가

"Tile" Game Object의 Inspector에서 Add Component를 누릅니다.

Rendering > Sprite Renderer를 선택합니다.

흰색 테두리 그림

위 그림과 같이 안쪽이 비어있는 흰택 테두리 png파일을

Inspector>Sprite Renderer의 Sprite에 추가합니다.

Tile의 Sprite Renderer에 Sprite추가 하는 장면

3. 스크립트 추가

Project-Assets에서 C#Script를 생성합니다.

파일 이름을 "Tile"로 변경합니다.

using UnityEngine;

public class Tile : MonoBehaviour {

  public int xIdx;
  public int yIdx;

  private Board m_board;

  void Start () {}

  public void Init(int x, int y, Board board)
  {
    xIdx = x;
    yIdx = y;
    m_board = board;
  }
}

해당 작업이 끝났다면, Tile GameObject를 선택하여 Inspector에서

Add Component를 이용하여 Tile.cs를 추가합니다.

 

 

방금 만든<Tile> Game Object를 재사용하기 위해

Assets으로 드래그&드랍하여 prefab으로 변경합니다.

 


해당 프로젝트를 실행합니다.

그리드 완성된 모습

그리드가 화면 중심에 오지 않은 상태입니다.

 

다음은 퍼즐을 위한 그리드가 화면 중심에 위치시키는 글을 작성해보겠습니다.

 

다음에 만나요~

반응형

+ Recent posts