2016-03-20 5 views
1

У меня есть шар, который вращается вокруг точки 0,0,0 по оси Z. Когда нажата кнопка пробела, мяч должен попасть в большой круг. Теперь мой код выглядит так. Когда вы нажимаете пробел, мяч не ведет себя так, как должен. Я хочу знать, как сделать воздушный шар вниз точно внизUnity Move rotating object

вот как мяч должен вести себя -> behavior image

мой код:

void Update() { 
    if (Input.GetKeyDown (KeyCode.Space)) { 
     transform.position = new Vector3 (transform.position.x - 1, transform.position.y - 1, 0); 
    } else { 
     transform.RotateAround(new Vector3(0,0,0), new Vector3(0,0,1), 2); 
    } 
} 

ответ

1

Ваш код «прыжка» орбита Безразлично» t делать то, что вы хотите, потому что Transform.RotateAround изменяет как поворот, так и положение преобразования объекта. Demonstration of how RotateAround modifies the transform

Таким образом, прыжок в (положение - 1,1,0) в мире будет возвращать совершенно разные результаты каждый раз.

Что вы хотите сделать вместо этого вычислить (вектор) направление от объекта к центру орбиты (разность), то масштаб, что вплоть до того, насколько вы хотите его переместить, затем применить он в положение.

private Vector3 _orbitPos = Vector3.zero; 
private float _orbitAngle = 2f; 

private float _distanceToJump = 2f; 

void Update() 
{ 
    if (Input.GetKeyDown(KeyCode.Space)) 
    { 
     var difference = (_orbitPos - transform.position).normalized * _distanceToJump; 
     transform.Translate(difference); 
    } 

    transform.RotateAround(_orbitPos, Vector3.forward, _orbitAngle); 
} 

Это перемещает объект на орбиту ближе к 2 единицам, когда космос нажимается немедленно.

Если вы хотите иметь плавный переход вместо прыжка, посмотрите на использование Mathf.Lerp, Vector3.Lerp и связанные с ним процедуры.

+0

благодарит вас за этот информативный ответ. но это не сработает. Я использовал transform.translate без каких-либо других вычислений, и это сработало. Я просто не знал об этом методе, так как я новичок в unity3d –

+0

Итак, какие значения вы давали для transform.Translate(), то? И этот метод - небольшая математика, не уникальная для Единства! –

+0

«Но это не работает». Но я вас уверяю. Либо вы допустили ошибку при ее расшифровке, либо ваш вопрос не полностью объясняет, что вы хотели. –