Unity搭建VR全景图

VR全景图片显示和相机旋转

**

如果需要内置面材质球文件,可以私信下我

**
Unity搭建VR全景图_第1张图片

场景构建

创建项目后拖进所需文件
文件有内置面材质球、图片等
Unity搭建VR全景图_第2张图片
创建文件
Unity搭建VR全景图_第3张图片
拖拽内置面材质球进入场景,并设置相机在球内部
Unity搭建VR全景图_第4张图片
再创建一个材质球,命名和图片相同
Unity搭建VR全景图_第5张图片
选择Shader为Unlit/Texture,再选择对应图片
Unity搭建VR全景图_第6张图片Unity搭建VR全景图_第7张图片
拖拽材质球到内置面材质球上
Unity搭建VR全景图_第8张图片
效果
Unity搭建VR全景图_第9张图片

鼠标控制观看

相机旋转方法有
PC:鼠标控制、键盘输入控制
安卓端:陀螺仪、触屏

控制方法

创建脚本,并拖拽到相机身上
Unity搭建VR全景图_第10张图片
编写脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VR_Camera : MonoBehaviour
{
    public Transform rig_Transform;
    public Transform vr_Camera;
    public float rotateSpeed = 180;
    public float x_AngleLimit = 45;
    public Vector3 angles;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    private void FixedUpdate()
    {
        CameraRotate();
    }
    void CameraRotate()
    {
        if (rig_Transform == null || vr_Camera == null) return;

        if (Input.GetMouseButton(0))
        {
            float x_Offset = Input.GetAxis("Mouse X");//控制水平方向转动,rig_Transform世界Y轴转动
            float y_Offset = Input.GetAxis("Mouse Y");//控制垂直方向转动,vr_Camera世界Y轴转动
            rig_Transform.Rotate(x_Offset*Vector3.up * rotateSpeed * Time.fixedDeltaTime, Space.World);
            vr_Camera.Rotate(y_Offset*Vector3.left * rotateSpeed * Time.fixedDeltaTime, Space.Self);
        }
        angles = vr_Camera.localEulerAngles;
        if (angles.x < 180)
        {
            if (angles.x > x_AngleLimit)
            {
                vr_Camera.localRotation = Quaternion.Euler(new Vector3(x_AngleLimit, 0, 0));
            }
        }
        if (angles.x > 180)
        {
            if (angles.x < 360-x_AngleLimit)
            {
                vr_Camera.localRotation = Quaternion.Euler(new Vector3(360-x_AngleLimit, 0, 0));
            }
        }
    }
}

拖拽
Unity搭建VR全景图_第11张图片

选择角度限制

  • 获取角度angles = vr_Camera.localEulerAngles;范围是0~360
  • angles.x,获取Rig的x,x是0到360,但这里是localRotation是0~180
  • 所以根据180作为平线,来进行区分上下
  • 进行位置限制,y、z均为0,x保持当前位置不变vr_Camera.localRotation = Quaternion.Euler(new Vector3(x_AngleLimit, 0, 0));

你可能感兴趣的:(Unity,vr,unity,游戏引擎)