Unity 实战【360VR 看房】

2023-05-16

360全景VR看房,可以实现不同角度切换视角,下面为运行效果

07d5f29d50af8b633083920e6cde0619.gif

360 全景的逻辑其实很简单,主要的思路是采用一个球体模型,将制作好的房子不同区间模型贴附在球体上,然后让相机在球体的中间,结合手势的移动使相机跟随。就可以实现不同视角的切换了。

本文主要讲述
1.添加资源素材
2.添加球体模型
3.实现屏幕旋转观测效果
4.缩放画面
5.画布添加指南针以及跟随相机
6.切换不同的房间

  • 添加资源素材
    使用模型制作工具 渲染一个完整的房子

     

    image.png

将上面的渲染成三个区域的全景图

image.png

将全景图以及资源素材导入到unity工程中

image.png

  • 添加球体模型

     

    image.png

添加一个球体模型 把全景图贴在球体上面 把相机放在球体的正中间。然后就可以看到上面效果。

注意:需要把球体的shader 调整一下

image.png

  • 实现相机旋转观测效果

     

    image.png

     

    添加CamPivot 在MainCamera节点下 挂载脚本RotationCam.script 脚本。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class RotationCam : MonoBehaviour
{
    public Transform myCam;
    float x;
    float y;
      bool canMouse = true;
    private void Update()
    {
        if (Input.touchCount == 1)
        {
            if (Input.GetTouch(0).phase == TouchPhase.Began)
            {
 
                canMouse = false;

            }
            if (Input.GetTouch(0).phase == TouchPhase.Moved)
            {
        
 
                canMouse = false;

                x = Input.GetTouch(0).deltaPosition.x* touchSpeed;

                y = Input.GetTouch(0).deltaPosition.y* touchSpeed;

                if (x != 0 || y != 0)
                    RotateView(-x, -y);

            }

           
        }

        if (canMouse == true)
        {
            if (Input.GetMouseButton(0))
            {
                x = Input.GetAxis("Mouse X");

                y = Input.GetAxis("Mouse Y");

                if (x != 0 || y != 0)
                    RotateView(x, y);
            }
        }
        Follow();

 
    }

 
    float touchSpeed=0.2f;
    public float speed = 80;
    public float smoothTime = 3;
    private void RotateView(float x, float y)
    {
        x *= speed * Time.deltaTime;
        //transform.Rotate(0, -x, 0, Space.World); 
        transform.Rotate(Vector3.up, -x, Space.World);

        y *= speed * Time.deltaTime;
        transform.Rotate(Vector3.right, y, Space.Self);

    }

    public void Follow()
    {
        myCam.rotation = Quaternion.Slerp(myCam.rotation, transform.rotation, smoothTime * Time.deltaTime);
    }

}

将MainCamera 添加到脚本上 就可以实现旋转内部空间了。

  • 缩放画面
    在MainCamera 上添加ZoomCam.script脚本 就可以实现缩放画面的逻辑。

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

public class ZoomCam : MonoBehaviour {
    public Camera myCam;
      bool canMouse = true;
    void Update () {
        if (Input.touchCount == 1)
        {
            if (Input.GetTouch(0).phase == TouchPhase.Began)
            {     
                canMouse = false;
            }
           
        }
        if(canMouse)
        {
            if (Input.GetAxis("Mouse ScrollWheel") < 0)
            {
                myCam.fieldOfView += 2;

                myCam.fieldOfView = myCam.fieldOfView > 90 ? 90 : myCam.fieldOfView;
            }
            if (Input.GetAxis("Mouse ScrollWheel") > 0)
            {
                myCam.fieldOfView -= 2;
                myCam.fieldOfView = myCam.fieldOfView < 30 ? 30 : myCam.fieldOfView;

            }
        }   
    }
    
}

image.png

在房子的右上角添加了指南针 。实现的逻辑是在canvas上添加

image.png

然后添加脚本把MainCamera 关联上即可。

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

public class Pointer : MonoBehaviour {

