# Unity疫情展馆 **Repository Path**: del_cideo/room ## Basic Information - **Project Name**: Unity疫情展馆 - **Description**: 疫情展馆漫游,视频播放,图片轮播,答题 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-03-21 - **Last Updated**: 2024-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 展馆漫游项目 `wasd` 键控制人物移动漫游,`space`键跳跃,鼠标右键转动视角观察,鼠标左键进行操作。 - 图片展示区域:单击图片可以弹出图文介绍 - 视频展示区域:单击可播放视频 - 图片轮播区域:单击切换图片显示,上一张、下一张 - 答题区:可以进行答题互动 - 游戏体验区:玩互动小游戏 - 模型展示区:点击模型可以自由观察3D模型 - 导航图:点击相关地点进行跳转。 - 音乐播放器:听歌切歌 - 小地图:展示缩略图 - 小导游:可以进行导览提示 - ....... ## 资源导入导出 资源 ——> 导出包 可以把项目里面的所有东西打包成一个 `.unitypackage`为后缀名的文件。 ## character controller:角色控制器 给空物体添加角色控制器,充当玩家。将摄像机添加成玩家的子物体,充当眼睛。 找到方向,然后调用`CharacterController`组件的`Move`方法就能进行移动。 ## 移动使用:Input Manager 编辑 ——> 项目设置 ![image-20220420145712839](noteimg/1.png) 轴向Axis 水平Horizontal:a为负值,d为正值、小箭头left、right... 垂直Vertical:w、s 得到水平和垂直轴向上按键后的返回的值。 得到方向 ```c# // Input.GetAxis("Horizontal")返回括号内轴向的值 myDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); // transform.TransformDirection()从自身坐标转化为世界坐标 myDirection = transform.TransformDirection(myDirection); ``` 将`ScrollBar` 组件添加成(拖动到) `Scroll Rect`的 垂直滚动条,作为滚动状态控制器。 ## Raw Image 无损图像(原始图像) 可用于播视频 给他添加播放视频组件:`video player` `using UnityEngine.Video; // 播放视频要引入头文件` ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Video; using UnityEngine.UI; public class VideoDisplay : MonoBehaviour { private RawImage raw; // RawImage组件 private VideoPlayer video; // VideoPlayer组件 // Start is called before the first frame update void Start() { raw = GetComponent(); video = GetComponent(); } // Update is called once per frame void Update() { raw.texture = video.texture; // 让video的材质给image的材质,就能显示图像了 } } ``` ## video player渲染模式设置全屏 渲染模式摄像机近平面即为全屏,记得给**摄像机** ![image-20220427110058330](noteimg/2.png) ```c# if (Input.GetKey(KeyCode.F)) // 按F键视频全屏 { video.renderMode = VideoRenderMode.CameraNearPlane; // 渲染模式为摄像机近平面 } if (Input.GetKey(KeyCode.Escape)) // ESC 退出全屏模式 { video.renderMode = VideoRenderMode.RenderTexture; // 渲染器纹理 } // 视频静音 video.SetDirectAudioMute(0, true); ``` ## Button.interactable 为 `false` 即按钮不可点击,按钮置灰,为 `true` 恢复状态 ## 读取JSON文件 ### 定义数据模型类 ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] // 序列化 public class dataModel { public int[] number; // 题号字段 public string[] title; // 题目 public string[] A; // A选项 public string[] B; public string[] C; public string[] D; public string[] answer; //答案 } ``` ### 对应的JSON文件 ```json { "number": [1, 2, 3, 4, 5], "title": ["2+5=?", "中国的首都在哪里?", "How old are you?", "国庆节是哪一天?", "2*3=?"], "A": ["7", "上海", "18", "10月1日", "9"], "B": ["2", "广州", "20", "7月1日", "6"], "C": ["10", "北京", "21", "6月1日", "5"], "D": ["3", "杭州", "22", "1月1日", "1"], "answer": ["A", "C", "D", "A", "B"] } ``` ### 读取赋值 ```c# dataModel obj; // 数据模型对象 // Start is called before the first frame update void Start() { // JsonUtility.FromJson<数据模型>(json字符串) // 将从JSON中读取的字符串转换为对应模型对象 obj = JsonUtility.FromJson(LoadFromJson()); } private string LoadFromJson() // 从JSON文件中读取数据 { StreamReader reader; string json; //读取到的字符串 if (!File.Exists(Application.dataPath +"/data/question.json")) { print(Application.dataPath + "/data/question.json" + " 文件不存在"); // 没有找到文件 return null; } reader = new StreamReader(Application.dataPath + "/data/question.json"); // 分配读取文件的路径 json = reader.ReadToEnd(); // 重头读到尾,返回字符串类型 return json; } ```