今天突然別人問我紅點瞄準器在鏡子上如何計算,之前的吃雞項目做過不記得,今天寫個小用例整理下。
主體思想記得是目標位置到眼睛穿過紅點瞄準器獲取當前點的位置就可以。應該是這樣吧,:)
武器測試結構
首先整個結構:
槍上Cube是握把,瞄準器就是鏡子,紅點,遠處100米放一個目標點便于觀察紅點位置。
很多人說瞄準走槍管,不要這樣想,綠色的瞄準線平行于槍管就可以了。
實現代碼
先上代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;public class Testhongdian : MonoBehaviour
{public Camera camerMain;public Transform jingzi;public Transform hongdian;public float dis = 100f;// Start is called before the first frame updatevoid Start(){camerMain = Camera.main;}// Update is called once per framevoid Update(){//模擬槍口方向有目標點Vector3 targetPoint = jingzi.transform.position + jingzi.transform.forward * dis;//目標點到相機的dir , 因為槍位置可能變化, 所以要計算目標到眼睛Vector3 dir = (camerMain.transform.position - targetPoint).normalized; float denominator = Vector3.Dot(dir, jingzi.transform.forward);float numerator = Vector3.Dot(jingzi.transform.position - targetPoint, jingzi.transform.forward);float t = numerator / denominator;Debug.Log(denominator.ToString("F5") + "," + numerator.ToString("F5") + "," + t.ToString("F5"));//紅點坐標Vector3 newat = targetPoint + dir * t;Debug.DrawLine(targetPoint, newat , Color.green);hongdian.transform.position = newat;// at + jingzi.transform.position;}
}
首先計算目標點位置,因為武器標準位置就是目標,所以是鏡子的forward方向就是目標。
計算一個向量,然后用Dot計算夾角的比值,就知道偏移,dir * t就是在鏡子上的偏移。
最后把紅點的位置給上,當然自己要處理出去了怎么辦。
實現效果
附上效果GIF: