vr课程设计大纲docx.docx
《vr课程设计大纲docx.docx》由会员分享,可在线阅读,更多相关《vr课程设计大纲docx.docx(14页珍藏版)》请在冰豆网上搜索。
vr课程设计大纲docx
vr课程设计大纲
湖北大学本科课程设计
题目VR鬼屋游戏设计
姓名吴为学号2014221104110062
专业年级14级信息安全
指导教师范清风职称
2016年12月15日
1、demon1下载
2、demon2下载
一、设计任务
设计一款高质量,互动性强,沉浸式,可以上架的VR鬼屋游戏。
产品包括完整游戏产品、产品代码、产品设计思路、开发流程。
最终完成学习VR技术的任务。
二、背景介绍以及产品概要
2016被称为VR元年。
随着VR技术极速发展,大学生也应该与时俱进,不断学习新知识,故于11月初借助设计一款产品,开始VR的学习之旅。
产品是一个VR鬼屋游戏,玩家在鬼屋里进行探索解密。
游戏场景是一个别墅,包括室内室外。
三、核心用户分析
游戏产品的服务对象为爱好恐怖游戏的青年玩家,作为这一用户群体,乐于接受新鲜事物,敢于探索。
用户举例:
姓 名:
王大
年 龄:
21岁
职 业:
学生
爱 好:
游戏,恐怖电影
讨 厌:
购物,家务
每日活动:
7:
00起床8:
00上课11:
30下课
13:
00午睡14:
00做作业,学习16:
00游戏
20:
00看恐怖电影23:
00睡觉
对于以上用户分析知道,这类用户存在广泛。
本产品受众广泛,隐藏大批用户,产品具有一定市场空间,定位于此类用户,接着进入开发环节。
四、MVP(核心玩法)
背景环境:
一个年代久远的破旧屋子(当前项目主要是一楼大厅)
故事梗概:
玩家打开屋子大门,进入之后来到阴森的大厅,门随之关闭无法打开;大厅的蜡烛绿闪烁着色火焰;窗帘随着风飘动,餐桌上整齐的摆放着餐盘还有刀叉,盘子里面有死老鼠、心脏;桌子上还有打火机和一只蜡烛;玩家伴随着自己的脚步声,探索着黑漆漆的大厅……
随着咚的一声,午夜12点到了,窗户啪的一声被妖风吹开,火盆的火、蜡烛全被吹灭了。
(桌子上的打火机和蜡烛有提示)玩家看见了打火机和蜡烛,当玩家用打火机点亮蜡烛的一瞬间,玩家面前出现了贞子的脸(贴脸杀),贞子快速的后退消失了;这时候玩家看到地面上有残肢断脚,听到了滴血的声音,玩家跟随血滴往上看,发现天花板下面吊着一堆尸体。
过几秒之后屋里随机生成一个发光的钥匙,同时二楼门也有提示,玩家拿着钥匙开启二楼门开启下一次恐怖体验……
具体模型:
1个大房子(本次项目针对一间房间);1扇门;1扇窗;1个窗帘;二楼1扇门;1双手(代替手柄);2个火炬,2个火炬光;1张桌子;6个盘子,6副刀叉;3个心脏;9只死耗子;10具尸体;1个断手,1个断脚;1摊血液;1只猫;5+1只蜡烛,1个打火机;1只钥匙。
对应音效:
脚步声;风声;钟声;开门声;滴血声;背景音乐;窗户关闭声;物体坠落地板声;呼吸声;心跳声
五、开发流程以及分工
Agender:
第一周:
游戏故事设定,确定美术风格,经典影视游戏作品分析研究,基本场景搭建,熟悉unity3D基本功能
第二周:
细化游戏机制,情节,梳理逻辑,美工丰富场景物件,程序员尝试基本交互
第三周:
美工完成贴图,程序员测试式编程,完成demo1.0
第四周:
美工完善灯光,材质,程序员完成所有交互完成demon2.0
第五周:
用户测试,根据反馈修改游戏,解决bug,美工进一步优化huanj
第六周:
完成beta版
ROLES:
PM:
吴为
美工:
周江峰章炜松
程序:
吴为蔡敏
六、主要思路介绍
1、环境声音:
环境声音的切换采用事件触发。
当用户在屋外时候播放屋外环境音效,当进入第一个触发器(在屋前的台阶),切换上台阶声音。
当进入第二个触发器(在屋子的门口),切换屋内音效。
(触发器代码见八、主要代码介绍)
2、屋外喷泉:
屋外喷泉采用视角触发事件,当视角到达触发器(在喷泉上),播放惊悚声音。
(触发器代码见八、主要代码介绍)
3、开门事件:
开门脚本采用VRTK插件解决
4、自动关门:
自动关门采用触发器触发关门,关门角度计算得到。
(触发器代码见八、主要代码介绍)
5、钟声:
钟声采用时间和触发器同时控制,时间运行开始时间在进入门口开始计时。
时间控制钟声发出。
(时间代码见八、主要代码介绍;钟声代码见八、主要代码介绍)
6、脚步声:
脚步声的控制根据手柄按钮,触发播放和停止。
(播放代码见八、主要代码介绍)
7、窗帘飘动:
由另一程序员实现。
8、挂画掉落:
由另一程序员实现。
9、风吹灭蜡烛:
由另一程序员实现。
10、以及其他思路
七、每周报告
第一周
姓名
每周工作内容
项目进度
下周工作计划
PM
吴为
明白鬼屋恐怖点,组员分配任务,搞清游戏逻辑,游戏情节设计
大部分场景搭建成功,unity基本功能学习,简单VRTK学习,简单交互实现,刚体,触发器学习。
美工,程序尚未合并
深化恐怖情节学习,恐怖情节设定,组内成员调节,情节继续设定,逻辑梳理
美工
周江峰
房间整体结构设计,大场景搭建
室内环境优化,完成贴图,材质。
章炜松
音效收集,素材收集
音效的整理,灯光的调节整理
程序
吴为
插件的学习,实现走动,物体抓取,碰撞体的学习,触发器的学习,手柄功能的学习,坐标系的学习。
鼠标跟随,开关灯
继续深化学习组件的学习,脚本的添加,脚本,组件的相互控制,脚本控制组件运行关闭。
蔡敏
手动和自动开关门,铰链学习,碰撞体触发学习,自动触发窗户开关,触发木马自己摇动,开关门实现过程,各种碰撞体的使用实施,加深音频的学习
学习unity的大部分功能,深化学习C#语言,unity的灯光学习
汇总日期:
11月13日报告人:
吴为
第二周
姓名
每周工作内容
项目进度
下周工作计划
PM
吴为
调节监督组员进度,完善游戏逻辑,情节,深化理解游戏核心玩法,游戏逻辑梳理
触发事件添加,场景基本成型,逻辑事件持续添加中。
用户调研,修改逻辑,优化用户体验,项目任务分配,组员调节
美工
周江峰
完成室内环境,室内物品摆放,完成贴图,材质。
修改物品。
添加修改物体属性,室外环境搭建,物品材质优化,贴图优化,收集整理游戏物品
章炜松
音效收集,素材收集,法线贴图灯光控制,
完成小部件修改,音效收集整理,环境控制
程序
吴为
完成脚本控制组件的,走动脚步声的触发,窗帘的飘动,灯光的添加,视角的触发,游戏全局时间的控制,位置触发的学习,脚本深化学习,物体追踪,利用时间控制触发事件,了解点积差积
游戏逻辑实现(钟声,窗户开关,画册位置改变,声音的触发切换,多种逻辑事件联动)
蔡敏
学习利用关节joint去开关门,以及上下楼梯过渡的动态效果,以及unity中的Navigation网格导航基本使用,以及mecanima动画状态机,开关门动态过渡效果实现,以及unity中简单音频学习实现,灯光的基本使用
根据速度,发出脚步声,接着开关门实现过程,以及各种碰撞体的使用实现,加深对音频的学习
汇总日期:
11月20日报告人:
吴为
第三周(会继续添加)
八、主要代码介绍
1、视角触发声音代码:
usingUnityEngine;
usingSystem.Collections;
publicclassNewBehaviourScript:
MonoBehaviour{
//publicGameObjectobj;
//publicGameObjectobj1;
privateboolb=true;
//privateVector3normal=newVector3(10,10,10);
publicboolisRendering=false;
privatefloatlastTime=0;
privatefloatCurTime=0;
//Usethisforinitialization
voidStart(){
}
//Updateiscalledonceperframe
voidUpdate(){
// Debug.Log("角度"+Vector3.Dot(transform.forward.normalized, obj.transform.position.normalized));
// Debug.Log("距离"+Vector3.Distance(obj.transform.position,transform.position));
isRendering=CurTime!
=lastTime?
true:
false;
lastTime=CurTime;
if(isRendering&&b){
run();
}
}
voidOnWillRenderObject(){
CurTime=Time.time;
}
//创建cube
/*
voidrun(){
GameObjectcube=GameObject.CreatePrimitive(PrimitiveType.Cube);
//cube.GetComponent().position=(GameObject.Find("Camera")).GetComponent().position+normal*0.1f;
cube.GetComponent().position=-((GameObject.Find("Camera")).GetComponent().position)+2f*((GameObject.Find("lazhu")).GetComponent().position);
Debug.Log("asssssssssssssssssssssssssss");
b=false;
}
*/
//改变鬼的位置
voidrun(){
GameObject.Find("aa").GetComponent().position=-((GameObject.Find("Camera")).GetComponent().position)+2f*((GameObject.Find("lazhu")).GetComponent().position);
}
}
2、物体抓取代码
usingUnityEngine;
usingSystem.Collections;
[RequireComponent(typeof(SteamVR_TrackedObject))]
publicclassDragObjects:
MonoBehaviour{
//追踪设备
SteamVR_TrackedObjecttrackobject;
//监听输入事件
SteamVR_Controller.Devicedevice;
//Usethisforinitialization
voidAwake(){
trackobject=GetComponent();
}
voidFixedUpdate(){
device=SteamVR_Controller.Input((int)trackobject.index);
}
//Updateiscalledonceperfram
voidOnTriggerStay(Collidercollider)
{
if(device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("TriggerDown");
//collider.attachedRigidbody.isKinematic=true;
collider.attachedRigidbody.useGravity=false;
collider.gameObject.transform.SetParent(gameObject.transform);
}
if(device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("TriggerUp");
//collider.attachedRigidbody.isKinematic=false;
collider.attachedRigidbody.useGravity=true;
collider.gameObject.transform.SetParent(null);
tossObject(collider.attachedRigidbody);
//tossObject(collider.attachedRigidbody);
}
}
voidtossObject(Rigidbodyrigidbody)
{
rigidbody.velocity=device.velocity;
rigidbody.angularVelocity=device.angularVelocity;
}
}
3、钟声触发
usingUnityEngine;
usingSystem.Collections;
publicclassbofang:
MonoBehaviour{
publicGameObjectobj;
privateVector3f1;
privateVector3f2;
privatestaticfloat t=0;
publicAudioClip[]source;
privateAudioSourceAs;
//Usethisforinitialization
voidStart(){
As=this.GetComponent();
}
//Updateiscalledonceperframe
voidUpdate(){
f1=transform.position;
t+=Time.deltaTime;
if(t>1){
f2=transform.position;
t=0;
}
floatdis=Vector3.Distance(f1,f2);
//floatf=Vector3.Distance(obj.transform.position,transform.position);
if(dis>0.8){
play();
}
}
voidplay(){
As.clip=source[1];
As.Play();
f2=f1;
}
}
4、手柄控制走路发出脚步声
usingUnityEngine;
usingSystem.Collections;
usingVRTK;
publicclassjiaobusheng:
MonoBehaviour{
publicGameObjectoutGround;
publicGameObjectlouti;
publicGameObjectinground;
//Usethisforinitialization
voidStart(){
outGround.GetComponent().enabled=false;
}
voidUpdate()
{
VRTK_ControllerEventsevents=GetComponent();
events.TouchpadPressed+=newControllerInteractionEventHandler(OnWalk);
VRTK_ControllerEventsevents1=GetComponent();
events1.TouchpadReleased+=newControllerInteractionEventHandler(DontWalk);
}
privatevoidOnWalk(objectsender,ControllerInteractionEventArgsevents){
outGround.GetComponent().enabled=true;
}
privatevoidDontWalk(objectsender,ControllerInteractionEventArgsevents)
{
outGround.GetComponent().enabled=false;
}
}
usingUnityEngine;
usingSystem.Collections;
publicclasslightCDon:
MonoBehaviour{
privatestaticfloattime=0;
public GameObject lightc=null;
//Usethisforinitialization
voidStart(){
}
voidUpdate(){
time+=Time.deltaTime;
intcout=(int)(time%3);
switch(cout){
case0:
lightc.SetActive(true);
break;
case1:
lightc.SetActive(false);
break;
case2:
lightc.SetActive(true);
break;
}
}
//Updateiscalledonceperframe
}
其他代码会补充
九、产品介绍
1、产品信息
产品名称 :
VR鬼屋
产品性质 :
VR产品
产品分类 :
恐怖游戏
主要开发工具:
unity
开发语言 :
C#
运行平台 :
steamVR
2、用户反馈调查
背景:
当游戏产品(demo1)的大体交互被设计出来,产品遇到了瓶颈。
产品难于加入更多的交互,或者是加入交互具有不确定性。
目标
1、对现有游戏产品的故事、环境、灯光,、音效、交互进行调研询问
2、对未来将要加入的或者将要改变的故事、环境、灯光,、音效、交互进行调研询问
3、根据调研情况进行下一步改进。
方法
在教室内,让同学试玩游戏,体验完游戏后进行询问,同时安排组员进行记录。
问题:
1、 你是否注意到脚步声的改变
2、 你是否注意到看着屋外泉水会发出惊悚的声音
3、 你是否注意到屋外路灯会闪烁
4、 你是否注意到环境音效的改变
5、 你是否注意到大门在进入之后被关上了
6、 你是否注意到屋里蜡烛会在钟声响起的同时熄灭
7、 你是否注意到油画掉落
8、 你是否注意到酒桶滚动
9、 你希望屋里的灯光更加明亮还是更加昏暗,来使游戏更有感觉
10、你是否希望加入背景音乐
11、你是否眩晕
12、你觉得移动速度快还是慢
13、你对桌子上摆放的东西的看法
14、你觉得屋里玻璃多还是少
15、你希望屋里的灯光偏什么颜色
16、你对游戏的故事有什么建议