我们用2Dcanvas做的界面,即使画布改成world会发现这些ui材质是透明的,就是当你站在会不前边是正的,但是后边是反的。如果想要两边看的文字图片都是正常的整的,就需要改ui的材质,写shader等方法,费时费力。所以,为了更便捷有效的实现,决定写一个小算法来实现这一小功能。原理很简单,让画布一直计算渲染相机相对于自己的位置,是在其世界空间下的前边还是后边。如果到了后边,就旋转自身180度,实现反向效果,算法很low很简单,但是效果很不错。非常适合做VR的那些单面渲染效果。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
2018.12.24
杰森
*/
public class LookCam : MonoBehaviour {
private Transform Cam;
private int cur_Dir;//记录当前方向
private enum State
{
Forward,
Back
}
private State state;
// Use this for initialization
void Start ()
{
Cam = Camera.main.transform;
float z = transform.InverseTransformPoint(Cam.position).z;
if (z > 0)
{
cur_Dir = 1;
state = State.Back;
}else
{
cur_Dir = -1;
state = State.Forward;
}
Debug.Log(cur_Dir);
}
// Update is called once per frame
void Update ()
{
if(Cam !=null)
{
float z= transform.InverseTransformPoint(Cam .position).z;
switch (state)
{
case State.Forward:
if (cur_Dir > 0 && z >0)//正面
{
cur_Dir = -1;
transform.eulerAngles += Vector3.up * 180;
Debug.Log("回正面");
}
state = State.Back;
break;
case State.Back:
if (cur_Dir < 0 && z > 0)
{
Debug.Log("回反面");
cur_Dir = 1;
transform.eulerAngles += Vector3.up * 180;
}
state = State.Forward;
break;
}
}
}
}