Unity3D Transform의 이유Translate의 x/y/z 값은 항상 speed* Time을 통과합니다.deltaTime 가져오기그래야지.

1813 단어 unity3d
선행 코드:
public class Player : MonoBehaviour {
	protected Transform m_transform;
	public float m_speed = 1;
	// Use this for initialization
	void Start () {
		m_transform = this.transform;
	}
	
	// Update is called once per frame
	void Update () {
		float movev = 0;
		float moveh = 0;
		if (Input.GetKey (KeyCode.UpArrow)) {
			movev -= m_speed * Time.deltaTime;
		}
		if (Input.GetKey (KeyCode.DownArrow)) {
			movev += m_speed * Time.deltaTime;
		}
		if (Input.GetKey(KeyCode.LeftArrow)) {
			moveh += m_speed * Time.deltaTime;
		}
		if (Input.GetKey (KeyCode.RightArrow)) {
			moveh -= m_speed * Time.deltaTime;
		}
		m_transform.Translate (new Vector3 (moveh, 0, movev));
	}
}

위 수평 방향(x축)의 변위량 moveh 통과 mspeed * Time.deltaTime 방식으로 가져옵니다.
제가 아까 배웠을 때 속도가 빠른지 궁금했어요. 직접moveh+=mspeed는 끝이 아니야, 곱하는 시간.델타타임이 뭐야...(지금 생각해보면 유치하다. 답은 정말 간단하기 때문이다/(예를 들어 o예)/~~)
오늘 문득 크게 깨닫고 다음과 같이 설명한다.
예를 들어 정의된 mspeed = 1, 캐릭터 속도가 1m/초라는 뜻,
그렇다면 moveh + = mspeed, 1초를 지나 수평 방향으로 1m를 이동한 것을 기본으로 한다.
이때 이 함수는 얼마나 자주 한 번 호출됩니까?답은: 1초가 아니라 1프레임,
그러면 한 프레임은 얼마나 됩니까?몇 십 밀리초만 하자. 정확한 시간은 바로 Time이다.deltaTime (Update 또는 FixedUpdate를 마지막으로 호출하는 데 걸린 시간을 표시합니다.)그러니까 m 로.speed * Time.deltaTime, 이렇게 제때에 밀리초 동안 이동해야 하는 거리입니다.
마지막으로 분석해 봐, 왜 이렇게 써?
내가 이전에 Winform에 있는 GDI를 그린 경험으로 예를 들어 내가 텍스트 스크롤을 하려고 한다면, 나는 OnPainting에서 매번 N개의 픽셀을 이동하는 방법으로 처리할 것이다.
ActionScript에서도 OnFrame에서 매번 N개의 픽셀을 이동하여 처리합니다.
즉, 프레임의 속박에서 벗어나지 않고 프레임의 속도가 바뀌면 속도가 바뀐다는 것이다.
그러면 이런 방법은 다르다. 왜냐하면 나는 프레임을 고려할 필요가 없기 때문이다. 나는 이 프레임과 위 프레임의 간격이 얼마나 되는지만 관심을 가진 다음에 얼마나 거리를 이동해야 하는지 알 수 있다. 설령 그의 프레임 속도가 변한다고 해도 내가 정한 N미터/초의 속도에 영향을 주지 않는다(물론 프레임 속도가 너무 작으면 화면이 원활하지 않을 것이다).
마지막으로 내가 방금 본 해석 타임을 동봉합니다.deltaTime 기사 링크(참조)http://blog.csdn.net/xgx198831/article/details/7411504)

좋은 웹페이지 즐겨찾기