반응형

Unity 16

GetAxis 와 GetAxisRaw의 차이점

Input.GetAxis를 사용하게 되면 PC에서 마치 조이스틱을 사용하는 것 처럼 Horizontal 값이 서서히 증가하고 서서히 감소한다. 예를 들어 float xAxis = Input.GetAxis("Horizontal"); float zAxis = Input.GetAxis("Vertical"); // 이동할 방향 설정 Vector3 moveDirection = new Vector3(xAxis, 0, zAxis).normalized; // Rigidbody 를 사용하여 이동 Vector3 movement = moveDirection * moveSpeed * Time.deltaTime; rb.MovePosition(transform.position + movement); 이런 코드를 작성한다고 하면 ..

Unity 2023.10.23

[Unity3D] 월드 좌표계와 스크린 좌표계 이해하기 -(2)

이번에는 월드 좌표에서 스크린 좌표로 변경하는 법을 알아보겠다. public GameObject obj; // Update is called once per frame void Update() { transform.position = Camera.main.WorldToScreenPoint(obj.transform.position); } 월드에서 스크린으로 변경하는 것이 스크린에서 월드로 변경하는 것보다 훨씬 간편하고 쉽다. 스크립트를 살펴보자 Update함수에서 WorldToScreenPoint 함수를 사용해서 오브젝트의 위치를 인자값으로 전달하고 ScreenPoint를 리턴받아 나에 위치에 저장한다. 스크립트를 상속받은 오브젝트는 빨간색 Image UI 이다. sphere에 위치를 따라서 위치가 변경한..

Unity 2022.12.24

[Unity3D] 월드 좌표계와 스크린 좌표계 이해하기 -(1)

우리가 화면을 통해 보는 유니티 3D 환경은 x, y, z 축으로 이루어진 3 차원 벡터 공간이다. 하지만 우리는 2차원인 모니터를 통해 그 3 차원 공간을 보기 때문에 마우스를 통해 좌표를 얻을때 원하는 대로 코드가 진행되지 않는다. 가장 처음 맞는 문제점은 x, y 축은 받을 수 있지만 z 축은 알 수가 없다. 또 다른 문제점은 x, y 축을 안다고 해도 실제 Unity 3D 에서 사용되는 World 좌표와 다르기 때문에 엉뚱한 곳에 좌표가 잡히게 된다. 우선 마우스의 좌표값을 로그로 찍어보면 어떤 값이 나오는지 확인해 보자. [-3.05, 14.55, 0.00] 마우스 위치가 빨간 화면에 왼쪽 밑에 두고 로그를 찍었을때에 값이다. [959.44, 537.76, 0.00] Game 에디터에 화면을 1..

Unity 2022.12.23

[Unity] - Start() 함수와 Update() 함수

Start() 프로그램이 시작할 때 한 번만 호출이 되는 함수로 보통 컴포넌트를 받아오거나 업데이트나 다른 함수에서 사용하기 위해 초기화해 주는 기능을 한다. Update() 매 프레임 마다 호출이 되는 함수로 자신의 컴퓨터가 60 프레임이라면 초당 60번 실행이 되는 함수이다. 게임 실행에 필요한 함수들은 update() 함수에서 실행하도록 코딩한다.

Unity 2021.08.31

[Unity] Time.deltaTime 사용법

int h =0; int m =0; m += time.deltatime; if(m>60) { m=0; h++; } 간단하게 사용하면 이렇게 사용할 수 있습니다. time.deltatime은 이 전 프레임에서 지금 프레임까지 걸린 시간을 계산한 것으로 느린 컴퓨터 일 수록 값이 커집니다. time.deltatime을 이용해서 타이머라든지 잠깐 이동을 멈추는 스크립트 같은 것들을 만들어 낼 수 있습니다. 이와 비슷한 함수로는 invoke함수가 있으니 같이 사용해 보도록 합시다.

Unity 2021.08.28

[Unity] Time.deltaTime 의미

Time.deltaTime의 의미는 이전 프레임에서 현재 프레임까지 걸린 시간이다. int speed=1; 이라고 가정하자 이 변수를 가지고 캐릭터에 이동속도나 아니면 어떤 오브젝트가 움직이는 속도를 계산한다고 하면 모든 컴퓨터가 과연 같은 값을 가지고 이동을 할까? 사실은 그렇지 않다. 그렇다면 모든 컴퓨터가 거의 같은 값의 이동을 할게 하는 방법은 무엇이 있을까? 그 답을 찾기 전에 서로 다른 컴퓨터가 왜 다른 값의 이동을 보여주는지를 알아야 할 필요가 있다. 여기 보통의 노트북이 있다 이 노트북은 30프레임이라고 가정해보자 그리고 프레임이 60정도 나오는 게임 컴퓨타가 있다고 역시 가정해보자 그렇다면 노트북과 컴퓨터가 저 변수를 가지고 값을 계산하는 방법은 다음과 같다. 자신의 프레임 * 변수 노트..

Unity 2021.08.28

[Unity] transfom 을 사용한 오브젝트 움직이기

유니티에 transform을 사용하기 전에 앞서 알아둬야 하는 게 있습니다. 유니티에서는 위치를 표현할 떄 왼손 좌표계를 이용하고 x축은 빨간색 y축은 초록생 z축은 파란색입니다. transform.position position은 게임 오브젝트의 절대좌표를 나타냅니다. Vector3 값을 대입하면 해당 위치로 이동합니다. ex) transform.position = new Vector3(x, y, z); transfom.localPosition transform.localPosition은 게임 오브젝트의 상대 좌표를 나타낸다. 자식 오브젝트에서 이 함수를 사용할 경우 부모 오브젝트와 떨어진 좌표를 나타낸다. 사용방법은 transfom.localPosition과 동일합니다. transfom.Transla..

Unity 2021.08.28

[Unity] 인보크 - Invoke();

유니티에서는 시간을 지연시켜주는 함수가 있습니다. 대표적으로 Invoke와 Coroutine이 있습니다. 이번에는 Invoke부터 설명하도록 하겠습니다. void Start() { timer = spawn_time; Invoke("Write", 3); } void Write() { Debug.Log("3초가 지났습니다."); } 실행 결과로는 유니티 실행 후에 3초가 지난 후에 "3초가 지났습니다"라는 로고가 실행이 됩니다. Invoke("함수명",지연시간); 인 것을 알 수 있습니다. 또 다른 방법으로는 지연 반복이 있습니다. void Start() { timer = spawn_time; InvokeRepeating("Write", 3f, 1f); } void Write() { Debug.Log("3초..

Unity 2021.08.28
반응형