2017-01-03 6 views
0

필자는 자신의 코 루틴을 사용하여 여러 GameObject의 위치와 회전을 스크립트에 첨부하여 부드럽게 보간하기를 원했습니다. 코 루틴을 시작할 때 매끄러운 부분은 잘 작동하지만 모든 객체는 같은 위치로 이동합니다. 의도 한 바가 아닙니다. 나는 그것이 왜 그런지, 그리고 그것을 다루는 현명한 방법이 있는지 이해하고 싶다. 나는 거기에 목록이있는 mastercoroutine을 만든 다음 평활 부분을 호출에 대해 생각했다코 루틴 호출 스택

IEnumerator interpolate_Plate(Transform targ) 
{ 
    float passedTime = 0; 

    while (!transform.Equals(targ)) 
    { 
     passedTime += Time.deltaTime; 

     transform.position = Vector3.Lerp(transform.position, targ.position, passedTime); 
     transform.rotation = Quaternion.Lerp(transform.rotation, targ.rotation,passedTime); 
     yield return null; 
    } 

    yield break; 
} 

:

이처럼 내 코 루틴이 모습입니다. targ의 참조가 항상 스택의 모든 coroutinecall에 대해 재설정된다는 문제가 있습니까?

당신에 의해 코 루틴을 호출하는 기능 요청으로

: 통일 이후

public void move_Plate(Transform newPosition) 
{ 
    StartCoroutine(interpolate_Plate(newPosition)); 
} 
+0

어떻게 interpolate_Plate를 호출하나요? –

+0

당신은 coroutines를 시작하는 방법을 보여줘야 할 것입니다. 또한 코 루틴이 그 지점에서 끝나기 때문에 마지막 휴식은 쓸모가 없습니다. – Everts

+0

어쨌든 코 루틴이 필요하지 않을 수도 있습니다. 업데이트에서 논리를 이동하면 필요에 충분할 수 있습니다. –

답변

1

좋아요 그래서 나는 해결책을 찾았을, 또는 C 번호는 포인터 등 문제가 있었다에서 작동합니다. 다음 객체의 변형에 대한 포인터를 사용했기 때문에 계속 모든 객체의 변형을 변경했습니다. 그러나 나는 그 객체를 옮겨 마지막 객체로 옮겼습니다.

는이 문제를 방지하는 방법 :

나는 예전의 위치와 회전 수 있도록 내 값을 저장하는 새로운 클래스를 만들었습니다. 나는 판을 옮기는 내 클래스에 인스턴스를 저장합니다. 주석에서 제안한대로 coroutine에서 update 메소드로 변경되었습니다. 플래그를 사용하여 객체를 이동해야하는지 여부를 확인합니다. 그런 다음 새로운 위치로 부드럽게 이동합니다.

코드 :

private Trans MoveTo; 
private bool move; 

void Update() 
{ 
    if (move) 
    { 
     float passedTime = 0; 
     passedTime += Time.deltaTime; 

     transform.position = Vector3.Lerp(transform.position, MoveTo.position, passedTime); 
     transform.rotation = Quaternion.Lerp(transform.rotation, MoveTo.rotation, passedTime); 
    } 
} 

가 작동하는 것 같다.

관련 문제