zoukankan      html  css  js  c++  java
  • unity 教程Tanks中的Transform.InverseTransformPoint理解

    Tanks教程中在处理摄像机缩放的时候使用了下面的函数,取两个坦克的中心点之后,根据两个坦克之间的距离,保证两个坦克都在屏幕中,然后进行缩放。

     1  private float FindRequiredSize()
     2     {
     3         Vector3 desiredLocalPos = transform.InverseTransformPoint(m_DesiredPosition);
     4         float size = 0f;
     5         for (int i = 0; i < m_Targets.Length; i++)
     6         {
     7             if (!m_Targets[i].gameObject.activeSelf)
     8                 continue;
     9 
    10             Vector3 targetLocalPos = transform.InverseTransformPoint(m_Targets[i].position);
    11             Vector3 desiredPosToTarget = targetLocalPos - desiredLocalPos;
    12             size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.y));
    13 
    14             size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.x) / m_Camera.aspect);
    15         }
    16         
    17         size += m_ScreenEdgeBuffer;
    18 
    19         size = Mathf.Max(size, m_MinSize);
    20         
    21         return size;
    22     }

    一开始没有明白InverseTransformPoint,这个函数变换位置从世界坐标到自身坐标。

    结构如下:

     摄像机选择的是正交投影,所以坦克到中心点CameraRig的x,y就是坦克距离屏幕中心点的位置。

    因为camera的父节点CameraRig有个旋转,所以计算到屏幕的中心点的坐标要考虑到旋转,不如直接调用InverseTransformPoint,这样得到tank相对CameraRig的坐标,就是到屏幕中心的坐标。而z轴对于我们的计算没有用处。

  • 相关阅读:
    JS---Function
    WebForm(Application,ViewState,Repeater的Command操作)
    WebForm(分页)
    WebForm多页面传值跳转
    WebForm(response内置函数)#转
    WebForm(内置函数)
    webform(复合控件)
    Webform简单控件
    webform之Repeater控件
    IIS编辑器错误信息:CS0016解决方案
  • 原文地址:https://www.cnblogs.com/lixiao24/p/12356695.html
Copyright © 2011-2022 走看看