달력

22025  이전 다음

  • 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

게임오브젝트(GameObject)와 컴포넌트(Component) 관계 및 사용법




  • 관계
    • GameObject는 컨테이너 이며 사람, 차량 또는 물건등을 구성하는 다양한 조각들을 저장할수 있는 빈 상자이며 객체를 구성하는 다양한 조각들은 Components(컴포넌트)라고 합니다.
    • 사용할 오브젝트 종류에 따라 다양한 조각을 조합한 컴포넌트를 GameObject에 추가합니다.
    • 즉 GameObject는 커다란 큰 냄비이며 Components(컴포넌트)는 요리법을 구성하는 각종 재료라고 생각하면 됩니다.


  • 게임오브젝트(GameObject)
    • 다양한 컴포넌트들이 모인 것을 GameObject라고 함
    • GameObject에는 기본적으로 Transform 컴포넌트가 존재하며 GameObject가 어느 위치에 존재하는지 얼만큼 회전을 하고 있는지, 크기의 사이즈는 얼만큼인지 결정이 됩니다.
    •  GameObject 생성방법 
메뉴 항목 -> GameObject->Create Empty

생성 화면
빈 게임 오브젝트에서도 트랜스폼 컴포넌트를 가지고 있습니다




  • 컴포넌트(Component)
    • 모든 GameObject란 집합체의 기능적인 조각들
    • 컴포넌트(Component) 추가 방법
컴포넌트는 Inspector 항목에서 Add Component를 클릭 원하는 컴포넌트 찾아 클릭하거나 검색 칸에서 검색하여 추가.

 컴포넌트 브라우저 


Posted by JakeGD
|

Awake() 정의와 DontDestroyOnLoad() 사용법


Awake() 정의

  • Awake는 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출되며 스크립트 인스턴스가 종료될 때까지 한번만 호출됩니다. 

  • Awake는 모든 오브젝트가 초기화되고 호출되기 때문에, GameObject.FindWithTag를 이용해서 해당 게임 오브젝트를 요청하거나, 다른 오브젝트와 안전하게 연동해서 사용할 수 있습니다.


DontDestroyOnLoad() 사용법

  • 새로운 Scene이 로드될때 자동으로 파괴되지 않는 target 오브젝트를 만듭니다.
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour { void Awake() { DontDestroyOnLoad(transform.gameObject); } }

이런식으로 지정된 이전 오브젝트가 그대로 살아서 다음 씬으로 넘어갑니다.

대신 지워지지않아 직접 지워줘야 합니다.


그런 경우 간단히 조건 제시후 Destroy 메소드를 이용해 삭제 합니다.


예) M키를 누를시 조건

 if (Input.GetKeyDown(KeyCode.M))

        {

            Destroy(gameObject);

        }



Posted by JakeGD
|

Time.time.ToString 소수점 설정하기


소수점 설정은 의외로 간단 합니다.


ToString 괄호 안에 "N2" 만 넣어주면 됩니다.


예시)

 GUI.TextArea(new Rect(100, 50, 100, 30), "타이머 : " + Time.time.ToString("N2"));


소수점 2자리까지 나옴.


N1 = 소수점 한자리

N2 = 소수점 두자리

N3 = 소수점 세자리




Posted by JakeGD
|

Update, FixedUpdate, LateUpdate 차이점



  • Update()
    • Update는 프레임마다 한번씩만 호출이 되는 기본적인 업데이트 입니다.

  • FixedUpdate()
    • FixedUpdate는 Update보다 자주 호출이 되는 경우가 있습니다.
    • 프레임 속도가 낮을 경우 프레임마다 여러번 호출이 가능합니다.
    • 프레임 속도가 높을 경우 프레임마다 호출을 할 수 없습니다.
    • FixedUpdate 직후에 모든 물리적 특성 계산 및 업데이트가 발생하므로 이동 계산을 적용 할때 Time.DeltaTime 값을 곱할 필요가 없습니다.
    • 독립된 업데이트 이므로 모두 영향을 받는 update와 달리 어떤것이든 동일한 주기로 업데이트 영향을 받는다.
    •  물리적용시 사용하면 좋습니다.

  • LateUpdate()
    • LateUpdate는 Update 후 프레임마다 한번씩 호출이 됩니다.
    • update에서 계산이 완료되면 해당 LateUpdate가 실행이 됩니다.
    • 특정 행동이 완전히 끝난 후 실행하고 싶은 행동이 있다면 해당 LateUpdate를 이용하는 것이 좋습니다.
    • 예로 들어 3인칭 카메라가 캐릭터를 따라 움직일시 update에서 캐릭터 이동 방향 계산이 끝난 후 카메라에 대한 계산은 LateUpdate에서 행동을 취하시면 됩니다.


Posted by JakeGD
|

Ray 사용법!


  • 필요한 변수

float distance;    -> 레이의 길이

RaycastHit rayHit;    -> Ray가 맞았다는걸 알려주는 변수

Ray ray;    -> 사용될 레이 변수



void Start () 

{

ray = new Ray();       -> new를 이용하여 레이를 하나 생성합니다.

ray.origin = this.transform.position;    -> 레이위치를 사용될 오브젝트위치에 적용합니다.

ray.direction = this.transform.forward;    -> 레이 방향을 사용될 오브젝트 방향으로 초기화 해줍니다.

}


팁 // 만약 실시간으로 값을 받고 싶다면 ray.origin과 ray.direction을 Update 메소드에 넣어주시면 됩니다.



레이와 오브젝트의 충돌함수는 아래와 같습니다.


if (Physics.Raycast(ray.origin, ray.direction, out rayHit, distance))

// 순서대로 레이의시작위치 / 레이의 방향 / 레이충돌 반환 / 레이 길이값

{

// 해당 위치에서 조건에 대한 코드를 작성하시면 됩니다.


Debug.Log(rayHit.collider.gameObject.name); // 충돌된 오브젝트 이름 디버그 로그로 출력

}


로그 확인 방법은 유니티에서 ctrl + shift + C 를 누르시면 나옵니다.



자 그렇다면 레이가 잘 발사되고 있는지 확인을 해보고 싶으시죠?


그러면 void OnDrawGizmos() 메소드를 이용하여 렌더를 해줍니다.


void OnDrawGizmos()

{

        Debug.DrawRay(ray.origin, ray.direction * distance, Color.red);

// 이와같이 Debug로 그려주시면 실제 게임에서는 표시되지 않고 디버그 모드에서만 설정된 

// 레드컬러로 레이가 발사 되는것을 확인 하실 수 있습니다.

}



아래 레이가 적용된 예시 화면


Posted by JakeGD
|

유니티에서 스크립트 에디터 변경하기


변경 경로

  • 유니티 좌측 상단 Edit -> Preference -> External Tools ->External Script Editor -> 원하는 에디터 선택


↓↓↓↓↓↓↓↓↓↓ 이해가 안가신다면! ↓↓↓↓↓↓↓↓↓↓



유니티의 좌측 상단 Edit 선택





Edit 리스트 중 Preferences... 선택




그럼 아래의 그림같이 Unity Preferences 창이 하나 등장 합니다.



1. External Tools 클릭

2. External Script Editor 에서 원하는 에디터 선택





짝짝짝! 


수고하셨습니다.!


Posted by JakeGD
|