我四处寻找了一段时间,但我不知道如何解决这个讨厌的bug。我使用的是自上而下的视图(指向-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就会破裂;
任何提示都将不胜感激:)
附注:我将1加到z,然后重新设置它,因为否则无论我在哪里移动指针,mouseToWorld都是恒定的0。
发布于 2019-01-20 09:35:01
也许是因为速度矢量和鼠标方向不一样,所以它就断了。
下面的脚本将使一个箭头跟随鼠标,它基本上与您的相同,只是它也更新了位置:
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);
}
}发布于 2019-01-20 10:01:56
谢谢你的回答!我计算出你需要减去播放器和相机之间的距离到鼠标的初始位置:
新位置= Camera.main.ScreenToWorldPoint(Input.mousePosition - Vector3 mouseToWorld ( 0,0,Camera.main.trans.postion.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);https://stackoverflow.com/questions/54272709
复制相似问题