zoukankan      html  css  js  c++  java
  • Unity3D教程宝典之2D图的像素对应

    转:http://blog.sina.com.cn/s/blog_471132920101fua3.html

    2D图的像素对应
            
    NGUI和EZ GUI都有图的像素对应功能。如何不用插件就实现这样的效果呢?
     
    实现步骤:
    (0)准备
    (1)确定屏幕分辨率
    (2)设置Camera。
    (3)设置GameObject的Scale

    (0)准备
    新建一个场景
    GameObject->Create Other->Plane
    把plane的rotate设置为(90,180,0)

    (1)确定屏幕分辨率
    1手动设置分辨率
    【风宇冲】Unity3D教程宝典之2D图的像素对应
    2通过代码取得
    Screen.width,Screen.height
     
    (2)设置Camera。
    设置Projection为正交Orthographic,以及Orthographic Size为屏幕分辨率高的一半。
    1.直接在Inspector面板里设置
    【风宇冲】Unity3D教程宝典之2D图的像素对应
    2.或者通过代码
    1. cam.isOrthoGraphic = true;
    2. cam.orthographicSize = Screen.height/2;

    当完成上述设置后,屏幕就和Unity对应了,即一个像素对应Unity里的一个距离单位(米),

    注意:

    Unity的一个距离,即1 unit,对应position的1个单位。

    即有2个position,一个是(0,0,0),一个是(1,0,0),那么可以说它们相差一个距离单位,即相差1 unit

    有2个position,一个是(0,0,0),一个是(0,1.2,0),那么可以说它们相差1.2 unit

    在使用系统重力(一般为-9.81)的情况下,Unity的一个距离(1 Unit)对应现实中的1米(1 meter)。而其他情况,无论是自己写重力,还是不用重力。1 unit对应多少距离由你自己定,只要有统一的标准即可。

    (3)设置GameObject的Scale
    当完成(2)后,像素已经和unity unit对应。之后需要设置绘制图像的GameObject的scale,而scale的值根据所使用的平面模型大小变化:
    模型的大小是一个单位: 那么scale直接和像素对应。例如需要设置图像大小为300x200像素的话,直接填scale为(300,1,200)
    模型的大小为其他大小:那么scale为 像素大小再除以模型的缩放。
    以unity自带的plane为例,该模型大小为10x10。 故scale为(300,200) 再除以(10,10)即,(30,20)
    那么scale直接设置为(30,1,20)即可
     
    使用Unity自带plane模型的代码:
    1. using UnityEngine;
    2. using System.Collections;
    3. public class Test : MonoBehaviour {
    4. public GameObject pic;
    5. public Camera cam;
    6. public Vector2 picPixel;
    7. void Start () {
    8. cam.isOrthoGraphic = true;
    9. }
    10. void Update () {
    11. cam.orthographicSize = Screen.height/2;
    12. pic.transform.localScale = new Vector3(picPixel.x * 0.1f,1,picPixel.y* 0.1f);
    13. }
    14. }
    脚本稍作修改,Scale直接对应像素。
    1. using UnityEngine;
    2. using System.Collections;
    3. public class Test : MonoBehaviour {
    4. public GameObject pic;
    5. public Camera cam;
    6. public Vector2 picPixel;
    7. void Start () {
    8. cam.isOrthoGraphic = true;
    9. }
    10. void Update () {
    11. cam.orthographicSize = Screen.height/2 * 10;
    12. pic.transform.localScale = new Vector3(picPixel.x,1,picPixel.y);
    13. }
    14. }
    或者也可以做成NGUI那样。摄像机的orthographicSize恒定为1,然后用一个根节点做缩放,使得图像物体的scale与像素对应。做法如下:
    新建一个GameObject,然后命名为UIRoot.
    将图像物体拖拽至UIRoot下。
    1. using UnityEngine;
    2. using System.Collections;
    3. public class Test : MonoBehaviour {
    4. public GameObject uiRoot;
    5. public GameObject pic;
    6. public Camera cam;
    7. public Vector2 picPixel;
    8. void Start () {
    9.    cam.isOrthoGraphic = true;
    10. }
    11. void Update () {
    12.    cam.orthographicSize = 1;
    13.    float pixelScale = Screen.height/2 * 10;
    14.    uiRoot.transform.localScale = new Vector3(1/pixelScale,1/pixelScale,1);
    15.    pic.transform.localScale = new Vector3(picPixel.x ,1,picPixel.y);
    16. }
    17. }
    之后运行,发现图像显示的尺寸和picPixel指定的像素尺寸完全一样。怎么样,是不是很实用呢?
    也可以实时创建或使用一个1x1的plane来显示2D图,有兴趣的朋友可以自己试试。
  • 相关阅读:
    Java文件的 In 与 Out 的相对性
    EBS 生产环境并发管理器重启步骤详解经验啊
    HDOJ1285 确定比赛名次(拓扑排序)
    对线性回归、逻辑回归、各种回归的概念学习
    一个截屏工具制作的全过程记录——如何使用“拿来主义”
    免费的响应式bootstrap管理员后台界面主题 Charisma
    挖掘管理价值:企业软件项目管理实战
    浏览器自动填充表单导致网页样式丢失
    「译」开发者如何提升和推销自己
    xcopy的一次误用及解决办法
  • 原文地址:https://www.cnblogs.com/ximu/p/3071100.html
Copyright © 2011-2022 走看看