    public RectTransform rectTransform;
    public Transform camTransform;
    void Update()
    {
        rectTransform.eulerAngles = new Vector3(0, 0, -camTransform.eulerAngles.y);

    }
}

  • 切换不同的房间

     

    image.png

     

    这些图标 对应都是一个个button 在点击事件中 可以去切换到不同的场景中。
    以去餐厅为例:
    他的点击时间onClick 执行脚本 去对应切换不同的区间

     

    image.png


    上图可以看出 在模型Sphere01 下面挂载脚本 对应去执行ChangeRoom02方法。

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

public class ChangeRoom : MonoBehaviour {
    public Material myMat;

    public Texture room01;
    public Texture room02;
    public Texture room03;

    public Action OnEnterRoom01;
    public Action OnEnterRoom02;
    public Action OnEnterRoom03;

    public Action OnLeaveRoom01;
    public Action OnLeaveRoom02;
    public Action OnLeaveRoom03;

    public void Start()
    {
        ChangeRoom01();
    }

    public void ChangeRoom01()
    {
        myMat.mainTexture = room01;
        if(OnEnterRoom01!=null)
        {
            OnEnterRoom01();
        }
        if (OnLeaveRoom02 != null)
        {
            OnLeaveRoom02();
        }
        if (OnLeaveRoom03 != null)
        {
            OnLeaveRoom03();
        }
    }
    public void ChangeRoom02()
    {
        myMat.mainTexture = room02;
        if (OnEnterRoom02 != null)
        {
            OnEnterRoom02();
        }
        if (OnLeaveRoom01 != null)
        {
            OnLeaveRoom01();
        }
        if (OnLeaveRoom03 != null)
        {
            OnLeaveRoom03();
        }

    }
    public void ChangeRoom03()
    {
        myMat.mainTexture = room03;
        if (OnEnterRoom03 != null)
        {
            OnEnterRoom03();
        }
        if (OnLeaveRoom01 != null)
        {
            OnLeaveRoom01();
        }
        if (OnLeaveRoom02 != null)
        {
            OnLeaveRoom02();
        }
    }
}

