- Home /
Question by
thefrogeitan · Jul 24, 2020 at 11:05 AM ·
rotatedirectionjoystickplayer movement
i have a joystick and the joystick move to player but i want to rotate the player with the same joystick how i do that?
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using Unity.Mathematics;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
public class joystick : MonoBehaviour
{
public Transform player;
public float speed;
private bool touchStart = false;
private Vector2 pointA;
private Vector2 pointB;
public Transform circle;
public Transform outerCircle;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
pointA = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
circle.GetComponent<SpriteRenderer>().enabled = true;
outerCircle.GetComponent<SpriteRenderer>().enabled = true;
circle.transform.position = pointA;
outerCircle.transform.position = pointA;
}
if (Input.GetMouseButton(0))
{
pointB = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));
touchStart = true;
}
else
{
touchStart = false;
circle.GetComponent<SpriteRenderer>().enabled = false;
outerCircle.GetComponent<SpriteRenderer>().enabled = false;
}
}
private void FixedUpdate()
{
if (touchStart)
{
Vector2 offset = pointB - pointA;
Vector2 direction = Vector3.ClampMagnitude(offset, 1.0f);
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90;
Quaternion angleAxis = Quaternion.AngleAxis(angle, Vector3.forward);
movePlayer(direction);
circle.transform.position = new Vector2(pointA.x + direction.x, pointA.y + direction.y);
}
if (touchStart)
{
Vector2 offset = pointB - pointA;
Vector2 direction = Vector3.ClampMagnitude(offset, 1.0f);
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 180;
Quaternion angleAxis = Quaternion.AngleAxis(angle, Vector3.forward);
rotatePlayer(angleAxis);
circle.transform.position = new Vector2(pointA.x + direction.x, pointA.y + direction.y);
}
}
void movePlayer(Vector2 direction)
{
player.Translate(direction * speed * Time.deltaTime);
}
void rotatePlayer(Quaternion angle)
{
player.rotation = Quaternion.Slerp(player.rotation, angle, Time.deltaTime * 50);
}
}
Comment
Answer by Aloushi3 · Jul 24, 2020 at 11:42 AM
rip i don't know coding well i am a beginner and is still needs a lot of help, can u answer my question that i posted please
Your answer
Follow this Question
Related Questions
Rotating character based on joystick angle, at an angle 0 Answers
rotating object joystick rotation direction current object independently 0 Answers
Rotate player to joystick sprite location 0 Answers
Change the position of the Joystick by tap 2 Answers
Rotate a sphere in the same direction the camera is pointing at 2 Answers