1차원 배열 초기화

int[] array = new int[5];

array[0] ~ array[4]까지의 배열을 만들고 모든 배열 요소를 0으로 초기화 한다.

 

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

배열은 선언과 동시에 초기화 할 수 있는데 배열의 크기를 설정하지 않아도 초기화 목록의 갯수로 알아서 크기를 설정한다.  

 

int[] array1 = { 1, 3, 5, 7, 9 };

선언 시 값을 할당할 수 있다.

 

int[] array1;
array3 = new int[] { 1, 3, 5, 7, 9 };

초기화하지 않고 배열 변수를 선언할 수 있지만 이 변수에 배열을 할당할 때 new 연산자를 사용해야 한다.

 

2차원 배열 (1차원 배열이 2개인 것)

int[,] array2 = { { 1, 2, 3, 4, 5 }, { 10, 20, 30, 40, 50 } };
// array2[1, 3]의 값은 40
// array2[0, 1]의 값은 2

 

3차원 배열 (2차원 배열이 2개인 것)

int[,,] array3 = { { { 1, 2, 3, 4, 5 }, { 10, 20, 30, 40, 50 } }, { { 1, 2, 3, 4, 5 }, { 10, 20, 30, 40, 50 } } };
// array3[1, 1, 2]의 값은 30
// array3[0, 0, 3]의 값은 4

 

foreach문 사용하기

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach(int i in numbers)
{    
   System.Console.Write("{0} ", i);
}

// Output: 4 5 6 1 2 3 -2 -1 0

Posted by 소블리애
,

unitypackage이 포함된 zip파일을 압축을 해제 하려고 하자 unitypackage까지 압축이 풀리는 문제가 생겼다. 원인을 찾던중 카탈리나 업데이트 하고 생긴 이슈 같다. 해결 방법은 스포트라이트에서(커맨드+스페이스) 아카이브 유틸리티를 열어준다. 

아카이브 유틸리티의 환경설정 클릭

가능하다면 계속 압축 해제하기 체크해제

'게임 엔진 > 유니티 엔진' 카테고리의 다른 글

Unity 물리 효과 최적화 방법  (0) 2019.09.27
유니티 ARM64로 빌드하기  (0) 2019.09.18
Apply Root Motion  (0) 2019.09.15
글로벌 일루미네이션  (0) 2019.09.15
Multiple Sprite  (0) 2019.09.12
Posted by 소블리애
,
public class Cat
{
    // 속성 (데이터)
    public string Name;
    public string Color;   

    // 기능 (메서드)
    public void Meow()
    {
        Debug.Log(Name + ": 야옹");
     }
}

 클래스는 속성(멤버 변수)과 기능(멤버 함수)으로 나뉩니다.

 

Cat kitty = new Cat();
kitty.Name = "키티";
kitty.Color = "하얀색";
print(kitty.Name + " : " + kitty.Color);

Cat() 생성자를 이용해 객체를 생성합니다. new 키워드는 생성자를 호출하고 객체를 생성하는 데 사용합니다. 이렇게 생성된 객체는 힙 영역에 생성이 되고 kitty는 그 객체를 가리키게 됩니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Cat
{
    // 속성 (데이터)
    public string Name;
    public string Color;   

    // 기능 (메서드)
    public void Meow()
    {
        Debug.Log(Name + ": 야옹");
     }
}

public class HelloWorld : MonoBehaviour
{

    // Start is called before the first frame update
    void Start()
    {
        Cat kitty = new Cat();
        kitty.Name = "키티";
        kitty.Color = "하얀색";
        print(kitty.Name + " : " + kitty.Color);

        Cat nero = new Cat();
        nero.Name = "네로";
        nero.Color = "검은색";
        print(nero.Name + " : " + nero.Color);

        nero.Meow();
    }
}

출력 결과 화면

Posted by 소블리애
,

정적 콜라이더를 이동 또는 회전하거나 크기를 조정할 때마다  Unity 씬의  모든 정적 콜라이더의 볼륨을 계산하고 정보를 캐시에 저장한다. 한마디로 성능 저하가 일어나게 된다. 물체를 동적 콜라이더로 설정하면 캐시에 다시 저장하지 않기 때문에 물리 효과를 최적화할 수 있다. 

 

유니티는 콜라이더와 리지드바디 컴포넌트가 포함된 모든 게임 오브젝트는 동적인 것으로 간주한다콜라이더는 있지만 리지드바디 컴포넌트가 없으면 정적인 것으로 간주  

 

콜라이더만 있는 경우(정적 오브젝트)

위에 그림에서 박스콜라이더는 있지만 리지드바디는 없다따라서 유니티는 정적인 콜라이더 캐시를 프레임마다 다시 계산하게 된다다. 해결책은 아래와 같이 리지드바디를 추가하는 것이다. 

 

콜라이더와 리지드바디가 있는 경우(동적 오브젝트)

리지드바디 추가로 정적 콜라이더에서 동적 콜라이더 변경되었다. 추가로 물체가 아래로 떨어지는  

방지하려면 리지드바디의 Use Gravity 해제하면 원하는 결과를 얻을 수 있지만 이것은 부분적인 해결 방법이다이러면 물체가 중력에 반응하지 않더라도 물리력에는 계속 반응한다. 

 

키네마틱 리지드바디

