Unity 2D спрайт не переворачивается - PullRequest
0 голосов
/ 07 февраля 2020

Я играю в платформер с Unity 2D и хочу перевернуть спрайт персонажа влево, когда игрок переместит его влево, но по некоторым причинам это не работает. Я попытался сделать этот один скрипт:

transform.rotation = new Vector3(0f, 180f, 0f);

, но он не сработал. Тогда я написал это:

transform.localScale = new Vector3(-0.35f, 0.35f, 1f); //the player's scale x and y are 0.35 by default

но это тоже не сработало. Затем я нашел это сообщение об ошибке в консоли: NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта UnityEditor.Graphs.Edge.WakeUp () (в C: / buildslave / unity / build / Editor / Graphs /UnityEditor.Graphs/Edge.cs:114).

Что мне делать? Я делаю эту игру для игрового джема, поэтому мне нужно быстро решить эту проблему. Спасибо.

РЕДАКТИРОВАТЬ : я заметил, что я могу перевернуть спрайт в редакторе, но я не могу сделать это с помощью скриптов.

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

Из этой темы, которую я нашел , похоже на старую ошибку из UnityEditor.Graphs.DLL кода Unity.

Попробуйте перезапустить Unity полностью.

Эта ошибка кажется происходить только в редакторе, а не после сборки игры, поэтому вы должны быть в безопасности.

0 голосов
/ 07 февраля 2020

Это немного устарело, поэтому обязательно дайте мне знать, как это работает. Вам нужно будет завершить sh остальные элементы управления, но это должно работать.

      public class SpriteFlipper : MonoBehaviour
{
   // variable to hold a reference to our SpriteRenderer component
   private SpriteRenderer mySpriteRenderer;

   // This function is called just one time by Unity the moment the component loads
   private void Awake()
   {
        // get a reference to the SpriteRenderer component on this gameObject
        mySpriteRenderer = GetComponent<SpriteRenderer>();
   }

   // This function is called by Unity every frame the component is enabled
   private void Update()
   {      
        // if the A key was pressed this frame
        if(Input.GetKeyDown(KeyCode.A))
        {
            // if the variable isn't empty (we have a reference to our SpriteRenderer
            if(mySpriteRenderer != null)
            {
                 // flip the sprite
                 mySpriteRenderer.flipX = true;
            }
        }
    }
}
0 голосов
/ 07 февраля 2020

Я давно не работал над 2D-проектами Unity, но вот фрагмент кода, который я использовал для решения этой проблемы в прошлом. Дайте мне знать, если это поможет.

    private void FlipSprite()
        {
            bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon;
            if(playerHasHorizontalSpeed)
            {
                        transform.localScale = new Vector2(Mathf.Sign(myRigidBody.velocity.x), 1f);

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...