[英]Unity 3d, point object towards mouse (3d space)
我搜索了一会儿,但我不知道如何解决这个讨厌的错误。 我使用的是自顶向下的视图(指向-z),基本上是2d,带有3d对象和处于透视模式的相机。
当所有东西都在同一平面上移动时,我需要将对象朝向鼠标,忽略z方向。
我正在使用以下代码:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3(0, 0, 1f));
mouseToWorld.z = 0f;
Vector3 difference = mouseToWorld - transform.position;
difference.Normalize();
float angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, angle - 90);
不幸的是,它仅在物体静止时才起作用,并且在速度> 0时就破裂。
任何提示将不胜感激:)
ps我将1加到z,然后将其重置,因为否则,无论我将指针移到何处,mouseToWorld始终为0。
可能是因为速度向量和鼠标方向不同而中断了。
以下脚本将使箭头跟随鼠标,它与您的鼠标基本相同,除了它还会更新位置:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowMouse : MonoBehaviour {
public float moveSpeed = 0.01f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), moveSpeed);
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
difference.Normalize();
float rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotation_z);
}
}
感谢您的回答! 我发现您需要将播放器和相机之间的距离减去鼠标的初始位置:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition-新的Vector3(0,0,Camera.main.transform.position.z));
这是工作脚本:
Vector3 mouseToWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition - new Vector3(0, 0, Camera.main.transform.position.z));
//Debug.DrawLine(transform.position, mouseToWorld);
mouseToWorld.z = 0f;
Vector3 difference = mouseToWorld - transform.position;
difference.Normalize();
float angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, angle - 90);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.