unity原生定位实现方法

本文介绍了在Unity中如何使用原生方法实现相机定位,重点关注相机位置计算、朝向设置、距离目标调整及模型几何中心处理。核心代码展示了如何获取相机移动位置,并提供了两种获取目标Bounds的方法,一种基于Mesh,另一种基于Collider。示例代码还包含了相机平滑移动的实现。点击链接可下载完整示例。
摘要由CSDN通过智能技术生成

unity原生定位实现方法

在这里插入图片描述

本方法只是一种思路,其实基本原理很简单,主要解决四个问题。

  1. 相机位置最终位置的计算;
  2. 相机朝向;
  3. 相机离目标远近问题 ;
  4. 模型几何中心问题;

解决位置问题的方法就是两个向量向加,已知目标点的向量,加上相机的方向向量就可以;相机的方向unity的api已经提供;距离目标的远近的方法可以用目标的尺寸做参考和后面的几何中心问题一样都是现成发api。

核心源码

    public static Vector3 GetCameraMovePos(this Camera camera, Bounds target)
    {
        Vector3 vector = Vector3.zero;
        vector = target.center - (camera.transform.forward * target.size.magnitude);
        return vector;
    }

这里扩展了Camera的方法。

调用方法

    public Vector3 CameraPos;
    public bool isMove = false;
    void Update()
    {
        if (isMove)
        {
            Camera.main.transform.position = Vector3.MoveTowards(Camera.main.transform.position, CameraPos, 30f * Time.deltaTime);
            if (Camera.main.transform.position == CameraPos)
            {
                isMove = false;
            }
        }
    }

    private void OnMouseDown()
    {
        //bounds获取方法一,通过mesh获得。
        //CameraPos = Camera.main.GetCameraMovePos(gameObject.GetComponent<MeshFilter>().mesh.bounds);
        bounds获取方法二,通过碰撞盒子获得。(这里主要针对模型自身尺寸不规范的)
        CameraPos = Camera.main.GetCameraMovePos(gameObject.GetComponent<Collider>().bounds);
        isMove = true;
    }

demo下载地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生云木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值