2016-10-27 1 views
2

그래서 나는 아주 간단한 이동 플랫폼을 만들었습니다.Unity C# 런닝시 오프셋 플랫폼

public float speedX; 
public float speedY; 
public float length; 
public float pause; 

float timer; 
Vector3 move; 

void Start() { 
    timer = 0; 
} 

void Update() 
{ 
    if (timer == 0) 
    { 
     speedX *= -1; 
     speedY *= -1; 
     timer = length; 
    } else 
    { 
     timer--; 
    } 
    if (timer > pause) 
    { 
     move = new Vector3(speedX, speedY, 0); 
     transform.Translate(move * Time.smoothDeltaTime); 
    } 
} 

나는 장면을 재생할 때 장면을 배치 할 때 장면을 배치 할 때 잘 실행됩니다. 그러나 내가 게임을하고 그 장면에 도달했을 때, 플랫폼은 움직이는 방향에 관계없이 조금씩 상쇄됩니다. 다른 플레이 세션에서 플랫폼을 일관되게 움직일 수있는 방법에 대한 의견이 있으십니까?

+1

그들이 그 장면에 오기 전에 파괴 되었습니까? – Bijan

답변

2

Time.smoothDeltaTime은 일정한 속도가 아니므로 플랫폼이 이동하는 거리가 변경됩니다. 이러한 작은 차이가 합쳐져서 원래 위치를 대체합니다.

끝점을 begin &으로 정의하고 그 사이를 이동합니다. 몇 가지 아이디어 이러한 편리한 방법을 체크 아웃 : & Vector3.Lerp

0

Vector3.MoveTowards 더 나은 http://dotween.demigiant.com/처럼 트윈 엔진을 사용 할 수 있습니다. 당신이 Dotween을 설치하는 경우

당신은 단순히

transform.DOMove(new vector3(1 ,0 , 1) , duration); 

사용할 수 있습니다 당신은 또한 트윈에 대한 용이성을 설정할 수 있습니다. 또는 Oncomplete fucntions를 사용하십시오.

transform.DOMove(new vector3(1 ,0 , 1) , duration) 
    .SetEase(Ease.OutCubic) 
    .OnCompelete(() => { shouldClose = true; }); 

트위터에 루프를 설정할 수도 있습니다. .SetLoops(-1).