稳赢计划

  • <tr id='HbjjTB'><strong id='HbjjTB'></strong><small id='HbjjTB'></small><button id='HbjjTB'></button><li id='HbjjTB'><noscript id='HbjjTB'><big id='HbjjTB'></big><dt id='HbjjTB'></dt></noscript></li></tr><ol id='HbjjTB'><option id='HbjjTB'><table id='HbjjTB'><blockquote id='HbjjTB'><tbody id='HbjjTB'></tbody></blockquote></table></option></ol><u id='HbjjTB'></u><kbd id='HbjjTB'><kbd id='HbjjTB'></kbd></kbd>

    <code id='HbjjTB'><strong id='HbjjTB'></strong></code>

    <fieldset id='HbjjTB'></fieldset>
          <span id='HbjjTB'></span>

              <ins id='HbjjTB'></ins>
              <acronym id='HbjjTB'><em id='HbjjTB'></em><td id='HbjjTB'><div id='HbjjTB'></div></td></acronym><address id='HbjjTB'><big id='HbjjTB'><big id='HbjjTB'></big><legend id='HbjjTB'></legend></big></address>

              <i id='HbjjTB'><div id='HbjjTB'><ins id='HbjjTB'></ins></div></i>
              <i id='HbjjTB'></i>
            1. <dl id='HbjjTB'></dl>
              1. <blockquote id='HbjjTB'><q id='HbjjTB'><noscript id='HbjjTB'></noscript><dt id='HbjjTB'></dt></q></blockquote><noframes id='HbjjTB'><i id='HbjjTB'></i>

                ScreenToViewportPoint,WorldToViewportPoint,ViewportToWorldPoint的运用,实现一个简单的对三〒维中物体的拖拽移动效果

                发布时间:2019-03-29 13:39:50  访问次数:

                  众所周知,我们手机或者手机屏幕上的坐标是一个二维平面的的坐标值,而且这个坐标是一像素为单位的,也就是说这个是会根据你用的设备的不同,你手机或者电脑上的坐标的长宽最大值也就不同。

                  之前不太了解标题上三个方法的用法,走了不少弯路,然后下来仔细研究了一下,感觉还是挺有收获的。

                  简单说【一下,我们在Unity中屏幕坐标是以坐下为原点,向两边延伸,右上为终点㊣,假定现在》我们的分辨率是1920x1080的话,那么简单,四个角对应的值大家可能都能猜到,(假定为横屏№)坐下(0,0),右下(1920,0),左上(1080,0),右上(1920,1085)。让后这就是我们屏幕的坐标,在unity中鼠标超出的话,会显示为负值╱,这个可取可以用log语句打印出来看看,前面都是♂铺垫,接下来重点来了,注意了。。。

                  1.如果我们运用第一个方法Camera.main.ScreenToViewportPoint()的话,那么,就可以将我『们不容分辨率屏幕上的点都转换为一个想x,y值在(0,1)之间的数值,当然和上面一样如果你传进来的这个鼠标的位置超出屏幕范围对『应的视口坐标(暂且这么称≡呼)也会变为负〓值,只不过不想分标率那么多情况,这个简单想一下就能←明白,下面是这个例子的第一个转换代码:

                1
                2
                //将屏幕坐标转●换为视口坐标
                        Vector3 pos1 = Camera.main.ScreenToViewportPoint (Input.mousePosition);

                  2.将三维中物体的位╲置转换为视口坐标位置,存放在一个三维向量中,这里了〒的三维中中物体坐标转换为视口坐标大致是这样的,假如你这个物体在game下ξ 能看见的话,那么它№的想x,y就在(0,1)之间,若超出我们视野范围则为大于一小于零的值,这是没什么问◆题的,然后就是z的值,因为物体可能离相机的远近不同,这个值变化比↘较大,我这里将物体在三维场景♀中坐标转换为视口坐标的原因主要想获取他离摄像机的★距离,也就是z的值,

                1
                2
                //将三维物体的Ψ 世界坐标转换为视口坐标
                    Vector3 pos2=Camera.main.WorldToViewportPoint(target.position);

                  3.将1,2中获取的信息组合成一个新的向量,然后作为4中的参数

                1
                2
                //赋值给一个新的变量▃
                Vector3 pos=new Vector3(pos1.x,pos1.y,pos2.z);

                  4.将视口坐标转〓换为三维坐标传递回给物体的position,功能实现完成

                1
                2
                //将合成的视口坐标转换为世界坐标∞赋值给物体
                target.position=Camera.main.ViewportToWorldPoint(pos);

                  接下来是演示的一△个gif:

                  有什么不合理的地方欢迎指正。