浅谈Unity之定位实现方法

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 原生定位实现方法

前言:每日记录自己学习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;

   }


  1. 这里扩展了Camera的方法。
  2. 调用方法
  3.    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;

   }

相关文章
|
4月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
5月前
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
364 0
|
4月前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
105 0
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
4月前
|
存储 Java 图形学
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
|
6月前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
258 1
|
图形学
【游戏开发】unity透明特效的制作方法
Unity是一种强大的游戏开发引擎,它支持许多不同的特效和图形效果。其中一种常用的特效是透明特效,它可以使游戏中的材质变得半透明或完全透明。在本文中,我们将介绍如何使用Unity创建透明特效。
|
图形学
Unity脚本声明周期和MonoBehaviour常用方法
Unity脚本声明周期和MonoBehaviour常用方法
126 0

热门文章

最新文章