整体的逻辑都梳理完了。其实最重要的就是再一个球形模型下挂载不同房间的全景贴图 使相机再模型的中间 转动相机即可切换不同的视角。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 实战【360VR 看房】 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • halfShader 模型切割

    Shader Unlit halfShader Properties Diffuse Diffuse Color 1 1 1 1 MainTex Texture 2D white StartCutoff StartCutoff Range
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • Linux系统快照一键备份恢复、不同机器恢复、增量备份恢复

    Linux系统快照一键备份恢复 不同机器恢复 增量备份恢复 前言 由于前段时间在做一个自动化部署开发环境的项目需要重复安装多种服务以及中间件 xff0c 但是生产环境的服务器不像自己的虚拟机可以使用快照 xff0c 如果直接操作会导致每次测
  • NSFileManager的常用操作

    1 删除文件 NSFileManager fn 61 NSFileManager defaultManager fn removeItemAtPath filePath error nil 判断文件是否存在 if NSFileManager
  • 数据压缩 —— 一种基于LZ4算法的硬件加速的快速无损压缩

    文章目录 背景LZ4 分析令牌 xff08 Token xff09 字面量长度 xff08 Literal Length xff09 偏移量 xff08 Offset xff09 匹配长度 xff08 Match Length xff09
  • Spring AOP 是什么?

    声明 xff1a 请勿直接抄袭 xff0c 翻译不易 xff0c 转载请注明 https blog csdn net Big Rotor article details 88765984 xff0c 谢谢 文章目录 什么是面向切面编程使用
  • Hazel引擎安装踩坑

    git地址 GitHub TheCherno Hazel Hazel Engine 安装vulkan sdk LunarXchange 修改系统变量 把py的变量放在商店上面 错误 MSB8020 无法找到 v143 的生成工具 平台工具集
  • Linux 环境下编译 freeRDP

    RDP xff1a 远程桌面协议 xff08 Remote Desktop Protocol xff09 xff0c 是一个多通道的协议 xff0c 可以让客户端或称 本地电脑 连上提供微软终端机服务的电脑 xff08 服务器端或称 远程电
  • 第十一节:元组 Tuple3

    创建元组 span class hljs title scala span gt val t 61 span class hljs number 1 span span class hljs string 34 hello 34 span
  • window下rust的安装

    删除rustup重装 环境变量配置 xff1a 通过RUST HOME指定rustup的安装目录 通过CARGO HOME指定cargo的安装过目录 再次运行rustup init文件 观察到安装界面的rustup路径和和cargo已经发生
  • Vue中如何使用websocket

    1新建文件夹 socket js 目录自己看着办 可以放lib或者utils import Vue from 39 vue 39 const ReconnectingWebSocket 61 require 39 64 api webSoc
  • Unity 场景鼠标移动、旋转

    using System Collections using System Collections Generic using UnityEngine public class CameraMove MonoBehaviour privat
  • unity 相机鼠标控制移动旋转缩放

    using System using System Collections using System Collections Generic using UnityEngine public class CameraCtrl02 MonoB
  • vr全景图如何制作?vr制作用什么软件?(详细教程)

    一 vr制作用什么软件 xff1f 1 图片处理软件 Photoshop xff08 PS xff09 全称叫Adobe Photoshop Photoshop主要处理以像素所构成的数字图像 使用其众多的编修与绘图工具 xff0c 能够有效
  • OpenGL 实现大眼和瘦脸

    借鉴博客 xff1a iOS原生框架Vision实现瘦脸大眼特效 仿抖音特效相机之大眼瘦脸 本文达成效果如下图 xff1a 效果图 106个特征点如下图 特征点 原理解析 主要是以下3点 xff0c 具体请前往参考博客和原理解析 1 圆内放
  • Unity c#脚本更换物体材质球

    using UnityEngine public class TestMaterial MonoBehaviour public Material test M public Material test B void Update if I
  • 史上最全的 Java 高质量博客与网站推荐(国内篇)

    阅读文本大概需要 6 66 分钟 前言 我最近在系统整理一些 Java 后台方面的面试题和参考答案 xff0c 有找工作需求的童鞋 xff0c 欢迎关注我的 Github 仓库 xff0c 如果觉得不错可以点个 star 关注 xff1a
  • unity 打包webGL本地打不开,就算配置了iis设置了浏览器还是打不开的解决方法。

    我打包了unity的webgl但是浏览器打不开 xff0c 于是下载了火狐根据网上的相关教程 xff0c 这里有一篇比较好的 xff1a 火狐浏览器Firefox在本地打开Unity3D开发的webGL的项目 知乎 zhihu com xf
  • Unity WebGL打包后怎么运行(火狐配置)

    打包后出现以下 xff1a 其中两个文件夹都是项目资源 xff0c 只有index html才是打开Web运行的页面 使用火狐浏览器 Firefox浏览器 Firefox的用户请在浏览器的地址栏输入 about config xff0c 回
  • 720全景图在线下载

    简单的下载全景图的网站 全景管家 第一步 需要打开全景管家 xff1a https krpano scenegram cn 把合适的全景项目的链接复制到输入框中 xff0c 点击箭头进行搜索 第二步 点击 解析全景图 按钮进行解析 xff0
  • Unity3D物体点击事件实现方式

    此篇博客将通过两种方式实现场景中物体的点击事件 准备工作 xff1a 1 给场景添加EventSystem xff1a 选择Hierarchy窗口 Create UI Event System 2 给摄像机添加Physics Raycast
  • Unity 实战【360VR 看房】

    360全景VR看房 xff0c 可以实现不同角度切换视角 xff0c 下面为运行效果 07d5f29d50af8b633083920e6cde0619 gif 360 全景的逻辑其实很简单 xff0c 主要的思路是采用一个球体模型 xff0