unity3D实现不同视角下的测距

 注1:在此工程中,我用的为此版本

一、实现目标 

        实现不同视角下的测距,在前文中,我一共创建一个四中不同的视角,而在本篇中我将实现,在不同视角中都能实时测距的功能。

 二、实现方法

        循环遍历4个视角相机,将实时为isActiveAndEnabled为True的设为Target:

for (int i = 0; i < cameras.Length; i++)
{
    //此处我遇到一个坑,对于Camera类的判断需要用isActiveAndEnabled
    //只用enabled的话会一直返回true,无论Camera是否激活
    if (cameras[i].isActiveAndEnabled)
    {
        
        target = cameras[i].transform; // 将激活的相机的Transform赋值给target
        break;
    }
}

三、具体步骤 

        第一步:确保有四个相机对象,和一个TM或者TMP。

第二步:创建脚本 -- Ranging

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
/// <summary>
/// 
/// 实现不同视角下的测距
/// </summary>
public class Ranging : MonoBehaviour
{
    public Camera[] cameras; // 在Inspector中拖拽所有需要切换的相机到这里
   
    private Transform target; // 人物对象的Transform(在Inspector中拖拽人物对象到这里)

    public TextMesh distanceText; // 跟随方块的TextMeshPro(在Inspector中拖拽TextMeshPro对象到这里)
    // Start is called before the first frame update
    public void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

        //遍历相机数组,找到激活的相机,将其复制给target
        for (int i = 0; i < cameras.Length; i++)
        {
            if (cameras[i].isActiveAndEnabled)
            {
                
                target = cameras[i].transform; // 将激活的相机的Transform赋值给target
                break;
            }
        }
        // 计算人物到方块的直线距离
        float distance = Vector3.Distance(transform.position, target.position);

        // 格式化距离显示
        string distanceDisplay = distance.ToString("0.00");

        // 更新TextMeshPro的内容
        distanceText.text = distanceDisplay;

        // 更新TextMeshPro的位置,使其跟随方块

        distanceText.transform.position = transform.position + new Vector3(0, 1f, 0); // 这里假设Text在方块上方1单位,根据需要调整

        distanceText.transform.LookAt(Camera.main.transform);
    }
}

第三步:将脚本链接到需要测量距离的某个对象上

四、结果测试

无论在何种视角下,都能实现实时的测距

五、结果分析

仍需后期加贴图

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值