- Home /
How can i rotate the character and camera while moving the mouse around ?
The default state should be when the character is "Idle" then when i move the mouse around the character and the camera should rotate to the mouse position.
Now i could make that only the player is rotating to the mouse position. The problems i can't figure out how to solve:
How to rotate the camera like i do with the character in the Ray1 part ? I want the camera also to rotate up down left right like the character. It's like the camera is sitting on the character head for the logic.
When the character is reached to the mouse position after clicked the mouse he stop but then if i will move the mouse around the character will move and follow the mouse and i don't want the character to move after reached the mouse position. I want him to back to the default state where i move the mouse around and the character and camera will rotate to the mouse position.
In some cases when the character is reached the mouse position and the mouse cursour is too close or maybe touching the character legs the character start to rotate on place. How can i make that he will not rotate on place ?
For number 3 i tried to move the line:
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed);
To the else part in the bottom. but it didn't solve the problem.
using UnityEngine;
using System.Collections;
public class ClickToMove : MonoBehaviour
{
public int speed = 5; // Determines how quickly object moves towards position
public float rotationSpeed = 5f;
private Vector3 targetPosition;
private Animator _animator;
private Vector3 destination;
private Quaternion targetRotation;
void Start()
{
_animator = GetComponent<Animator>();
_animator.CrossFade("Idle", 0);
}
void Update()
{
RaycastHit hit;
Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray1, out hit) && hit.collider.name != "ThirdPersonController")
{
transform.LookAt(hit.point);
}
else
{
transform.LookAt(ray1.GetPoint(100)); //the number here is compltely arbitrary
}
if (Input.GetKeyDown(KeyCode.Mouse0))
{
_animator.CrossFade("Walk", 0);
Plane playerPlane = new Plane(Vector3.up, transform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
Vector3 targetPoint = ray.GetPoint(hitdist);
targetPosition = ray.GetPoint(hitdist);
targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
destination = targetPosition;
}
}
//transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed);
if ((transform.position - destination).magnitude < 0.7f)
{
_animator.CrossFade("Idle", 0);
}
else
{
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed);
}
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612095545im_/https://answers.unity.com/themes/thub/images/avi.jpg)