flrto

Unity에서 트랜스폼(transform) 본문

Unity/TIL

Unity에서 트랜스폼(transform)

갈릭새우칩 2019. 5. 25. 01:55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Bullet : MonoBehaviour
{
    public float speed = 8f; // 탄알 이동 속력
    public Rigidbody bulletRigidbody; // 이동에 사용할 리지드바디 컴포넌트
 
    void Start()
    {
        // 게임 오브젝트에서 Rigidbody 컴포넌트를 찾아 bulletRigidbody에 할당
        bulletRigidbody.GetComponent<Rigidbody>();
        // 리지드바디의 속도 = 앞쪽 방향 * 이동 속력
        bulletRigidbody.velocity = transform.forward * speed;
 
    }
 
    void Update()
    {
        
    }
}

다음 코드는 유니티에서 게임 오브젝트에 움직임을 주려 할때 사용하는 예시 코드이다.

 

여기서 실제 움직임을 주는 코드 소스가 이 부분 이란걸 알수 있다.

 

bulletRigidbody.velocity = transform.forward * speed;

 

 

velocity에 관한건 이 글에서 포스팅 했었다.

 

2019/05/17 - [Unity/TIL] - Unity에서의 키입력으로 오브젝트를 이동시키는 방법

 

Unity에서의 키입력으로 오브젝트를 이동시키는 방법

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 32 33 34 35 36 37 38 39 40 41 42 43 using System.Collections; using System.Collections.Generic; using UnityEngine;..

gcoding.tistory.com

 

 

자 그럼 메인인 transform에 대해 설명해보자


transform

Transform 타입의 변수 transform은 자신의 게임오브젝트 트랜스폼 컴포넌트로 바로 접근하는 변수이다.

transform은 자신의 트랜스폼 컴포넌트를 가리킨다

트랜스폼 컴포넌트는 잘 알다시피 게임 오브젝트의 위치, 회전, 크기 를 담당하는 컴포넌트이다.

 

오브젝트를 생성하면 기본적으로 생성되는 것에서 알 수 있듯이 모든 게임 오브젝트가 하나씩 가지고 있도록 강제되어있다. 트랜스폼 컴포넌트가 없으면 3D공간에서 위치,공간,크기를 가질 수 없기 때문이다.

 

 

편의상 유니티의 C#스크립트들은 자신의 게임 오브젝트의 트랜스폼 컴포넌트를 코드상에서 transform 변수로 즉시 접근 할 수 있도록 구성되어있다.

 

따라서,

 

bulletRigidbody.GetComponent<Rigidbody>();  리지드바디 컴포넌트를 GetComponent를 가져오는 것 처럼

 

transform 컴포넌트를 GetComponent<Transform>(); 이런식으로 가져올 필요는 없다!!!

 

 

bulletRigidbody.velocity = transform.forward * speed;

 

그러면 위 코드에서 transform.forward * speed; 이부분은 자신의 transform컴포넌트에 접근해서 forward(현재 게임 오브젝트에서 앞쪽방향에 우리가 설정한 speed만큼의 값을 곱해주는것이란걸 알 수 있다.

 

 

※ 참고 transform은 변수이고 Transform은 타입이다.

gameObject가 변수이고 GameObject가 타입이듯이...

 

 

Comments