[英]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.