CN114931746B - 基于笔式和触屏交互的3d游戏的交互方法、装置及介质 - Google Patents

基于笔式和触屏交互的3d游戏的交互方法、装置及介质 Download PDF

Info

Publication number
CN114931746B
CN114931746B CN202210518203.4A CN202210518203A CN114931746B CN 114931746 B CN114931746 B CN 114931746B CN 202210518203 A CN202210518203 A CN 202210518203A CN 114931746 B CN114931746 B CN 114931746B
Authority
CN
China
Prior art keywords
module
game
scene
touch screen
pen
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210518203.4A
Other languages
English (en)
Other versions
CN114931746A (zh
Inventor
冯桂焕
杨雨佳
吴雨晴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202210518203.4A priority Critical patent/CN114931746B/zh
Publication of CN114931746A publication Critical patent/CN114931746A/zh
Application granted granted Critical
Publication of CN114931746B publication Critical patent/CN114931746B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/20Input arrangements for video game devices
    • A63F13/21Input arrangements for video game devices characterised by their sensors, purposes or types
    • A63F13/214Input arrangements for video game devices characterised by their sensors, purposes or types for locating contacts on a surface, e.g. floor mats or touch pads
    • A63F13/2145Input arrangements for video game devices characterised by their sensors, purposes or types for locating contacts on a surface, e.g. floor mats or touch pads the surface being also a display device, e.g. touch screens
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/40Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment
    • A63F13/42Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment by mapping the input signals into game commands, e.g. mapping the displacement of a stylus on a touch screen to the steering angle of a virtual vehicle
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/10Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by input arrangements for converting player-generated signals into game device control signals
    • A63F2300/1068Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by input arrangements for converting player-generated signals into game device control signals being specially adapted to detect the point of contact of the player on a surface, e.g. floor mat, touch pad
    • A63F2300/1075Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by input arrangements for converting player-generated signals into game device control signals being specially adapted to detect the point of contact of the player on a surface, e.g. floor mat, touch pad using a touch screen
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/63Methods for processing data by generating or executing the game program for controlling the execution of the game in time
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/66Methods for processing data by generating or executing the game program for rendering three dimensional images

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Human Computer Interaction (AREA)
  • User Interface Of Digital Computer (AREA)
  • Position Input By Displaying (AREA)

Abstract

本发明公开一种基于笔式和触屏交互的3D游戏的交互方法、装置及介质,所述装置包括场景界面模块、交互模块和建模模块;场景界面模块用于场景与界面UI控制,交互模块用于根据笔的选择、拖拽和/或触屏的z轴深度调距、旋转手势操纵场景内的物体,建模模块用于建模与场景的保存。交互模块是该装置中的一个重要模块,通过交互模块实现将笔式交互与触屏交互相结合,应用于游戏里3D物体的操作中,不仅利用了笔式交互精确、不易疲劳的优点,而且利用了触屏交互方便快速、可拓展性高的优点,大大提高了3D物体的操作效率。

Description

基于笔式和触屏交互的3D游戏的交互方法、装置及介质
技术领域
本发明属于人机交互技术领域,更具体地,涉及一种基于笔式和触屏交互的3D游戏的交互方法、装置及介质。
背景技术
笔式交互作为纸笔的隐喻,学习成本低,电子笔尖较为细小,能够实现高精度的输入,适合进行书写绘画与精细的操作,并且不需要手指与屏幕进行接触,避免了手指与屏幕间的摩擦,不易疲劳。但笔式交互必须借助笔式设备,且通常只能输入笔尖的二维坐标信息,输入带宽较低,且通常只能通过惯用手进行笔输入。
触屏交互用手指即可完成,不需依赖其他输入设备,可以进行复杂的多指输入与手势输入,输入带宽高,能够拓展极为丰富的手势从而实现更多的功能,更具趣味性,并且触屏交互具有相当的并行输入能力。但因手指面积较大,触屏交互通常输入精度低,难以做到精细输入,存在肥手指问题,在触屏操作过程中容易产生目标遮挡,并且手指与屏幕会产生摩擦,容易使用户感到疲劳。
综上,笔式交互与触屏交互存在互补性,将这两种交互方式进行结合,能够取长补短,实现更理想的交互效果。虽然现如今市场上的触屏游戏多种多样,但笔式交互游戏较少且多为绘画类游戏,如何将触屏类游戏将笔式交互和触屏交互相结合应用到3d触屏类游戏中以提升用户的游戏体验是目前亟需解决的一大难题。
发明内容
提供了本发明以解决现有技术中存在的上述问题。因此,需要一种基于笔式和触屏交互的3D游戏的交互方法、装置及介质,将触屏类游戏将笔式交互和触屏交互相结合应用到3d触屏类游戏中以提升用户的游戏。
根据本发明的第一方案,提供了一种基于笔式和触屏交互的3D游戏的交互方法,所述方法包括:
在Unity商城中挑选合适的资源、建立并调整每一关的游戏场景;所述游戏场景包括物体、地板和礼物盒;
获取笔或触屏输入,识别输入手势的产生,在手势发生、持续或停止时调用相应的处理函数,来取消物体选择、选择触屏手势针对游戏物体或整个镜头画面;
根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放;
通过改变物体的重力属性使得笔拖拽时不受重力,利用射线系统画出游戏物体的竖直投影线以体现物体深度,使用HighlightingSystem插件使被选择的物体产生发光效果;
利用碰撞检测判断物体落地,利用触发检测判断物体接触礼物盒,并做出如下处理:
在地面上施加碰撞检测来判断物体是否落地,若落地则使血量-1,当血量为0时,弹出游戏失败窗口;
在礼物盒上施加触发检测,判断物体是否以不被笔拖拽的状态接触礼物盒,若是,则保持接触1s后开启倒计时,保持平衡3s后弹出通关窗口并根据输入手势确定是否切换游戏场景,在收到切换游戏场景的输入手势后,切换至对应的游戏场景;
在游戏场景里添加一个带有若干AudioSource的音效播放器,循环播放背景音乐,在点击UI、选择物体、物体落地、成功通关或接触礼物盒时播出对应音效。
进一步,根据在游戏场景后方设置的隐形平面来接收触屏输入,设置两种触摸模式,分别为触屏针对所选择的物体和触屏针对整个画面。
进一步,所述根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放包括:根据获取的输入手势对游戏场景进行移动或缩放,根据二指捏放手势控制物体的远近调节,根据单指滑动手势控制物体沿x轴或y轴旋转。
进一步,所述利用射线系统画出游戏物体的竖直投影线以体现物体深度,包括:在被选中的物品下方竖直射出一根在游戏窗口不显示的射线,该射线与下方的物体形成一个交点,然后画出一根从被选中的物体的中心连到该点的线,该线用于指示被选中的物品所在的深度。
进一步,所述在地面上施加碰撞检测来判断物体是否落地,若落地则使血量-1,包括:在游戏场景中的物体和地板加上网格碰撞器以使所述物体和地板具有碰撞功能,并在所地板上添加碰撞检测组件,进行碰撞检测,若检测到物体碰到地板,使该物体失效,并令该物体不能再被操作,同时让血量-1。
根据本发明的第二方案,提供了一种基于笔式和触屏交互的3D游戏的交互装置,所述装置包括场景界面模块、交互模块和建模模块;场景界面模块用于场景与界面UI控制,交互模块用于根据笔的选择、拖拽和/或触屏的z轴深度调距、旋转手势操纵场景内的物体,建模模块用于建模与场景的保存;
所述场景界面模块包括动画模块、场景模块、UI模块,所述场景模块包括场景搭建子模块和场景跳转子模块;
所述场景搭建子模块被配置为:在Unity商城中挑选合适的资源、建立并调整每一关的游戏场景,使用灯光渲染技术增加游戏场景的美观度,配置场景的初始参数;
所述场景跳转子模块被配置为:使用Unity的场景加载技术,控制游戏关卡的选择与跳转,并且设置一个参数来记录已通关的关卡与未解锁的关卡;
所述UI模块用于设计与绘制游戏场景内的2D界面,以及管理和所述2D界面有关的背包、数值系统、游戏流程;所述2D界面包括按钮和倒计时条;所述UI模块包括背包子模块、数值系统子模块和游戏流程控制子模块;
所述背包子模块被配置为:负责背包的用户界面设计、游戏物体的生成与各游戏物体的计数;所述背包是最初存放对应关卡内游戏物体的空间,当接收到背包打开指令时,生成相应的游戏物体;
所述数值系统子模块被配置为:记录并控制各个游戏关卡的时间限制倒计时、血量、通关星级,并设计相应的展示UI;
所述游戏流程控制子模块被配置为:控制游戏关卡的返回、暂停、重新开始功能,并设计相应的UI;
所述动画模块被配置为:在游戏开头制作运镜动画,使用Unity中的Animation系统,通过每一帧摄像头的移动来营造视角从远拉近的效果;
所述交互模块包括笔+触屏操纵模块、碰撞与触发检测模块、音效模块,其中笔+触屏操纵模块包括输入获取子模块、物体或镜头变换子模块、辅助子模块,碰撞与触发检测模块包括碰撞检测子模块和触发检测子模块;
所述输入获取子模块被配置为:获取笔或触屏输入,识别输入手势的产生,在手势发生、持续或停止时调用相应的处理函数,通过UI来取消物体选择、选择触屏手势针对游戏物体或整个镜头画面;
所述物体或镜头变换子模块被配置为:根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放;
所述辅助子模块被配置为:通过改变游戏物体的重力属性使得笔拖拽时不受重力,利用射线系统画出游戏物体的竖直投影线以体现物体深度,使用HighlightingSystem插件使被选择的物体产生发光效果;
所述碰撞与触发检测模块被配置为:利用碰撞检测判断物体落地,利用触发检测判断物体接触礼物盒,并做出相应处理;
所述碰撞检测子模块被配置为:在地面上施加碰撞检测来判断物体是否落地,若落地则告知场景界面模块的数值系统子模块,使血量-1;
所述触发检测子模块被配置为:在礼物盒上施加触发检测,判断物体是否以不被笔拖拽的状态接触礼物盒,若是,则保持接触1s后开启倒计时,保持平衡3s后通关;
所述音效模块被配置为:在游戏场景里添加一个带有若干AudioSource的音效播放器,循环播放背景音乐,在点击UI、选择物体、物体落地、成功通关或接触礼物盒时播出对应音效;
所述建模模块包括模型建立和渲染模块、场景存档模块,其中模型建立和渲染模块用于室外场景中所用的模型的建立与渲染,以及场景的保存,包括模型建立子模块和模型渲染子模块,场景存档模块用于将游戏场景内容进行持久化保存,以及将保存的场景内容重新加载,包括场景保存子模块和场景加载子模块;
所述模型建立子模块被配置为:通过3D建模及模型处理软件建立模型;
所述模型渲染子模块被配置为:利用3D渲染技术,对所建立的模型进行渲染优化、光影处理;
所述场景保存子模块被配置为:用数据序列化的方式将对象内容以数据流的方式持久化;
所述场景加载子模块被配置为:读取文件夹中保存的数据,将数据流解析回原本的游戏对象并加载到场景中。
进一步,所述物体或镜头变换子模块被进一步配置为:通过场景的主镜头,根据获取的输入手势对游戏场景进行移动或缩放,根据二指捏放手势控制物体的远近调节,根据单指滑动手势控制物体沿x轴或y轴旋转。
进一步,所述辅助子模块被进一步配置为:在被选中的物品下方竖直射出一根在游戏窗口不显示的射线,该射线与下方的物体形成一个交点,然后画出一根从被选中的物体的中心连到该点的线,该线用于指示被选中的物品所在的深度。
进一步,所述碰撞检测子模块被进一步配置为:在游戏场景中的物体和地板加上网格碰撞器以使所述物体和地板具有碰撞功能,并在所地板上添加碰撞检测组件,进行碰撞检测,若检测到物体碰到地板,使该物体失效,并令该物体不能再被操作,同时与场景界面模块的数值系统子模块进行交互,让血量-1。
根据本发明的第三方案,提供了一种存储有指令的非暂时性计算机可读存储介质,当所述指令由处理器执行时,执行根据本发明各个实施例所述的方法。
根据本发明各个方案的基于笔式和触屏交互的3D游戏的交互方法、装置及介质,将笔式交互与触屏交互相结合,应用于游戏里3D物体的操作中,不仅利用了笔式交互精确、不易疲劳的优点,而且利用了触屏交互方便快速、可拓展性高的优点,大大提高了3D物体的操作效率,大大增强了游戏的体验性。
附图说明
在不一定按比例绘制的附图中,相同的附图标记可以在不同的视图中描述相似的部件。具有字母后缀或不同字母后缀的相同附图标记可以表示相似部件的不同实例。附图大体上通过举例而不是限制的方式示出各种实施例,并且与说明书以及权利要求书一起用于对所发明的实施例进行说明。在适当的时候,在所有附图中使用相同的附图标记指代同一或相似的部分。这样的实施例是例证性的,而并非旨在作为本装置或方法的穷尽或排他实施例。
图1示出了根据本发明实施例的一种基于笔式和触屏交互的3D游戏的交互装置的结构图。
图2示出了根据本发明实施例的一种基于笔式和触屏交互的3D游戏的交互装置的结构图。
图3示出了根据本发明实施例的对物体进行一次旋转操作的图示。
图4示出了根据本发明实施例的画出的竖直投影线效果图。
图5示出了Unity编辑器中物体的Transform组件的截图。
图6示出了Unity中的射线示意图。
图7示出了Unity编辑器中物体的Rigidbody组件的截图。
图8示出了Unity编辑器中物体的Collider组件的截图。
图9示出了Unity编辑器中物体的Collider组件的截图。
图10示出了Nygard的手势分类图。
图11示出了TouchScript部分手势示意图。
具体实施方式
为使本领域技术人员更好的理解本发明的技术方案,下面结合附图和具体实施方式对本发明作详细说明。下面结合附图和具体实施例对本发明的实施例作进一步详细描述,但不作为对本发明的限定。本文中所描述的各个步骤,如果彼此之间没有前后关系的必要性,则本文中作为示例对其进行描述的次序不应视为限制,本领域技术人员应知道可以对其进行顺序调整,只要不破坏其彼此之间的逻辑性导致整个流程无法实现即可。
相关技术概述:
Unity3D:是一款实时3D互动内容创作和运营平台,由美国Unity Technologies公司研发。Unity3D是一个具有强大跨平台能力的2D/3D游戏引擎,开发者能使用它为超过20个平台创作和优化内容,可用于开发和发布运行于Windows、Mac OS、Linux、Android、IOS、任天堂Switch、索尼PS4等操作系统和平台的内容,还支持谷歌AR Core、苹果AR Kit、商汤SenseAR等AR开发工具。相比于其他2D/3D游戏引擎,Unity3D具有独特的优势。它不仅是一个强大的跨平台创作工具,还为创作者提供了丰富的解决方案与运营服务,如Unity AssetStore资源商店、PlasticSCM代码托管、Unity Cloud Build游戏云一站式联网游戏服务、Unity Ads广告服务等,其中资源商店里具有海量的免费及商业资源,如模型、插件、动画等。Unity3D的渲染及着色器系统十分优秀,能够做出自然且真实的游戏效果。Unity3D内置强大的地形编辑系统,能做出复杂的仿真地形,并且内置NVIDIA的PhysX物理引擎,模拟牛顿力学模型实现真是世界中的重力、碰撞、弹簧等效果。Unity3D的应用领域十分广泛,在游戏领域,它已是最主流的游戏开发引擎之一,孕育了成千上万款高质量游戏,;在ATM(汽车、运输、制造)领域,Unity3D被广泛应用于工业VR/AR应用场景的创建,如实时光线追踪汽车设计可视化等;在AEC(建筑、工程、施工)领域,Unity3D可用于打造虚拟可视化场景,如展示虚拟室内设计效果等;在影视动画领域,制作人员通常利用Unity3D的建模、动画、光照、特效来制作动画和电影;在教育、军工、医疗等领域,Unity3D也得到了广泛的应用。
Transform组件:Transform是Unity3D中所有物体都必不可少的一个重要组件,主要描述了物体的三维坐标、旋转量和缩放量等位置信息,以及相对于父物体的上述信息。图5是Unity编辑器中物体的Transform组件的截图,Position是三维坐标,Rotation是该物体分别绕x、y、z轴旋转的角度,Scale是该物体分别在x、y、z方向上的缩放值。Transform是UnityEngine中的一个极其重要的基础类,用以存储物体的位置信息。主要的成员变量有物体在世界空间中的坐标、在世界空间中的旋转值、在世界空间中的缩放量、相对父物体的坐标、相对父物体的旋转值、相对父物体的缩放量等。主要的公共函数有位置移动、指向旋转、任意旋转、缩放、设置父物体等。在实施例中,使用Transform类进行物体的移动及旋转。其中移动使用到的函数是Translate,参数translation为移动的方向和距离,relativeTo为相对自身或世界坐标轴进行移动;旋转使用到的函数是Rotate,该参数enlers为旋转的欧拉角,relativeTo为相对自身或世界坐标轴进行旋转。
Ray射线与Raycast射线检测:Ray是Unity提供的射线类,用以从某点出发,画出一条沿着某一方向延伸的无限长的射线,如图6所示,从立方体中心发射出一条向上的红色射线。在Unity编辑器的Game窗口中,必须开启Gizmos才能看到射线。射线检测是Unity中的一个重要技术,它利用射线,检测射线投射在哪个点或哪一物体上,从而帮助实现诸如投影辅助线、物体随鼠标点击位置移动、激光发射等功能。在本发明实施例中使用射线检测构建物体竖直投影线,使用Raycast射线检测类,并使用RaycastHit类获取射线碰撞信息,调用了如表1所示函数。该函数参数ray为射线,hitInfo为用于接受射线碰撞信息的RaycastHit对象,maxDistance为射线应检测碰撞的最大距离,默认为正无穷大,另外该函数有十多种重载方式,如添加参数layerMask层遮罩表示忽略某些碰撞体。当该函数返回true时,表明ray碰撞到了物体,此时可通过hitInfo获取射线碰撞的有关信息,如碰撞点、碰撞到的物体等。
表1.Raycast函数接口
Figure BDA0003640617860000081
NVIDIAPhysX物理引擎:NVIDIA PhysX物理引擎是由nvidia公司设计的执行复杂的物理运算的技术,是一种功能强大的物理引擎,主要作用为在游戏、影视等实时画面中进行复杂的物理运算,从而实现各种逼真的物体效果。直接使用NVIDIA PhysX物理引擎,游戏开发者将不再需要单独为游戏开发一套物理引擎,大大节省了开发时间。NVIDIAPhysX物理引擎使用拥有数百个强大内核的处理器进行硬件加速,并结合GPU的并行处理能力,从而大大提高了物理运算的效率。Unity3D内置了许多NVIDIA PhysX物理引擎,如Rigidbody、Collider、Trigger、PhysicMaterial等,这些物理引擎可以组件的形式添加到游戏物体上。
Rigidbody组件及力学属性:Rigidbody中文译名为“刚体”,指能接受外力且在外力作用下各部分都不发生形变的物体。Rigidbody属于物体的一个物理系统组件,它利用NVDIAPhysX物理计算,使游戏物体收到物理控制,拥有质量、重力、摩擦力、碰撞参数等物理属性,并可接受来自外部的力和扭矩。利用Rigidbody组件,可以使物体拥有接近现实世界的物理效果,并可营造自由落体、碰撞、反弹、漂浮等逼真的效果。图7是Unity编辑器中物体的Rigidbody组件的截图,Mass属性为物体质量,Drag和Angular Drag分别是物体移动及旋转时受到的空气阻力,Use Gravity为物体是否受重力影响,Is Kinematic为是否不受物理引擎驱动,还有别的和碰撞、物理约束有关的属性。在本发明实施例中,给所有场景内的游戏物体均增加了Rigidbody组件,在使得玩家在进行物体操纵时能感受到重力、碰撞、阻力等真实的物理效果。
Collider组件及碰撞与触发检测:Collider的中文译名为“碰撞体”,是Unity中物理系统相关的一个重要组件,游戏物体要想实现碰撞、接触检测等效果,必须添加Collider组件。根据物体的形状,可以添加BoxCollider(盒型碰撞体)、SphereCollider(球形碰撞体)、MeshCollider(网格碰撞体)等。图8、图9是Unity编辑器中物体的Collider组件的截图,与其他类型的Collider不同的是,MeshCollider并没有一个固定的形状,而是要在Mesh属性一栏添加网格资源并并基于该网格构建碰撞体,必须要勾选Convex属性才能发生碰撞。在Collider组件中,Is Trigger是一个重要的属性,若勾选该属性,则这个物体将不会与别的物体产生碰撞,而是用于和别的物体发生接触时触发事件。本项目使用Collider组件,实现两个重要的物理检测——碰撞检测与触发检测。碰撞检测用于两个物体发生碰撞时,用于检测碰撞的开始、持续与结束,并获取有关碰撞的信息。碰撞检测使用UnityEngine中的Collision(碰撞)类,可以通过分别在脚本中添加OnCollisionEnter、OnCollisionStay和OnCollisionExit方法,分别检测碰撞开始、碰撞持续发生与碰撞结束,并做出相应的处理。三个方法中的参数collision为与该碰撞事件关联的碰撞数据,如表2所示。触发检测中的一个物体的Collider组件必须勾选Is Trigger属性以作为触发器,触发器不会与其他物体产生碰撞,而是在两者接触时调用Trigger方法。Trigger方法有OnTriggerEnter、OnTriggerStay和OnTriggerExit,分别在接触开始、持续接触与接触停止时调用。参数collider为与之接触的另一碰撞体,如表3所示。
表2.碰撞检测相关函数接口
Figure BDA0003640617860000091
表3.触发检测相关函数接口
Figure BDA0003640617860000092
多点触控技术及触屏手势:多点触控技术是一种结合计算机硬件技术与人机交互技术,通过触摸屏或触摸板,同时接收来自屏上多个点的输入的一种技术。这一技术使得用户不仅可以进行单击、选择等单点操作,还可进行如缩放、旋转等复杂的操作,并且使得多人同时输入成为可能。多点触控技术已被广泛应用于智能手机、平板电脑、电子展示墙等触屏设备上。多点触控技术的实现原理如下:在电子设备中集成触摸芯片,由于人体有很高的感应电压,接近触摸芯片时就会出现电容效应,从而改变局部电压、电流与振荡频率,此时就能识别出触摸点。大多数触摸芯片基于LLP、FTIR、ToughtLight等技术实现,红外线投影、LED反射等也被广泛应用于多点触控技术中。多点触控技术一直是计算机硬件领域研究的热点方向,近几十年一直有新的多点触控技术及应用产生。Manabe提出了一种使用光反射器来识别多点触控手势的方法,Pourjafarian等人设计了一款适于电子新手开发触控平台的多点触控套件,使用商品微控制器和开源软件,不需要任何专用硬件,Nittala等人设计并制造了一种能够打印于皮肤上的薄且灵活的多点触控传感器,并证明其有很高的可用性。说到多点触控就不得不提多种多样的触屏交互手势。目前学界对于触屏手势的分类标准多种多样,Nygard等人根据手势形状与轨迹,把手势分为开放轨迹(如划动、画线)、闭合轨迹(如画圈)和交叉轨迹(如打叉),如图10所示;Cirelli等人根据手势与时间的关系,分为普通的原子手势与顺序手势(手势间有时间间隔,如双击、三连击、手势序列等);吴金铎根据手势是发生在二维平面还是三维平面,分为2D手势和3D手势,所有施加于触摸屏面的手势均为2D手势,如对平面施加的点击、划动、长按、缩放等,3D手势是需要在整个空间进行识别的手势,如手掌靠近或远离屏幕、手掌伸开或握紧、翻动手掌等。
TouchScript触控插件:本发明使用TouchScript插件来获取玩家的笔及触屏输入。TouchScript是一个开源的多点触控插件,已被广泛应用于游戏、动画、VR、AR等项目中。它能识别点击、释放、长按、二指捏、划动等常见的手势,并且允许开发者编写自定义手势,能使开发者方便快速地拓展项目的交互功能。TouchScript可以接收到许多类型的输入源,如鼠标、Windows7/8触摸、TUIO、手机(ios、Android、Windows Phone)等,并将它们转化成一致的内部数据类型:pointer类。在Unity资源商店可免费下载该插件并导入游戏项目中,该插件的主要部分包括TouchManager(输入管理器)、Gestures(输入手势)、Layers(层级管理)、Cursors(光标)等。
TouchManager输入管理器:TouchManager(输入管理器)是TouchScript中的一个预制体,它的作用是进行一下TouchScript插件的配置。该预制体包括Touch Manager和Standard Input两个脚本组件,前者的作用是创建摄像机层级、创建标准输入等;后者的作用是设置是否接受多点输入、是否在Windows 8+/Windows 7/UMP系统上激活鼠标输入、是否激活Web GL触屏输入等,有了这一组件,Unity才能获取笔、触屏等外部输入。在某个场景中,要想使用TouchScript插件,必须添加TouchManager预制体,因为它存储了该场景中必须用到的有关TouchScript插件的所有配置信息。
Gestures手势:在TouchScript中,所有输入识别都由从Gesture(手势)类继承的组件完成。TouchScript包含丰富的手势,这些手势可以组件的形式添加到场景中的游戏物体上,它们可检测、接收、处理相应的手势输入。TouchScript的部分手势如图11所示。
TouchScript提供的手势共有12种,可分为识别离散、连续两种类型。下面简要介绍其中的几种。
(1)Tap Gesture(点击手势):一种离散手势,可识别单击/双击/三连击,当点击发生时会产生事件Tapped。
(2)LongPress Gesture(长按手势):一种离散手势,可识别长按动作,当长按发生时会产生事件LongPressed。
(3)Transform Gesture(变换手势):一种连续手势,可识别一定范围(可自己设置)个数的点所结合产生的手势,能够识别平移、旋转、缩放等变换手势,当变换手势开始、持续发生于结束时分别产生事件TransformStarted,Transformed,TransformCompleted。
(4)Screen Transform Gesture(屏幕变换手势):与Transform Gesture类似,不过基于屏幕坐标系。
(5)Pinned Transform Gesture(捏放变换手势):类似于仅有缩放和旋转功能的Transform Gesture,对象被固定在其中心且无法移动。
开发者可以通过事件委托机制将函数与这些手势的事件绑定,Gesture识别这些手势的事件发生时,就会调用绑定的函数,以实现预定的各种功能,从而实现手势操作的多样化。
通常当某个Gesture识别一个手势时,它会阻止该物体及其父物体上的其他Gesture识别其他手势,要想多个Gesture同时工作,可以通过添加友好手势库的方式实现。开发者还可以结合多个Gesture,拓展丰富的自定义手势。
本发明实施例提供一种应用场景,如图1所示,根据本发明实施例的一种基于笔式和触屏交互的3D游戏的交互装置的结构图。该装置100包括场景界面模块101、交互模块102和建模模块103。在具体实施时,可以将装置的各个模块配置到对应的触屏设备上。所述触屏设备包括智能触摸手机、平板电脑等等。也可以是新设置的触屏设备,例如,新设计的触屏设备包括触摸屏、处理器、摄像头、触屏笔以及扬声器,将装置的各个模块配置到处理器上,其中,触摸屏用于接收触屏笔的笔输入信号以及显示对应的游戏场景、UI界面等等。用户通过触摸设备所配备的触屏笔并基于交互模块102来确定对应的笔或触屏输入,对场景界面模块101所构建的游戏场景中的物体进行控制。通过触摸设备配备的摄像头获取用户的手势姿态,并通过交互模块102对手势姿态进行相应处理,以对场景界面模块101所构建的游戏场景中的物体进行控制。用户在使用本实施例提供的交互装置时,尤其是当用户群体是儿童时,能够很好锻炼儿童的手眼协调能力。
场景界面模块主要用于场景与界面UI控制,交互模块主要用于用户操纵游戏内物体,建模模块主要用于建模与场景的保存。
场景界面模块又分为动画模块、场景模块、UI模块,其中场景模块包括场景搭建子模块和场景跳转子模块,UI模块包括背包子模块、数值系统子模块和游戏流程控制子模块;交互模块又分为笔+触屏操纵模块、碰撞与触发检测模块、音效模块,其中笔+触屏操纵模块包括输入获取子模块、物体或镜头变换子模块、辅助子模块,碰撞与触发检测模块包括碰撞检测子模块和触发检测子模块;建模模块又分为模型建立和渲染模块、场景存档模块,其中模型建立和渲染模块包括模型建立子模块和模型渲染子模块,场景存档模块包括场景保存子模块和场景加载子模块。
三大模块两两之间均存在数值传递、交互调用等关系。例如,场景模块需要来自交互模块的碰撞检测、触发检测等数据来决定是否失败或通关,需要建模模块的模型来完成场景搭建;交互模块需要使用场景界面模块中背包子模块生成的物体,而这些物体由建模模块生成;建模模块中的模型需要通过交互模块进行操纵,并保存场景模块中的场景等。
图2展示了三大模块中的子模块与三大模块间的关系。
场景界面模块主要负责选择并搭建游戏场景,设计游戏界面UI的样式和功能,控制游戏关卡的血量和时间倒计时,以及游戏开头的运镜动画。该大模块可分为场景模块、UI模块和动画模块。
场景模块的功能为游戏整体场景设计与搭建,以及控制游戏各关卡场景间的跳转。它包含的子模块如下:
场景搭建子模块:在Unity商城中挑选合适的资源、建立并调整游戏每一关的场景,使用灯光渲染等技术增加游戏场景的美观度,配置一些场景的初始参数。
场景跳转子模块:使用Unity的场景加载技术,控制游戏关卡的选择与跳转,并且设置一个参数来记录已通关的关卡与未解锁的关卡。
UI模块的功能为设计与绘制游戏场景内的按钮、倒计时条等2D界面UI,以及管理和UI有关的背包、数值系统、游戏流程。它包含的子模块如下:
背包子模块:背包是最初存放该关卡内游戏物体的地方,点击背包上的按钮便会生成相应的游戏物体。该子模块负责背包的UI设计、游戏物体的生成与各游戏物体的计数。
数值系统子模块:记录并控制各个游戏关卡的时间限制倒计时、血量、通关星级,并设计相应的展示UI。
游戏流程控制子模块:控制游戏关卡的返回、暂停、重新开始功能,并设计相应的UI。
动画模块的功能为在游戏开头制作运镜动画,主要使用了Unity中的Animation系统,通过每一帧摄像头的移动来营造视角从远拉近的效果,增强了游戏的视觉体验性与吸引力。
交互模块主要负责通过TouchScript插件获取用户的笔与触屏输入,根据这些输入对物体进行拖拽、远近深度调节、旋转,或对整个镜头画面进行移动和缩放,另外,场景中游戏物体落地的碰撞检测、游戏堆到规定高度后接触礼物盒的接触检测、游戏交互过程中的音效也由这一模块完成。该大模块可分为笔+触屏操纵模块、碰撞与触发检测模块、音效模块。
笔+触屏操纵模块的功能为获取笔与触屏输入,对物体或镜头进行相应的操纵,在进行操纵时添加投影线及物体发光等辅助物。它包含的子模块如下:
输入获取子模块:通过TouchScript插件来获取来自用户的笔或触屏输入,识别输入手势的产生,在手势发生、持续或停止时调用相应的处理函数。还可通过UI来取消物体选择、选择触屏手势针对游戏物体或整个镜头画面。
物体或镜头变换子模块:根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放。
辅助子模块:通过改变游戏物体的重力属性使得笔拖拽时不受重力,利用射线系统画出游戏物体的竖直投影线以体现物体深度,使用HighlightingSystem插件使被选择的物体产生发光效果。
碰撞与触发检测模块的功能为利用碰撞检测判断物体落地,利用触发检测判断物体接触礼物盒,并做出相应处理。它包含的子模块如下:
碰撞检测子模块:在地面上施加碰撞检测来判断物体是否落地,若落地告知场景界面模块的数值系统子模块,使血量-1。
触发检测子模块:在礼物盒上施加触发检测,判断物体是否以不被笔拖拽的状态接触礼物盒,若是,则保持接触1s后开启倒计时,保持平衡3s后通关。
音效模块的功能为在游戏场景里添加一个带有若干AudioSource的音效播放器,循环播放背景音乐,在点击UI、选择物体、物体落地、成功通关或接触礼物盒时播出音效。
建模模块主要负责室外场景中所用的模型的建立与渲染,以及场景的保存功能。该大模块可分为模型建立和渲染模块、场景存档模块。
模型建立和渲染模块的功能为室外场景中所用的模型的建立、预处理与渲染。它包含的子模块如下:
模型建立子模块:通过CAD、3Dmax等3D建模及模型处理软件建立模型。
模型渲染子模块:利用3D渲染技术,对所建立的模型进行渲染优化、光影处理等。
场景存档模块的功能为将游戏场景内容进行持久化保存,以及将保存的场景内容重新加载,使得用户可以保存现在的游戏状态,并在下次打开游戏时回到之前的状态。它包含的子模块如下:
场景保存子模块:用数据序列化的方式将对象内容以数据流的方式持久化。
场景加载子模块:读取文件夹中保存的数据,将数据流解析回原本的游戏对象并加载到场景中。
本发明的核心在于交互模块,下面将详细介绍交互模块所包括的子模块的具体功能。
在对输入获取子模块设计时最大的困难是如何将直接施加在物品上的笔输入与施加在任意位置的触屏输入相分离。发明人尝试的第一种方法为在摄像机上添加TouchScript的FullscreenLayer组件,因为该组件能够识别整个画面的手势,但这样做之后发现直接添加在物品上的Gesture均失效,无法识别到直接施加在物品上的所有手势。因此本发明最终选择在场景后方放置一块很大的平面来单独接受触屏输入,该平面命名为ScaleAndRotationZoom。
在输入获取子模块中,Model类是所有用于堆叠的物品,这些物品上有TapGesture及TransformGesture两个触控组件,前者用于接收来自笔的点击选择操作,后者用于接收来自笔的拖拽输入,脚本AliveOrNot用于记录某个物品是否失效,当用户点击某个未失效的Model时,其上的TapGesture会识别该点击并调用SelectionObject脚本中的方法,这一方法会告知ScaleAndRotationZoom当前选中这一物品,且接下来的触屏操作都是针对这一物品。ScaleAndRotationZoom上有两个TransformGesture分别识别单指旋转手势与双指调节远近手势。
触屏模式有两种,分别是针对所选物体与整个镜头画面,UI开关组ToggleGroup用于选择触屏模式,当ToggleGroup选项值切换时便会通过MyToggleGroup脚本里的方法告知ScaleAndRotationZoom。CancelSelectionButton按钮用于取消物体选择,若点击该按钮时当前未选择任何物体,则显示图片NoSelectionImage,0.5s后自动消失。
所述物体或镜头变换子模块的核心为设计针对物品的触屏手势,TransformGesture的默认手势为旋转和缩放均为二指操作,且没有远近调节手势。发明人认为在交互过程中需要将各类触屏手势分开,不然可能出现混淆,因此最后决定远近调节操作使用二指捏放手势,旋转使用单指划动手势且只能沿x轴或y轴旋转。
所述辅助子模块主要做一些物体操纵时的辅助工作。在这一子模块中,ScaleAndRotationZoom的LineMark脚本使用射线检测系统,在被选中的物品下方竖直射出一根在游戏窗口不显示的射线,该射线与下方的物体会有一个交点,然后利用LineRenderer画出一根从物体的中心连到该点的线,这根线的作用是提示用户物品所在的深度。
物体上的ControlGravity脚本用于控制物体的RigidBody组件,当笔在拖拽物体时,便会调用该脚本里的方法,使物体重力消失以便于拖拽,笔松开时该物体的重力又会恢复。
使用了HighlightingSystem插件,使被选中的物体会持续发光,并在笔拖拽时闪烁,提醒用户正在操作的是哪一物体。
所述碰撞检测子模块的Model和地板Floor均加上Mesh Collider组件以使它们具有碰撞功能,在Floor上添加CollisionObject脚本,进行碰撞检测,若检测到物体碰到地板,则调用物体上的AliveOrNot脚本中的方法使该物体失效,之后该物体便不能再被操作,另外还会与场景界面模块的数值系统子模块进行交互,让血量-1。
所述触发检测子模块的Model和地板Floor均加上Mesh Collider组件,以使它们能互相碰撞接触。礼物盒GiftBox放在较高处,加上PassDectorObject脚本,该脚本进行触发检测,当不被笔拖拽(即有重力)的Model与GiftBox接触时会开启触发检测,保持持续接触1s后开始倒计时,倒计时3s后游戏通关,若倒计时过程中两者停止接触则倒计时中断。PassCountDownImage是三张在3s倒计时出现的图片,其上的PassCountDown脚本控制这些图片在出现0.4s后自动消失。
所述音效子模块在每个场景中都放一个负责播放音乐的物体MusicPlayer,MusicPlayer上添加带有音源的AudioSource组件,并加上MusicPlayer脚本控制音乐的设置、播放与停止。场景内循环播放背景音乐,当其他模块中进行UI点击、物体选择、物体落地、物体接触礼物盒、游戏失败或通关时,就会调用PlayMusic里的方法,控制音乐的播放。
下面本发明实施例将详细阐述交互模块中各子模块的具体实现。
输入获取子模块的具体实现:
这一子模块的功能获取来自用户的笔或触屏输入,需要实现的内容为分离并接受笔输入与触屏输入、使用TouchScript插件获取输入、管理物体的有效性、进行物体选择与取消、触屏模式的选择。使用的关键技术为TouchScript插件。
(1)分离笔输入与触屏输入
本项目开发所用的硬件设备为Surface,这一设备的笔输入与触屏输入本质上是一样的,Unity3D编辑器中也无法将两者区分。并且这两种输入的位置不同:笔输入直接施加在物体身上,触屏输入施加在画面的任意位置。
选择在场景后方放置一块很大的平面来单独接受触屏输入,该平面命名为ScaleAndRotationZoom。
(2)使用TouchScript插件获取输入
给游戏中所有用于堆叠的物体的tag设为“Model”,在这些Model物体上添加TapGesture组件来获取来自笔的点击输入,添加TransformGesture组件来获取来自笔的拖拽输入,并且该TransformGesture组件的Limit Points(限制点数范围)设置为[1,1],表明只接收单点输入。
在ScaleAndRotationZoom上添加两个TransformGesture组件,第一个TransformGesture组件的Limit Pointers也设为[1,1],负责接收单指划动触屏输入;第二个的Limit Pointers设为[2,2],表明只接收二点输入,它负责接收二指捏放触屏输入。
(3)管理物体的有效性
在Model物体上添加AliveOrNot.cs脚本,该脚本的布尔alive变量表明该物体是否仍“活着”,若alive为true,则表明该物体“活着”,可以对该物体进行操纵;若为false,则该物体“已死”,不可再对该物体进行操纵。
(4)进行物体的选择与取消
由于笔与触屏操作一次只能针对一个物体,所以必须要进行物体的选择,只有当前选中的物体才能进行笔或触屏操纵。
在ScaleAndRotationZoom上添加ScaleAndRotate.cs脚本,该脚本的selectedObject变量用于记录当前选择的Model物体,默认选择的物体为一个空物体。SetSelectedObject函数用于设置selectedObject。在Model物体上添加SelectionObject.cs脚本,该脚本里的OnEnable方法利用事件委托机制绑定TapGesture.Tap事件(即点击事件)发生时调用SelectThisObject函数,该函数用于做物体选择的相关处理:告知ScaleAndRotationZoom、播放音效、使物体发光等。
(5)触屏模式的选择
为拓展该游戏的功能与提高可操作性,设置了两种触屏模式,分别为触屏针对所选择的物体、触屏针对整个画面,可以通过游戏场景左下角的的开关组ToggleGroup进行触屏模式的选择。
物体或镜头变换子模块的具体实现:
这一子模块的功能为根据获取输入子模块获取的输入,识别输入的手势,脚本根据输入的手势及触屏模式对物体或镜头进行变化操作,实现物体拖拽、远近调节、旋转及镜头的移动和缩放。需要实现的内容为用笔对物体进行拖拽、用二指捏放手势对物体进行远近调节、用单指划动手势对物体进行旋转、对整个画面的移动与缩放。
(1)用笔对物体进行拖拽
在Model物体上添加SingleDrag.cs脚本,当该物体上的TransformGesture识别到笔的拖拽手势时,便会调用这一脚本中的Drag函数,这一函数会先判断这个物体是否为当前选中的物体,若是,则根据TransformGesture获取的当前帧笔输入位置的变化值TransformGesture.DeltaPosition,让当前物体的transform.localPosition加上这一值,使物体的坐标位置产生响应变化。
需要注意的是,该笔拖拽使物体产生的平移变换仅在与屏幕平行的平面内进行,不会让物体所在的深度(也就是物体所离屏幕的远近距离)产生变化。
(2)用二指捏放手势对物体进行远近调节
因为单纯的笔拖拽无法改变物体的深度,因此要想让物体距离屏幕的远近距离产生变化,就必须通过调节物体远近的触屏手势进行。在TouchScript的自带示例中,二指捏放手势用于对物体大小进行缩放,而现实世界中也有近大远小的视觉现象,这给予了本人灵感,决定用二指捏放手势来进行远近调节。
ScaleAndRotationZoom上Limit Pointers设为[2,2]的TransformGesture负责接收用于远近调节的二指捏放手势。该TransformGesture识别到二指捏放手势输入时就会调用ScaleAndRotate.cs脚本的DoubleScale方法,对当前被选中的物体进行远近调节。
在实现DoubleScale方法时遇到了一个难题:由于场景的主镜头存在旋转,所以不能通过直接更改物体坐标的z值来实现远近调节,不然画面效果显示会不正确,应该根据主镜头的旋转找到真正相对移动的坐标轴。具体方法为,用Camera.Main.transform.rotation.eulerAngles.y获取主镜头沿y轴旋转的值cameraY,Quaternion.Euler(0,cameraY,v)与向量(0,0,v)相乘的结果即为物体坐标的变换量,其中v为物体的深度移动量。
基于DoubleScale方法对物体进行远近调节,其中doublePoint为负责识别该手势的TransformGesture。doublePoint.DeltaScale为捏放手势的“捏放量”,该值小于1时,二指往里捏,物体往后走;大于1时,二指往外展,物体往前走。
(3)用单指划动手势对物体进行旋转
在TouchScript的自带示例中,旋转是采用二指转动手势,且仅是在与屏幕垂直的平面内旋转(即仅有绕z轴旋转),如果在该游戏中旋转也采用二指转动手势,就会和远近调节手势产生混淆(因为在二指捏放的同时也会产生转动,插件会无法识别是哪一手势),因此本发明实施例采用单指划动手势来控制物体的旋转。
出于使操作直观的考虑,让物体旋转方向与手指滑动方向相同,也就是说,当手指往左划时,物体沿y轴正方向顺时针转动;当手指往右划时,物体沿y轴正方向逆时针转动;当手指往上划时,物体沿x轴正方向顺时针转动;当手指往下划时,物体沿x轴正方向逆时针转动。因为手指在划动过程中很难保持水平或竖直,且用户通常不希望一次旋转时物体只沿固定轴转动,因此获得每次手指划动的向量后,取得其x与y值,分别作为绕y轴、x轴的转动量。图3为对物体进行一次旋转操作的图示。
与上一个功能类似,在实现该功能时遇到的最大问题是主镜头存在移动与旋转,因此不能让物体沿着世界坐标系的x轴或y轴旋转,不然画面效果显示会不正确,应该根据主镜头的移动与旋转找到真正用于物体旋转的“x轴”与“y轴”,具体方法为,用Camera.Main.transform.rotation.eulerAngles.y获取主镜头沿y轴旋转的值cameraY,Quaternion.Euler(0,cameraY,v)与向量(1,0,0)相乘的结果即为用于旋转的“x轴”,Quaternion.Euler(0,cameraY,v)与向量(0,1,0)相乘的结果即为用于旋转的“y轴”。另外,在项目调试过程中,发现当camaraY<90或camaraY>270时,“y轴”的y值要取相反数。
ScaleAndRotationZoom上Limit Pointers设为[1,1]的TransformGesture负责接收用于旋转的单指划动手势。该TransformGesture识别到单指划动手势输入时就会调用ScaleAndRotate.cs脚本的SingleRotate方法。
(4)对整个画面的移动与缩放
当触屏模式选择为“针对整个画面”时,触屏手势进行操作的对象为该场景的主镜头,单指划动手势将对镜头进行移动(效果为整个画面的移动)二指捏放手势将对镜头进行远近调节(效果为整个画面的缩放)。
辅助子模块的具体实现:
这一子模块是物体操纵过程中增强游戏效果的重要模块,需要实现的内容为控制物体的重力、画出物体的竖直投影线、实现物体发光效果。使用到的技术有射线检测系统、HighlightingSystem插件等。
(1)控制物体的重力
在该游戏中,当笔对物体进行拖拽时,必须取消该物体的重力,否则笔将很难拖拽物体,而当笔松开时,又要恢复物体的重力。
所有Model物体均添加RigidBody组件,并进行组件的配置:质量为1,移动阻力和旋转阻力均为2,并且默认使用重力。在项目设置中,将项目的重力加速度改为1,以使物体受重力时缓慢下落。
使用ControlGravity.cs脚本来控制物体的重力,当物体上的TransformGesture识别到笔拖拽输入产生时,即调用该脚本的DeleteGravity方法,取消物体的重力,当笔输入结束时,调用AddGravity方法,恢复物体的重力。
(2)画出物体的竖直投影线
在游戏调试过程中发现,由于缺乏参照物,经常不能知道Model物体所处的深度(即离屏幕的远近),也就很难通过远近调节将物体调到合适的位置,这给游戏用户带来了很大的困难,极其不利于游戏的体验。
为解决这一问题,最开始的尝试是给物体添加影子,但这一方法涉及复杂的贴图和灯光控制,效果不好,加之想到游戏场景的灯光较柔和且并非垂直向下投射,物体下方通常不会有明显的影子。因此,最后决定在当前被选中的物体下方画一条竖直向下的投影线,以显示物体当前所处的深度,该条投影线以8帧显示一次的频率闪烁。通过实验证明,该条投影线的存在大大降低了用户操作的难度。
进行该投影线的绘制利用了ScaleAndRotationZoom上的LineMark.cs脚本及LineRenderer组件。在LineMark.cs脚本的Update函数(该函数每帧调用一次)中,创建一条从当前被选中物体的位置出发、竖直向下的射线ray,该射线在游戏运行时不会显示,利用射线碰撞检测函数Physics.Raycast检测该射线与下方物体是否有交点,若有,则获取该交点,利用线渲染器LineRenderer组件,画出从物体出发连到该交点的线,即物体的竖直投影线。另外使用计数值couter,每调用一次Update函数couter就+1,只有当couter能被8整除时才画线,从而实现该竖直投影线每8帧显示一次的闪烁效果。最后画出的竖直投影线效果如图4所示(该投影线每8帧出现一次)。
(3)实现物体发光效果
根据游戏设定,用户必须点击选中某个Model物体才能对该物体进行操纵,为了让该被选中的物体显示明显,决定给该物体添加发光效果。最初的方法是编写一个发光shader,用其创建新的Metarial,然后附加到被选中的物体身上,但该方法过于繁琐且不灵活。后来在Unity资源商城发现了一个发光插件HighlightingSystem,该插件能方便地实现持续发光、闪光、光谱变化等多种发光效果,因此决定使用HighlightingSystem插件。
在每个Model物体上都添加Highlightable Object组件使之能够发光,并用ConstantOnLightingController.cs和FlashingLightingController.cs两脚本分别控制物体的持续外发光和闪光效果。当该物体被选中时调用ConstantOnLightingController.cs里的ConstantOnLightingOn方法,使物体持续发黄光;当该物体被笔拖拽时调用FlashingLightingController.cs里的FlashingLightingOn方法,使物体以2s一周期的频率进行黄色与青色交替的闪光。另外,游戏场景中的礼物盒也有循环闪光效果,以便突出显示。
场景的主镜头上添加HighlightingEffect组件使发光效果能显示。
碰撞检测子模块的具体实现:
在游戏设定中,若Model物体落地,则该物体失效,失效后的物体不可再进行操纵,这一过程由该碰撞检测子模块实现。
要想物体之间有碰撞效果,则物体和地板上都要添加Collider碰撞体组件,这里选用MeshCollider网格碰撞器,以使碰撞体与物体的形状更为贴合,并且MeshCollider中的Is Trigger选项不能勾选。
在地板上添加CollisionObject.cs脚本来进行碰撞检测。该脚本使用了OnCollisionEnter函数用于检测碰撞的开始,该函数在一次与地板的碰撞产生时就被调用,参数collision包含了这一次碰撞的所有信息,在该函数中,先通过物体tag来判断撞击的物体是否是Model物体,还要判断该物体是否目前仍未失效,若以上两个判断均通过,则进行以下操作:若该Model物体是当前被选中的物体,则取消对该物体的选择(重新设为选择的是空物体),之后调用该物体的AliveOrNot.cs脚本里的SetUnalive函数,将该物体设为失效,此后与场景界面模块中的数值系统子模块进行交互,告知血量-1,最后播放物体落地音效。
触发检测子模块的具体实现:
根据游戏设定,当Model以不被笔拖拽的状态持续接触礼物盒GiftBox 1s后开启3s倒计时,如果在这3s倒计时的过程中物体仍以不被笔拖拽的状态与礼物盒保持接触,则判定游戏通关。
对于该子模块的实现,最大的难题为如何判断物体接触礼物盒时是不被笔拖拽的状态,想到当笔对物体进行拖拽时物体的重力会被取消,因此决定用判断物体的RigidBody是否use gravity(使用重力)的方法来判断,若物体在接触礼物盒时任意一刻重力消失,那都说明物体受到了笔的拖拽,倒计时都会从新开始。
另外,物体与礼物盒产生接触时不能发生碰撞效果,因此礼物盒必须要设为“触发器”,使物体能接触它的内部,具体方法为将礼物盒的MeshCollider组件中的Is Trigger选项打勾。
在礼物盒GiftBox上添加PassDetectorObject.cs脚本来进行接触检测。在接触发生的瞬间调用OnTriggerEnter函数,记录当前与其接触的物体,并且礼物盒的闪光改为青红交替(默认状态为青白交替);在与物体产生持续接触时每帧调用一次OnTriggerStay函数,持续接触1s后开启倒计时,并控制倒计时图片的生成显示,再持续接触3s后通关;若物体与礼物盒分离,则调用OnTriggerExit函数,礼物盒恢复原状态。
音效子模块的具体实现:
在各个游戏场景中添加一个空物体MusicPlayer,该物体上挂载有7个AudioSource组件,每个AudioSource组件带有一条音源,其中6条分别在点击UI、选择物体、物体落地、物体接触礼物盒、通关成功和失败这6种情况下作为音效播放,另有1条是背景音乐,循环播放。
MusicPlayer上的PlayMusic.cs脚本用于控制这些音源的设置、播放与停止,在实现过程中,将背景音乐的优先级及音量都调到最小。在游戏进行过程中若需要播放音效或停止音效,则可调用PlayMusic.cs里的方法。
下面以其中某一游戏场景中用户可能会有的所有交互操作为例,展示在用户进行游戏操纵过程中交互模块的运行效果。
开始时,游戏场景中仅有室内摆设,还未生成任何用于堆叠的物品,用户用笔或触屏点击下方背包中的凳子小图标,生成一个凳子。
用户用笔或触屏单击该凳子,凳子上的TapGesture接收到该单击输入,并告知ScaleAndRotationZoom,该凳子被选中,持续发出黄光。
若用户点击右下方的“取消物体选择按钮”,则物体选择被取消。
重新选择该凳子,此时用户用笔对凳子进行拖拽,凳子上的TransformGesture接收到该拖拽输入,凳子在笔的拖拽下,在与屏幕平行的平面内进行移动,并且改为黄色与青色交替的闪光,用户在对物体进行拖拽时物体的重力消失,使用户能轻松地进行拖拽。
在用笔进行拖拽时,用户的另一只手在空白处施加二指捏放手势,对凳子进行远近调节,由于凳子下方有用于标明深度的竖直投影线,用户可以比较轻松地将凳子调到合适的深度。
用户也可以在空白处施加单指划动的旋转手势,让凳子进行旋转。
若通过左下方的ToggleGroup将触屏模式改为针对整个画面,则可用触屏手势对整个画面进行移动或缩放。
若操作过程中凳子落地,则地板的碰撞检测会检测到物体落地,该凳子失效、变红,并且告知场景界面模块中的数值系统子模块,该关卡的血量-1,右上角星星数-1。
若有三个物体落地,则血量为0,游戏失败。
点击下方背包,生成更多物体。当一个没有被笔拖拽的物体——图中的台灯接触置于高处的礼物盒时,礼物盒进行触发检测,礼物盒改为青红交替的闪光。当该台灯连续接触礼物盒1s后开启三秒钟倒计时,若在这倒计时的3s内该台灯仍保持不被拖拽的接触状态,则游戏通关。
在上述交互过程中,游戏场景内的背景音乐一直循环播放,且当点击任意UI、进行物体选择、物体落地、物体接触礼物盒、游戏失败及通关时都有相应的音效播放。
此外,尽管已经在本文中描述了示例性实施例,其范围包括任何和所有基于本发明的具有等同元件、修改、省略、组合(例如,各种实施例交叉的方案)、改编或改变的实施例。权利要求书中的元件将被基于权利要求中采用的语言宽泛地解释,并不限于在本说明书中或本申请的实施期间所描述的示例,其示例将被解释为非排他性的。因此,本说明书和示例旨在仅被认为是示例,真正的范围和精神由以下权利要求以及其等同物的全部范围所指示。
以上描述旨在是说明性的而不是限制性的。例如,上述示例(或其一个或更多方案)可以彼此组合使用。例如本领域普通技术人员在阅读上述描述时可以使用其它实施例。另外,在上述具体实施方式中,各种特征可以被分组在一起以简单化本发明。这不应解释为一种不要求保护的发明的特征对于任一权利要求是必要的意图。相反,本发明的主题可以少于特定的发明的实施例的全部特征。从而,以下权利要求书作为示例或实施例在此并入具体实施方式中,其中每个权利要求独立地作为单独的实施例,并且考虑这些实施例可以以各种组合或排列彼此组合。本发明的范围应参照所附权利要求以及这些权利要求赋权的等同形式的全部范围来确定。

Claims (10)

1.一种基于笔式和触屏交互的3D游戏的交互方法,其特征在于,所述方法包括:
在Unity商城中挑选合适的资源、建立并调整每一关的游戏场景;所述游戏场景包括物体、地板和礼物盒;
获取笔或触屏输入,识别输入手势的产生,在手势发生、持续或停止时调用相应的处理函数,来取消物体选择、选择触屏手势针对游戏物体或整个镜头画面;
根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放;
通过改变物体的重力属性使得笔拖拽时不受重力,利用射线系统画出游戏物体的竖直投影线以体现物体深度,使用HighlightingSystem插件使被选择的物体产生发光效果;
利用碰撞检测判断物体落地,利用触发检测判断物体接触礼物盒,并做出如下处理:
在地面上施加碰撞检测来判断物体是否落地,若落地则使血量-1,当血量为0时,弹出游戏失败窗口;
在礼物盒上施加触发检测,判断物体是否以不被笔拖拽的状态接触礼物盒,若是,则保持接触1s后开启倒计时,保持平衡3s后弹出通关窗口并根据输入手势确定是否切换游戏场景,在收到切换游戏场景的输入手势后,切换至对应的游戏场景;
在游戏场景里添加一个带有若干AudioSource的音效播放器,循环播放背景音乐,在点击UI、选择物体、物体落地、成功通关或接触礼物盒时播出对应音效。
2.根据权利要求1所述的方法,其特征在于,根据在游戏场景后方设置的隐形平面来接收触屏输入,设置两种触摸模式,分别为触屏针对所选择的物体和触屏针对整个画面。
3.根据权利要求2所述的方法,其特征在于,所述根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放包括:根据获取的输入手势对游戏场景进行移动或缩放,根据二指捏放手势控制物体的远近调节,根据单指滑动手势控制物体沿x轴或y轴旋转。
4.根据权利要求1所述的方法,其特征在于,所述利用射线系统画出游戏物体的竖直投影线以体现物体深度,包括:在被选中的物品下方竖直射出一根在游戏窗口不显示的射线,该射线与下方的物体形成一个交点,然后画出一根从被选中的物体的中心连到该点的线,该线用于指示被选中的物品所在的深度。
5.根据权利要求1所述的方法,其特征在于,所述在地面上施加碰撞检测来判断物体是否落地,若落地则使血量-1,包括:在游戏场景中的物体和地板加上网格碰撞器以使所述物体和地板具有碰撞功能,并在所地板上添加碰撞检测组件,进行碰撞检测,若检测到物体碰到地板,使该物体失效,并令该物体不能再被操作,同时让血量-1。
6.一种基于笔式和触屏交互的3D游戏的交互装置,其特征在于,所述装置包括场景界面模块、交互模块和建模模块;场景界面模块用于场景与界面UI控制,交互模块用于根据笔的选择、拖拽和/或触屏的z轴深度调距、旋转手势操纵场景内的物体,建模模块用于建模与场景的保存;
所述场景界面模块包括动画模块、场景模块、UI模块,所述场景模块包括场景搭建子模块和场景跳转子模块;
所述场景搭建子模块被配置为:在Unity商城中挑选合适的资源、建立并调整每一关的游戏场景,使用灯光渲染技术增加游戏场景的美观度,配置场景的初始参数;
所述场景跳转子模块被配置为:使用Unity的场景加载技术,控制游戏关卡的选择与跳转,并且设置一个参数来记录已通关的关卡与未解锁的关卡;
所述UI模块用于设计与绘制游戏场景内的2D界面,以及管理和所述2D界面有关的背包、数值系统、游戏流程;所述2D界面包括按钮和倒计时条;所述UI模块包括背包子模块、数值系统子模块和游戏流程控制子模块;
所述背包子模块被配置为:负责背包的用户界面设计、游戏物体的生成与各游戏物体的计数;所述背包是最初存放对应关卡内游戏物体的空间,当接收到背包打开指令时,生成相应的游戏物体;
所述数值系统子模块被配置为:记录并控制各个游戏关卡的时间限制倒计时、血量、通关星级,并设计相应的展示UI;
所述游戏流程控制子模块被配置为:控制游戏关卡的返回、暂停、重新开始功能,并设计相应的UI;
所述动画模块被配置为:在游戏开头制作运镜动画,使用Unity中的Animation系统,通过每一帧摄像头的移动来营造视角从远拉近的效果;
所述交互模块包括笔+触屏操纵模块、碰撞与触发检测模块、音效模块,其中笔+触屏操纵模块包括输入获取子模块、物体或镜头变换子模块、辅助子模块,碰撞与触发检测模块包括碰撞检测子模块和触发检测子模块;
所述输入获取子模块被配置为:获取笔或触屏输入,识别输入手势的产生,在手势发生、持续或停止时调用相应的处理函数,通过UI来取消物体选择、选择触屏手势针对游戏物体或整个镜头画面;
所述物体或镜头变换子模块被配置为:根据获取的输入手势,对物体进行选择、拖拽、远近深度调节、旋转,或对整个镜头画面进行移动与缩放;
所述辅助子模块被配置为:通过改变游戏物体的重力属性使得笔拖拽时不受重力,利用射线系统画出游戏物体的竖直投影线以体现物体深度,使用HighlightingSystem插件使被选择的物体产生发光效果;
所述碰撞与触发检测模块被配置为:利用碰撞检测判断物体落地,利用触发检测判断物体接触礼物盒,并做出相应处理;
所述碰撞检测子模块被配置为:在地面上施加碰撞检测来判断物体是否落地,若落地则告知场景界面模块的数值系统子模块,使血量-1;
所述触发检测子模块被配置为:在礼物盒上施加触发检测,判断物体是否以不被笔拖拽的状态接触礼物盒,若是,则保持接触1s后开启倒计时,保持平衡3s后通关;
所述音效模块被配置为:在游戏场景里添加一个带有若干AudioSource的音效播放器,循环播放背景音乐,在点击UI、选择物体、物体落地、成功通关或接触礼物盒时播出对应音效;
所述建模模块包括模型建立和渲染模块、场景存档模块,其中模型建立和渲染模块用于室外场景中所用的模型的建立与渲染,以及场景的保存,包括模型建立子模块和模型渲染子模块,场景存档模块用于将游戏场景内容进行持久化保存,以及将保存的场景内容重新加载,包括场景保存子模块和场景加载子模块;
所述模型建立子模块被配置为:通过3D建模及模型处理软件建立模型;
所述模型渲染子模块被配置为:利用3D渲染技术,对所建立的模型进行渲染优化、光影处理;
所述场景保存子模块被配置为:用数据序列化的方式将对象内容以数据流的方式持久化;
所述场景加载子模块被配置为:读取文件夹中保存的数据,将数据流解析回原本的游戏对象并加载到场景中。
7.根据权利要求6所述的装置,其特征在于,所述物体或镜头变换子模块被进一步配置为:通过场景的主镜头,根据获取的输入手势对游戏场景进行移动或缩放,根据二指捏放手势控制物体的远近调节,根据单指滑动手势控制物体沿x轴或y轴旋转。
8.根据权利要求6所述的装置,其特征在于,所述辅助子模块被进一步配置为:在被选中的物品下方竖直射出一根在游戏窗口不显示的射线,该射线与下方的物体形成一个交点,然后画出一根从被选中的物体的中心连到该点的线,该线用于指示被选中的物品所在的深度。
9.根据权利要求6所述的装置,其特征在于,所述碰撞检测子模块被进一步配置为:在游戏场景中的物体和地板加上网格碰撞器以使所述物体和地板具有碰撞功能,并在所地板上添加碰撞检测组件,进行碰撞检测,若检测到物体碰到地板,使该物体失效,并令该物体不能再被操作,同时与场景界面模块的数值系统子模块进行交互,让血量-1。
10.一种存储有指令的非暂时性计算机可读存储介质,当所述指令由处理器执行时,执行根据权利要求1至5中任一项所述的方法。
CN202210518203.4A 2022-05-12 2022-05-12 基于笔式和触屏交互的3d游戏的交互方法、装置及介质 Active CN114931746B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210518203.4A CN114931746B (zh) 2022-05-12 2022-05-12 基于笔式和触屏交互的3d游戏的交互方法、装置及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210518203.4A CN114931746B (zh) 2022-05-12 2022-05-12 基于笔式和触屏交互的3d游戏的交互方法、装置及介质

Publications (2)

Publication Number Publication Date
CN114931746A CN114931746A (zh) 2022-08-23
CN114931746B true CN114931746B (zh) 2023-04-07

Family

ID=82864510

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210518203.4A Active CN114931746B (zh) 2022-05-12 2022-05-12 基于笔式和触屏交互的3d游戏的交互方法、装置及介质

Country Status (1)

Country Link
CN (1) CN114931746B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102841700A (zh) * 2011-05-20 2012-12-26 索尼公司 用于3-d游戏的手写笔设备
CN104050859A (zh) * 2014-05-08 2014-09-17 南京大学 可交互数字化立体沙盘系统
CN104765455A (zh) * 2015-04-07 2015-07-08 中国海洋大学 基于敲击振动的人机交互系统
CN108920069A (zh) * 2018-06-13 2018-11-30 网易(杭州)网络有限公司 一种触控操作方法、装置、移动终端和存储介质
CN109933206A (zh) * 2019-03-26 2019-06-25 长安大学 一种基于Leap Motion的手指无接触绘图方法及系统
CN110215688A (zh) * 2019-07-04 2019-09-10 网易(杭州)网络有限公司 游戏对象的选择控制方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140354554A1 (en) * 2013-05-30 2014-12-04 Microsoft Corporation Touch Optimized UI

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102841700A (zh) * 2011-05-20 2012-12-26 索尼公司 用于3-d游戏的手写笔设备
CN104050859A (zh) * 2014-05-08 2014-09-17 南京大学 可交互数字化立体沙盘系统
CN104765455A (zh) * 2015-04-07 2015-07-08 中国海洋大学 基于敲击振动的人机交互系统
CN108920069A (zh) * 2018-06-13 2018-11-30 网易(杭州)网络有限公司 一种触控操作方法、装置、移动终端和存储介质
CN109933206A (zh) * 2019-03-26 2019-06-25 长安大学 一种基于Leap Motion的手指无接触绘图方法及系统
CN110215688A (zh) * 2019-07-04 2019-09-10 网易(杭州)网络有限公司 游戏对象的选择控制方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Visual Representation of Gesture Interaction Feedback in Virtual Reality Games;Heekyu Park;《2017 International Symposium on Ubiquitous Virtual Reality (ISUVR)》;20170630;第20-23页 *
网络游戏交互设计研究;刘一郎王喆;《工业设计》;20210220;第45-46页 *

Also Published As

Publication number Publication date
CN114931746A (zh) 2022-08-23

Similar Documents

Publication Publication Date Title
US11379105B2 (en) Displaying a three dimensional user interface
US11875012B2 (en) Throwable interface for augmented reality and virtual reality environments
US9898190B2 (en) Multi-touch object inertia simulation
US7474318B2 (en) Interactive system and method
Akaoka et al. DisplayObjects: prototyping functional physical interfaces on 3d styrofoam, paper or cardboard models
EP2469474B1 (en) Creation of a playable scene with an authoring system
Billinghurst et al. Advanced interaction techniques for augmented reality applications
CN111819522A (zh) 用于混合现实显示器中的虚拟内容的遮挡光标
Kin et al. Eden: a professional multitouch tool for constructing virtual organic environments
Kolsch et al. Multimodal interaction with a wearable augmented reality system
Jetter et al. " in vr, everything is possible!": Sketching and simulating spatially-aware interactive spaces in virtual reality
CN102460373A (zh) 表面计算机用户交互
Figueiredo et al. Advanced interaction techniques in virtual environments
JP2014531693A (ja) 動き制御されたリストスクローリング
Speicher et al. Designers, the stage is yours! medium-fidelity prototyping of augmented & virtual reality interfaces with 360theater
US9483873B2 (en) Easy selection threshold
Monteiro et al. Teachable reality: Prototyping tangible augmented reality with everyday objects by leveraging interactive machine teaching
CN114931746B (zh) 基于笔式和触屏交互的3d游戏的交互方法、装置及介质
Williams Finger tracking and gesture interfacing using the Nintendo® wiimote
Davidson An evaluation of visual gesture based controls for exploring three dimensional environments
CN111522439B (zh) 一种虚拟样机的修订方法、装置、设备及计算机存储介质
Wesson et al. Evaluating organic 3D sculpting using natural user interfaces with the Kinect
Yang et al. An intuitive human-computer interface for large display virtual reality applications
Weigel et al. ProjectorKit: Easing the Development of Interactive Applications for Mobile Projectors
Bauer Large Display Interaction Using Mobile Devices

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant