Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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 31
Archives
Today
Total
관리 메뉴

시작은 0부터

1. 콘솔 출력, 클래스, 벡터(Vector), Time.deltaTime 본문

Unity 학습일지

1. 콘솔 출력, 클래스, 벡터(Vector), Time.deltaTime

0base 2022. 8. 8. 22:45

    C#에서는 콘솔창에 입력값을 출력하기 위해서 Console.WriteLine() 을 썼다. 유니티에도 디버그 목적으로 사용하는 콘솔창이 있고 해당 콘솔창에 입력값을 출력하는 함수가 있다.

 

Debug.Log(" ")

: 유니티의 콘솔창(디버그창)에 로그를 띄우는 기능이다.

 

클래스의 실행 순서

: 유니티에서 C# 스크립트를 생성하면 자동으로 클래스가 생성된다. 별도의 객체 생성을 선언하는 생성자 없이도 자동으로 클래스가 생성되며, 오브젝트에 해당 클래스를 사용하면 해당 클래스의 기능들이 해당 오브젝트에 적용된다. 클래스를 생성하면 자동으로 함수 Start 와 Update가 생성되는데, 이 이외에도 유니티 클래스는 실행순서가 정해진 함수가 있다.

Class A : MonoBehavior
{
	void Awake() // 클래스 생성시 최초 한번만 실행
    	{
	}
    
    	void OnEnable() // 클래스가 활성화될 때 실행
    	{
    	}
    
    	void OnDisable() // 클래스가 비홀성화될 때 실행
    	{
    	}
    
        void Start() // 첫 프레임이 갱신되기 전 실행
        {
        }

        void Update() // 프레임 갱신마다 실행
        {
        }
}

 

유니티 클래스는 MonoBehavior 를 기본적으로 상속받도록 설정되어있는데 해당 기능 안에 유니티의 여러 기능들이 내장되어있다.

 

Vector3(x,y,z)

유니티 내부의 X, Y, Z 축을 나타내는 화살표는 색상으로 구분된다. R(X), G(Y), B(Z)

 

3차원 벡터 객체 생성

Vector3 v = new Vector3();

 

생성한 벡터 객체의 x값 지정

v.x = 1f;

 

클래스의 위치값은 v(1,0,0) 이다.

transform.position = v;

 

클래스의 위치값을 해당값만큼 움직인다.

transform.Translate(1f,0,0);

 

클래스를 해당값만큼 회전시킨다.

transform.Rotate (1f, 0, 0);

 

position은 현재위치를 해당 값으로 지정하고( = )

Translate는  현재 위치값에 해당값을 더한다(+)

 

하나의 클래스로 각기 다른 초기위치값을 가진 오브젝트들의 각 위치값을 올바르게 가져오는 방법은?

멤버변수에 자신의 초기 위치값을 저장할 벡터 객체를 생성하고,

Start 함수 안에 처음 한번만 자신의 위치값을 벡터 객체에 대입한다.

v.x = transform.position.x; //유니티 transform 기능 안에 있는 position x값. 즉, 유니티 내부에서 자신의 x값

v.y = transform.position.y;

v.z = transform.position.z;

 

이렇게 하면 각기 다른 위치에 있는 여러 오브젝트들이 하나의 클래스를 사용하더라도 각자의 초기위치값을 올바르게 받아올 수 있다.

 

콜라이더의 존재 이유

: 충돌판정 범위를 메쉬와 다르게 설정하는 이유는? 메쉬 여러개를 사용하는 오브젝트의 충돌판정 처리시 각각의 메쉬에 충돌판정을 처리하려면 연산처리가 오래 걸리게 된다. 이를 하나로 묶어버리면 연산처리가 빨라지기 때문이다.

Mesh Collider( 생긴 모양대로 충돌 체크 )를 활용하여 불특정한 모양이라도 충돌판정여부를 하나로 설정할 수 있다.

 

2D 공간 상의 점은 Pixel

3D 공간 상의 점은 Vertex

 

폴리곤 : 면을 이루는 최소 단위 = 삼각형. 이 삼각형 1개를 폴리곤이라고 한다.

 

transform.postion : 절대좌표(단 1개의 위치값만 존재한다.)

transform.localposition : 상대좌표(여기를 기준으로 얼만큼 움직이는지 결정한다.)

 

원으로 돌게 만드는 공식

myPos.x = radius * Mathf.Cos(Time.time);
myPos.z = radius * Mathf.Sin(Time.time);
transform.position = myPos;

Time.time

: 프로젝트 시작 직후 진행된 시간

 

Time.deltaTime

: 프레임 분의 1. 컴퓨터마다 프레임속도가 달라 Update함수의 갱신 속도가 달라지기 때문에 이러한 문제를 해결하기 위해 사용된다. 이 값을 곱해주면 프레임속도에 관계 없이 동일한 값을 얻게 된다.

 

Update() //FPS 10 컴퓨터의 경우
{
	//10프레임마다 움직인다
	moveX = 1  * time.deltaTime; // 1 * 10/1 = 0.1
}

Update() //FPS 100 컴퓨터의 경우
{
	//100프레임마다 움직인다
    moveX = 1  * time.deltaTime; // 1 * 100/1 = 0.01
}

프레임속도가 10인 컴퓨터는 매 프레임마다 0.1울 움직이고, 프레임속도가 100인 컴퓨터는 0.01씩 움직인다.

프레임100 컴퓨터는 10인 컴퓨터보다 10배 빠른만큼 10배 느리게 움직이므로써 프레임에 관계없이 같은 속도로 만든다.