显示图片相关的控件有两个,一个是Image另一个是raw image.都是二维的,自带Canvas.
前者用的是sprite格式,即需要把常见的图片Jpg,png等在unity中转成此格式才行,
如下图,把常见的图片operation的属性texture type改选成sprite即可变成sprite格式的图片,此时原图片右侧会多一个三角标志,点击能展开。sprite格式都是这样的,带三角三角标志,点击能展开。
这会给网络播放带来困难,因此我们放弃了前者,用raw image. raw image就是我们常用的图片格式如Jpg,png以及sprite格式的也可以直接用的,直接拖动到texture上或者代码控制赋值即可,给动态控制或网络视频传输带来便利。我们来看一下一般的图片是什么样的,如下图:
接下来进入正题,建立两个raw image,分别显示不同的图片,update函数中每帧更新图片。
1.MRTK加入和环境设置(见官网)
2.新建raw image(在UI下),系统自动带入Canvas,设置Canvas的render mode 为world space,Pos Z设为0.6,其它位置比例不变,如下图。加入component, radial view(参数默认)以便canvas中的image随着视野移动。
加入picture update.cs代码如下,所有动态变化在这里实现,把三个准备好的图片,一个jpg,两个sprite拖入到变量窗口。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PictureUpdate : MonoBehaviour
{
public Texture2D picture1;
public Texture2D picture2;
public Texture2D picture3;
int i;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
i++;
if (i % 2 == 0)
{
GameObject.Find("Canvas/RawImageL").GetComponent<RawImage>().texture = picture1;
GameObject.Find("Canvas/RawImageR").GetComponent<RawImage>().texture = picture1;
}
else
{
GameObject.Find("Canvas/RawImageL").GetComponent<RawImage>().texture = picture2;
GameObject.Find("Canvas/RawImageR").GetComponent<RawImage>().texture = picture3;
}
if (i > 10) i = 0;
}
}
3. raw image的设置,position, width,height和scale改一下,其它不动。RawImageL如下
RawImageR如下
大功告成。 RawImageVideo是播放video用的,也是一个raw image,也已经成功,详见下篇hololens 通过RawImage播放mp4格式的video。