• 将世界坐标转化到屏幕坐标


    要将世界坐标转化为屏幕坐标,在UNITY中提供一个内置函数:

    Camera.main.WorldToScreenPoint( Vector3 Pos)

    转化出的结果是一个Vector3变量,这里主要说一下 这个变量的z值

    转换结果z值是根据 被转换点与主摄像机的世界空间位置来决定的。

    比如 点A = (1,1,0)

    主摄像机 C = (1,1,10)

    那么转换后的点的 z = 10-0 =10

    也就是说,如果z值为负,那么该点就在摄像机的前面,超出了摄像机可以显示的范围

    而如果z值为正,也可能超出范围,这里需要获得摄像机的可视范围,然后再与z值比较。

    如果可视范围小于 z值,那么该点也在可视范围以外。

    这里再说一个坑,在有些时候,你使用这个API的时候,会发现虽然你的鼠标输入的位置在变化,但是得到的结果却是惊人的一致,

    这TM是为什么呢?这多半是因为你的主摄像机,并不属于UI摄像机,也就是没有挂载到canvas或者NGUI下面,那么自然也就无法

    使用这个API了,那么应该如何获取呢?相信聪明的你一定能想到,那就是使用射线,具体代码如下:

    1  Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//生成一条射线,这条射线是从主摄像机出发,然后经过鼠标点击的屏幕位置
    2 
    3                 RaycastHit hit;//声明接受碰撞信息的变量
    4 
    5                 Physics.Raycast(ray, out hit);//将声明的射线发射出去
    6 
    7                 var pos = hit.point;//从射线碰撞结果中得到3D世界中的坐标,这就是我们需要的坐标了
  • 相关阅读:
    codevs 3249 搭积木
    BSGS算法+逆元 POJ 2417 Discrete Logging
    POJ 1012 Joseph
    SPFA cojs 176. [USACO Feb07] 奶牛聚会
    素数筛 codevs 1675 大质数 2
    单片机软件proteus的汉化步骤
    直升机和固定翼实操期末考试
    二、万用表使用方法
    拉伸切除
    拔模
  • 原文地址:https://www.cnblogs.com/leiGameDesigner/p/9036506.html
Copyright © 2020-2023  润新知