@BrightOnX

Почему в Unity2d объект неправильно крутится?

Пытаюсь сделать вращение руки у пероснажа. Движение с помощью джойстика, игра на андроид.
Т.е. Если джойстик направлен влево, то и персонаж и рука смотрят влево, в правую сторону же самое.
Но у меня нормально смотрят только вправо рука и персонаж, а вот если повернуть персонажа вправо, то он повернется нормально, а вот рука будет дальше смотреть вправо, так и не смог найти на это ответа, а если сам делал, то рука все равно не хотела поворачиваться нормально
Вот картинки:
5ebd5ab5a59e3357349893.jpeg5ebd5abb0a7f2424553259.jpeg

Вот скрипты:
PlayerMovement.cs:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class PlayerMovement : MonoBehaviour
{
    public Joystick joys;// джойстик
    public float speed; //скорость
    Rigidbody2D rb;
    public bool is_right=true;
 
    void Start()
    {
        rb = GetComponent<Rigidbody2D>(); //подключаем rigidbody
    }

    void Update()
    {

        if (is_right && joys.Horizontal < 0) //если игрок повернуть вправо и джойстик повернут вправо, то перевернуть
        {
            
                Flip();

        }
        else if (!is_right && joys.Horizontal > 0) // тоже самое, только в обратную сторону
        {
            
                Flip();
        }
                    
       
    }

    void FixedUpdate() {

        
        rb.velocity = new Vector2(joys.Horizontal * speed,joys.Vertical*speed); // движение игрока
            
    }

   public void Flip() // переворот
    {
        is_right = !is_right;
        Vector3 movex = transform.localScale;
        movex.x *= -1;
        transform.localScale = movex;
    }

}


hanRotation:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;


public class hanRotation : MonoBehaviour
{
   

    PlayerMovement player; 
    public Joystick joyshoot; //тот же джойстик, который управляет игроком
    public GameObject myPlayer; //игрок
    
   

    private void Start()
    {
        player = GameObject.Find("Player").GetComponent<PlayerMovement>();
    }
    private void FixedUpdate()
    {
        float vertical = joyshoot.Vertical;
        float horizontal = joyshoot.Horizontal;

        float rotZ = Mathf.Atan2(vertical, horizontal) * Mathf.Rad2Deg;
       
        transform.rotation = Quaternion.Euler(0f, 0f, rotZ);    //вращение рукой

            if (rotZ < -90 || rotZ > 90)
        {
            if (myPlayer.transform.eulerAngles.y == 0)
            {

                transform.localRotation = Quaternion.Euler(180, 0, -rotZ);

            }
            else if (myPlayer.transform.eulerAngles.y == 180)
            {

                transform.localRotation = Quaternion.Euler(180, 180, -rotZ);

            }
            }
        }       

}
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@PrizmMARgh
Возможно, ошибка в этих строках:
transform.localRotation = Quaternion.Euler(180, 0, -rotZ);
transform.localRotation = Quaternion.Euler(180, 180, -rotZ);
дело в том, что тело отражается в строке
transform.localScale = movex;
из-за чего, второй раз отражаются и руки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы