📜  面向鼠标统一旋转 - C# (1)

📅  最后修改于: 2023-12-03 15:42:26.818000             🧑  作者: Mango

C#实现面向鼠标统一旋转

在游戏或者UI中,我们经常需要让一个物体或者图形面向鼠标,这里提供一种C#实现的面向鼠标统一旋转的方法。

方法介绍

该方法主要是通过计算鼠标位置和物体位置之间的角度,然后使用旋转矩阵对物体进行旋转,使得物体面向鼠标。

具体实现
第一步:获取鼠标位置和物体位置坐标
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 objectPos = transform.position;

这里使用Unity3D引擎的函数获取鼠标位置和物体位置坐标。

第二步:计算旋转角度
Vector3 targetDir = mousePos - objectPos;
float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg;
Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);

首先计算鼠标位置和物体位置之间的方向向量,然后使用Mathf.Atan2函数得到旋转角度。最后使用Quaternion.AngleAxis函数创建一个旋转矩阵。

第三步:旋转物体
transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * rotationSpeed);

使用Quaternion.Slerp函数对物体进行旋转,这里使用一个插值函数来控制旋转速度,rotationSpeed是一个可调的参数。

完整代码
using UnityEngine;
using System.Collections;

public class FaceMouse : MonoBehaviour {

    public float rotationSpeed = 10;

    void Update () {
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector3 objectPos = transform.position;
        Vector3 targetDir = mousePos - objectPos;
        float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg;
        Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
        transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * rotationSpeed);
    }
}
总结

这里介绍了一种简单实用的C#实现面向鼠标统一旋转的方法,在Unity3D中特别适用,开发者可以根据需要进行修改和优化。