Unity 枪械红点瞄准器计算

今天突然别人问我红点瞄准器在镜子上如何计算,之前的吃鸡项目做过不记得,今天写个小用例整理下。

主体思想记得是目标位置到眼睛穿过红点瞄准器获取当前点的位置就可以。应该是这样吧,:)

武器测试结构

首先整个结构:

枪上Cube是握把,瞄准器就是镜子,红点,远处100米放一个目标点便于观察红点位置。

很多人说瞄准走枪管,不要这样想,绿色的瞄准线平行于枪管就可以了。

实现代码

先上代码:

csharp 复制代码
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 update
    void Start()
    {
        camerMain = Camera.main;
    }

    // Update is called once per frame
    void 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:

相关推荐
心疼你的一切2 小时前
Unity异步编程神器:Unitask库深度解析(功能+实战案例+API全指南)
深度学习·unity·c#·游戏引擎·unitask
呆呆敲代码的小Y4 小时前
【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果
游戏·unity·游戏引擎·u3d·免费游戏·翻书插件
AC梦17 小时前
unity中如何将UI上的字高清显示
ui·unity
小贺儿开发1 天前
Unity3D 智慧城市管理平台
数据库·人工智能·unity·智慧城市·数据可视化
June bug2 天前
【领域知识】休闲游戏一次发版全流程:Google Play + Apple App Store
unity
星夜泊客2 天前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
dzj20212 天前
PointerEnter、PointerExit、PointerDown、PointerUp——鼠标点击物体,则开始旋转,鼠标离开或者松开物体,则停止旋转
unity·pointerdown·pointerup
心前阳光2 天前
Unity 模拟父子关系
android·unity·游戏引擎
在路上看风景2 天前
26. Mipmap
unity
咸鱼永不翻身2 天前
Unity视频资源压缩详解
unity·游戏引擎·音视频