반응형
목표 |
스크립트의 update() 는 화면 처리속도에 따라 다른 속도로 처리 되는 것을 확인하고 이것을 동일한 속도로 처리 할 수 있는 deltaTime 을 활용하는 방법을 알아 보자.
이론 |
스크립트의 Update는 컴퓨터의 프레임에 따라 반복 되는 횟수가 다릅니다.
가령 초당 프레임이 30FPS 인 컴퓨터와 60FPS 인 컴퓨터가 있다면 update 에서 총알이 한번 방문할때 10m 씩 날아 간다면 초당 프레임이 30FPS인 컴퓨터에서는 초당 30m 를 날아가게 되고 60FPS인 컴퓨터는 60m를 날아가게 됩니다.
이렇게 프레임 속도에 따라 동작이 달라진다면 문제가 있을것 같네요.
오늘은 deltaTime 을 이용해서 속도를 보정하는 방법을 알아 보겠습니다.
실습 |
프로젝트는 https://thinkmath2020.tistory.com/3410
이것을 이용해서 키보드 동작을 1초에 한번씩만 동작하는 코드로 만들어 보겠습니다.
Time.deltaTime 은 전 프레임이 완료되기 까지 걸린 시간을 의미합니다.
즉 30FPS 는 한프레임이 1/30, 60FPS 는 한프레임이 1/60 이라는 값을 나타내는 것입니다.
따라서 Update 가 동작 할때 마다 Time.deltaTime 을 누적한다면 1초에 1의 값이 되는 것입니다.
Jump 스크립트를 다음과 같이 변경하여 1초에 한번씩만 키보드가 동작 할 수 있도록 처리 합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Jump : MonoBehaviour
{
Rigidbody rb; //Rigidbody 를 연결할 변수 선언
public float speed = 300f; // 이동 속도
float timer = 0;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>(); //자신의 Rigidbody 를 가져와서 rb에 연결
//rb.AddForce(0,500,0); // y 축으로 500 만큼 점프하자.
}
// Update is called once per frame
void Update()
{
timer += Time.deltaTime;
if(timer<1) return; //1초가 되기 전이라면 빠져 나가자
timer=0;
if(Input.GetKey(KeyCode.UpArrow)){
rb.AddForce(0f,0f,speed);
}
if(Input.GetKey(KeyCode.DownArrow)){
rb.AddForce(0f,0f,-speed);
}
if(Input.GetKey(KeyCode.LeftArrow)){
rb.AddForce(-speed,0f,0f);
}
if(Input.GetKey(KeyCode.RightArrow)){
rb.AddForce(speed,0f,0f);
}
if(Input.GetKey(KeyCode.Space)){
rb.AddForce(0f,speed,0f);
}
}
}
반응형
'응용프로그래밍 > 유니티기초' 카테고리의 다른 글
[유니티기초]1-07. Random.Range 를 이용하여 랜덤한 위치에 객체 생성 (0) | 2022.05.30 |
---|---|
[유니티기초]1-06.스크립트를 이용하여 객체 생성 (0) | 2022.05.30 |
[유니티기초] 1-04. 게임오브젝트 충돌 처리 (0) | 2022.05.30 |
[유니티 기초]1-03.오브젝트를 키보드로 이동 시켜 보자. (0) | 2022.03.28 |
[유니티기초]1-02. Rigidbody를 이용하여 오브젝트를 점프 (0) | 2022.03.28 |