Пытаюсь сделать вращение руки у пероснажа. Движение с помощью джойстика, игра на андроид.
Т.е. Если джойстик направлен влево, то и персонаж и рука смотрят влево, в правую сторону же самое.
Но у меня нормально смотрят только вправо рука и персонаж, а вот если повернуть персонажа вправо, то он повернется нормально, а вот рука будет дальше смотреть вправо, так и не смог найти на это ответа, а если сам делал, то рука все равно не хотела поворачиваться нормально
Вот картинки:
Вот скрипты:
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);
}
}
}
}