Unity: c#:眼睛看着鼠标:我该怎么做?

本文关键字:鼠标 我该怎么做 眼睛 Unity | 更新日期: 2023-09-27 18:16:54

我在2D游戏中有一个角色,我的目标是让他的眼睛看起来好像在看光标,通过将瞳孔的圆圈向光标移动,有限制。我一直在努力创造这个两天了,现在还没有找到一个工作的方式!!使用下面的代码,我可以将我的眼睛移向光标,但这只适用于屏幕的左下角!(如果光标不在屏幕下方或屏幕左侧,则眼睛移动到右上方)

using UnityEngine;
using System.Collections;
public class LookAtMouse : MonoBehaviour {

    public float speed = 5f;
    private Vector3 target;
    public Transform origin;
    void Start () {
        target = transform.position;

    }
    void Update () {
            target = (Input.mousePosition);
            target.z = transform.position.z;
        transform.position = Vector3.MoveTowards(origin.position, target, speed * Time.deltaTime);
    }   
}

如果有人能给我指出正确的方向,我会非常感激!谢谢:)

Unity: c#:眼睛看着鼠标:我该怎么做?

它可能只在一个象限中为您工作的原因是因为Input.mousePosition返回像素坐标的位置。基本上,如果你的窗口是800x600像素,它会返回…

(0,0,0)表示屏幕的左下角像素

(0,600,0)用于屏幕的左上角像素

(800,0,0)用于屏幕右下角像素

(800,600,0)用于屏幕右上方像素

既然你的瞳孔在世界空间中,你也希望鼠标的位置在世界空间中。不管怎样,即使你解决了这个问题,我不认为Vector3.MoveTowards会达到你想要的效果。我认为这更符合你的要求:

using UnityEngine;
public class LookAtMouse : MonoBehaviour {
    public float speed = 5f;
    public float maxDistance = 1f;
    public Camera mainCamera;
    private Vector3 _origin;
    void Start () { 
        _origin = transform.position;
    }
    void Update () {
        /* Get the mouse position in world space rather than screen space. */
        var mouseWorldCoord = mainCamera.ScreenPointToRay(Input.mousePosition).origin;
        /* Get a vector pointing from initialPosition to the target. Vector shouldn't be longer than maxDistance. */
        var originToMouse = mouseWorldCoord - _origin;
        originToMouse = Vector3.ClampMagnitude(originToMouse, maxDistance);
        /* Linearly interpolate from current position to mouse's position. */
        transform.position = Vector3.Lerp (transform.position, _origin + originToMouse, speed * Time.deltaTime);
    }   
}
相关文章: