Question by
SamRock · Oct 07, 2019 at 02:18 AM ·
rotationmouselook2.5dflashlight
Rotate Flashlight X Axis in Direction facing based on Mouse Input
Hi All,
I have a requirement where I need to Rotate my character's Flashlight up and down based on Mouse input. But it should only change the X axis Rotation in the direction he is facing. Here is a video showing my requirement: link t
I tried various code found online, but none seem to work for me :( Below is the last code I tried before giving up!
private void MouseLook()
{
float rotationSpeed = 2.5f;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Quaternion targetRotation = Quaternion.LookRotation(ray.direction);
//targetRotation.y = 0;
//targetRotation.z = 0;
Quaternion currentRotation = _FlashLight.transform.rotation;
float angularDifference = Quaternion.Angle(currentRotation, targetRotation);
Debug.Log(currentRotation);
if (angularDifference > 0)
_FlashLight.transform.rotation = Quaternion.Slerp(
currentRotation,
targetRotation,
(rotationSpeed * 180 * Time.deltaTime) / angularDifference
);
else
_FlashLight.transform.rotation = targetRotation;
_FlashLightVolume.transform.rotation = _FlashLight.transform.rotation;
/* Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
Vector3 lookP= new Vector3(0,0,0);
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
lookP = hit.point;
//Angle between mouse and this object
float angle = Vector3.Angle(transform.position, lookP);
//lookP.z = transform.position.z;
//lookPos = new Vector3(lookP.x, lookP.y, transform.position.z);
_FlashLight.transform.rotation = Quaternion.Euler(new Vector3(angle, 0f, 0f));
_FlashLightVolume.transform.rotation = _FlashLight.transform.rotation;
}
//Head.transform.position
//_FlashLight.transform.LookAt(lookPos);
//_FlashLightVolume.transform.LookAt(lookPos);
/*
Vector3 directionToLook = lookP - transform.position;
//float angle = Vector3.Angle(directionToLook, transform.forward); //new Vector3(0, transform.forward.y, transform.forward.z));
float angle = Vector3.Angle(directionToLook, transform.forward); //new Vector3(0, transform.forward.y, transform.forward.z));
if ((angle >=-30 && angle <= 24.0f))
{
// lookPos = lookP;
}
*/
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612213105im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Orbiting Crosshair issue when trying to stop at a specific angle 0 Answers
How to take only one key input at a time? 0 Answers
How to clamp transform.RotateAround using Javascript? 1 Answer
Rotate the player around the z axis, using a mouse look type script 0 Answers
Smooth Camera Mouse Clamp, Damp 0 Answers