您现在的位置是:首页 >学无止境 >Unity搭建VR全景图网站首页学无止境

Unity搭建VR全景图

Knoka705 2024-06-17 10:18:43
简介Unity搭建VR全景图

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

**

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

**
在这里插入图片描述

场景构建

创建项目后拖进所需文件
文件有内置面材质球、图片等
在这里插入图片描述
创建文件
在这里插入图片描述
拖拽内置面材质球进入场景,并设置相机在球内部
在这里插入图片描述
再创建一个材质球,命名和图片相同
在这里插入图片描述
选择Shader为Unlit/Texture,再选择对应图片
在这里插入图片描述在这里插入图片描述
拖拽材质球到内置面材质球上
在这里插入图片描述
效果
在这里插入图片描述

鼠标控制观看

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

控制方法

创建脚本,并拖拽到相机身上
在这里插入图片描述
编写脚本

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));
            }
        }
    }
}

拖拽
在这里插入图片描述

选择角度限制

  • 获取角度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));
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。