나은 해결책은 Is Kinematic 체크하는 것이다. 이렇게 체크하면 리지드바디 컴포넌트가 키네마틱 리지드바디로 설정된다. 키네마틱 리지드바디는 물리력에 반응하지 않으며, 트랜스폼을 이용해 움직일 있다. 

'게임 엔진 > 유니티 엔진' 카테고리의 다른 글

macOS unitypackage까지 압축 풀리는 문제  (0) 2019.11.26
유니티 ARM64로 빌드하기  (0) 2019.09.18
Apply Root Motion  (0) 2019.09.15
글로벌 일루미네이션  (0) 2019.09.15
Multiple Sprite  (0) 2019.09.12
Posted by 소블리애
,

유니티 2017.4.16 이후 버전 부터 64비트 지원을 제공 함

 

64비트 아키텍처를 빌드하려면 Unity 프로젝트를 아래와 같이 설정 해야 한다.

 

  1. Build Settings(빌드 설정)에서 Android 플랫폼 옆에 Unity 기호가 있는지 확인하여 Android용으로 빌드하고 있는지 확인
  2. Player Settings(플레이어 설정)를 클릭

  3. Player Settings Panel(플레이어 설정 패널) > Settings for Android(Android용 설정) > Other settings(기타 설정) > Configuration(구성)으로 이동

  4. Scripting Backend(스크립팅 백엔드)를 IL2CPP로 설정

  5. **Target Architecture(대상 아키텍처) > ARM64 체크박스를 선택

  6. 평소대로 빌드

 

'게임 엔진 > 유니티 엔진' 카테고리의 다른 글

macOS unitypackage까지 압축 풀리는 문제  (0) 2019.11.26
Unity 물리 효과 최적화 방법  (0) 2019.09.27
Apply Root Motion  (0) 2019.09.15
글로벌 일루미네이션  (0) 2019.09.15
Multiple Sprite  (0) 2019.09.12
Posted by 소블리애
,

C#은 포인터가 없기 때문에 매개변수로 값 전달 시 ref를 선언해주면 변수의 주소의 값을 접근 할 수 있다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int val1 = 1;
        int val2 = 2;

        Swap(ref val1, ref val2);
        print("val1=" + val1 + "," + "val2=" + val2);
    }

    void Swap(ref int a, ref int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
}

출력 결과

va1=2, val2=1
Posted by 소블리애
,

루트 모션 적용은 게임 오브젝트의 위치와 회전을 애니메이션이 제어하도록 허용한다. 앞으로 움직이는 애니메이션이 있다고 가정해보자. 루트 모션을 체크하면 캐릭터가 앞으로 움직이면 게임오브젝트의 위치가 이전보다 앞쪽으로 변경되게 된다. 루트 모션을 적용하지 않으면 제자리에서 걷는 애니메이션이 나오게 된다.

'게임 엔진 > 유니티 엔진' 카테고리의 다른 글

Unity 물리 효과 최적화 방법  (0) 2019.09.27
유니티 ARM64로 빌드하기  (0) 2019.09.18
글로벌 일루미네이션  (0) 2019.09.15
Multiple Sprite  (0) 2019.09.12
마우스 입력을 감지하는 메서드  (0) 2019.09.12
Posted by 소블리애
,

글로벌 일루미네이션(Global Illumination)

물체의 포면에 직접 들어오는 빛뿐만 아니라 다른 물체의 표면에서 반사되어 들어온 간접광까지 표현한다.

 

단점

매우 높은 처리량을 요구 함. 오늘날 PC로도 글로벌 일루미네이션을 완벽하게 구현하기 힘들며, 실시간으로 사용하려면 여러 제약과 대안을 함께 하용해야 함

 

베이크된 글로벌 일루미네이션

고정된 빛에 의한 간접광을 라이트맵으로 구워 게임 오브젝트 위에 미리 입힌다. 반영된 간접광 효과는 게임 도중에 실시간으로 반영되지 않는다. 실시간 글로벌 일루미네이션 보다 표현의 질과 런타임 성능이 더 좋다. 빛의 방향이 게임 도중이 달라져도 간접광에 반영되지 않는다. 게임 도중에 갑자기 주변이 밝아지거나 어두워지면 이질감을 느낄 수 있다. 

 

실시간 글로벌 일루미네이션

빛의 세기와 방향 등이 달려졌을 때 그 변화를 간접광에 실시간으로 반영한다. 실시간 글로벌 일루미네이션을 사용하려면 라이트 맵을 여러 방향에 대해 생성해야 한다. 그리고 여러 가지 경우에 대한 빛의 예상 반사 방향과 광원의 예상 이동 경로 등의 정보를 미리 계산해서 저장한다. 이렇게 미리 계산된 정보 덕분에 게임 도중 물체 표면에 들어오는 빛의 방향 등이 달라져도 간접광이 어떤 방향에 어떤 세기로 반사되어야 하는지 적응 비용으로 추측할 수 있으며, 광원의 변화를 실시간으로 간접광에 반영할 수 있다. 결론적으로 실시간 글로벌 일루미네이션을 사용해도 미리 계산해야 하는 정보가 있으므로 라이팅 데이터 에셋을 구워야 한다.

'게임 엔진 > 유니티 엔진' 카테고리의 다른 글

유니티 ARM64로 빌드하기  (0) 2019.09.18
Apply Root Motion  (0) 2019.09.15
Multiple Sprite  (0) 2019.09.12
마우스 입력을 감지하는 메서드  (0) 2019.09.12
Transition Duration  (0) 2019.09.09
Posted by 소블리애
,