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);
}
}
如果有人能给我指出正确的方向,我会非常感激!谢谢:)
它可能只在一个象限中为您工作的原因是因为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);
}
}