2014-11-16 8 views
4

나는 시간에 객체 이동을 할 수있는 확장 방법을 썼다. 잘 작동한다; 그러나 개체가 일정 기간 동안 해당 작업을 수행 중이므로 내 업데이트 방법과 같은 다른 모든 호출을 무시합니다. 나는 코 루틴 (Coroutine)으로 뭔가를 할 필요가 있다고 가정하고 있지만 어디로 가는지 알 수 없다. 다른 코드 (예 : Update() 메서드)가 동시에 실행되는 것을 방지하지 않고 다음 코드를 작동시키는 방법은 무엇입니까?는 코 루틴 확장 메소드

======================================= 다음과 같이 단순화 된 버전입니다 =========================

//The following script is attached to the GameObject 
[RequireComponent(typeof(Rigidbody2D)] 
public class MyBehaviour : MonoBehaviour 
{ 
    void Start() 
    { 
     rigidbody2D.MoveOverTime(); 
    } 

    void Update(){ 
     rigidbody2D.MovePosition(transform.position.x + 1, transform.position.y); 
    } 
} 

========================================================================================================== ================================

//The following script is not attached to anything 
public static class Rigidbody2DExtension 
{ 
    public static void MoveOverTime(this Rigidbody2D rigidbody2D) 
    { 
     gameObject.addComponent<MoveOverTimeComponent>(); 
    } 
} 

[RequireComponent(typeof(Rigidbody2D)] 
class MoveOverTimeComponent : MonoBehaviour 
{ 
    void Update(){ 
     MovePositionByALittleBit(); 
    } 

    void MovePositionByALittleBit(){ 
     float x = transform.position.x + 1; 
     float y = transform.position.y; 
     rigidbody2D.MovePosition(new Vector2(x, y)); 
    } 
} 
+0

은 왜'Update' 방법 (들)를 호출 할 것인가? 내가 볼 수있는 한 그들은 결코 호출되지 않는다. 그들은 어떻게 MonoBehaviour –

+0

이라고 @KirkWoll? 당신은이 방법을 무시하지 않고 개인적입니다. – Evorlor

+0

의 확장으로 자동 –

답변

3

모두 당신의 Updates()가 실행된다. 사실 MonoBehaviours 중 모든 Updates()이 실행됩니다.

다음 문제는 두 개의 서로 다른 Update() 기능에서 같은 GameObject를 이동하려고 gameObject.addComponent<MoveOverTimeComponent>(); 실제로 (당신이 게시 제한 코드에 의해 명확하지 않은)을 GameObject을 의미한다고 가정.

+0

그건 내 문제입니다, 고마워요! 두 개의 다른 Update() 함수에서 동일한'GameObject'를 이동하려고합니다. 이것을 허용하는 방법에 대한 아이디어? – Evorlor

+0

당신은 이미 움직이고 있습니다. 똑같은 양만큼 똑같은 방향으로 움직이는 것입니다. 'Updates()'중 하나를'y 축 '에서만 이동시키고 다른 하나는'x 축'에서 이동시켜 과감한 변화를 볼 수 있습니다. – FunctionR

+0

나는 새로운 GameObject를 만들었습니다. 2 개의 스크립트를 제외하고는 아무 것도 없습니다. Vector2 newPosition = 새로운 Vector2 (transform.position.x + 1 transform.position.y) : 하나는이 수행 rigidbody2D.MovePosition (newPosition); 다른 하나는 다음을 수행합니다. Vector2 newPosition = new Vector2 (transform.position.x, transform.position.y + 1); rigidbody2D.MovePosition (newPosition); 그 중 하나만 호출됩니다. 이것에 대한 연구를 좀 할 필요가 있습니다. – Evorlor