2016-07-04 3 views
0

Я создал руку с настраиваемой осью в Unity, которая, по существу, должна указывать везде, где указала мышь, независимо от ориентации игрока. Теперь эта рука выглядит странно, когда указана на сторону, противоположную той, на которой она была нарисована, поэтому я использую SpriteRenderer.flipY = true, чтобы перевернуть спрайт и сделать его нормальным. У меня также есть оружие в конце руки, что в основном прекрасно. Теперь проблема в том, что у меня есть «FirePoint» в конце ствола оружия, и когда спрайт получает отражение, его положение не меняется, что влияет на частицы и положение стрельбы. По сути, все, что должно произойти, состоит в том, что Y-позиция FirePoint должна стать отрицательной, но Unity, похоже, считает, что я хочу, чтобы изменение позиции было глобальным, тогда как я просто хочу, чтобы оно было локальным, чтобы оно могло работать с любым вращение руки находится. Я попытался это сделать:Перемещение чего-то повернутого на пользовательский шарнир Unity

if (rotZ > 40 || rotZ < -40) { 
    rend.flipY = true; 
    firePoint.position = new Vector3(firePoint.position.x, firePoint.position.y * -1, firePoint.position.z); 
} else { 
    rend.flipY = false; 
    firePoint.position = new Vector3(firePoint.position.x, firePoint.position.y * -1, firePoint.position.z); 
} 

Но это работает на глобальной основе, а не на локальной, которая мне нужна. Любая помощь будет высоко оценена, и я надеюсь, что я предоставил достаточно информации для достижения окончательного результата. Пожалуйста, сообщите мне, если вам нужно что-нибудь еще. Заранее благодарю вас за хороший день!

+0

рассматривается с использованием 'localPosition'? –

+0

Спасибо, это очень помогло мне. Пожалуйста, подумайте о том, чтобы ответить на этот вопрос, чтобы я мог его принять. – ElectricBoogaloo

+0

для более легкого решения также проверьте мой ответ. и проголосовать –

ответ

0

Вы можете использовать RotateAround(), чтобы получить желаемое поведение вместо того, чтобы переворачивать вещи вокруг. Вот пример кода:

public class ExampleClass : MonoBehaviour 
{ 
    public Transform pivotTransform; // need to assign in inspector 
    void Update() 
    { 
     transform.RotateAround(pivotTransform.position, Vector3.up, 20 * Time.deltaTime); 
    } 
} 
+0

Это слишком большая часть отхода от кода, который я использую в настоящее время, и для этого потребуется большой рефакторинг, а использование 'localPosition' было простым и легким решением. – ElectricBoogaloo