发明内容
本发明提供一种基于Unity3D引擎提供的Animator动画管理器,提供了一套基于2D手势操作,实现2D界面操作改变3D角色模型注视效果的解决方案。达到减少开发人员重复开发过程,方便开发人员快速利用该方案实现不同的软件或游戏效果。
本发明的技术方案第一方面为一种基于Unity3D的2D坐标映射操作3D角色模型注视的方法,所述方法包括以下步骤:
A、使用有向图对角色模型的运行时对象的引用、依赖状况进行引用关联;
B、将角色模型对象作为最顶层,并且将动画器和注视管理控件的组件依附于该角色模型对象;
C、获得输入设备屏幕的坐标,建立2D屏幕坐标与注视点3D坐标的互相映射;
D、调用动画器的主视点和权重方法的设置函数,控制3D角色模型的注视方位。
进一步,所述步骤A包括:
配置图节点共有的类型对象包括角色模型、注视管理控件、注视目标对象;
将角色模型引用至注视管理控件;
当角色模型实例化时,将角色模型引用至动画器;
当注视管理控件进行实例化时,将注视管理控件引用至动画器;
当注视管理控件实例化成功时,将角色模型引用至注视管理控件。
进一步,所述步骤B包括:
通过动画器的注视位置接口来调用目标的位置属性达到注视效果,并在注视管理控件添加约束注视对象范围参数,该参数包括管理注视对象ID、注视对象左右移动范围、注视对象上下移动范围和注视对象翻滚移动范围。
进一步,所述步骤C包括:
直接触碰屏幕取得的屏幕坐标;或者
通过UI相机的世界至屏幕点接口,来计算获得的屏幕坐标。
进一步,所述步骤C还包括:
设屏幕中心点为原点,获得输入的屏幕坐标,取得通过2D坐标映射注视管理控件的注视对象的约束范围参数,并转换为3D坐标并赋值给注视管理控件的目标的位置属性。
进一步,所述步骤C还包括:
划分2D屏幕区域,取屏幕中心点为原点a(x1,y1),取任意屏幕坐标b(x2,y2),计算得到c=((x2-x1)/x1,(y2-y1)/y1)=(x3,y3),其中,z轴的坐标默认不变,c乘以约束相关参数得到的注视对象坐标。
本发明的技术方案第二方面为一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,所述处理器执行所述程序时实施上述的步骤。
本发明的技术方案第三方面为一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实施上述的步骤。
本发明的有益效果为:
提出一种基于Unity3D的屏幕手势操作3D角色模型注视的解决方案,使开发人员在进行3D模型自定义动作行为、交互等开发场景时,可以简化开发过程,减少开发工作量并得到较好的3D模型的注视效果。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
参考图1,根据本发明的方法包括以下步骤:A、使用有向图对角色模型的运行时对象的引用、依赖状况进行引用关联;B、将角色模型对象作为最顶层,并且将动画器和注视管理控件的组件依附于该角色模型对象;C、获得输入设备屏幕的坐标,建立2D屏幕坐标与注视点3D坐标的互相映射;D、调用动画器的主视点和权重方法的设置函数,控制3D角色模型的注视方位。
下面通过多个实施例来进一步描述上述步骤。参照图2,首先各类型对象引用关系。
1.使用有向图对该方案的运行时对象的引用、依赖状况进行抽象:
图节点共有以下类型:各类型对象引用关系
ObjectPlayer(角色模型,GameObject类型)
LookAtTarget(注视管理控件,MonoBehaviour继承对象)
Animator(动画器)
ObjectTarget(注视目标对象,GameObject类型)
图的边包含以下情况:
ObjectPlayer->LookAtTarget当一个ObjectPlayer有Animator组件时有此依赖关系
ObjectPlayer->Animator当ObjectPlayer实例化时有此引用关系
LookAtTarget->Animator当LookAtTarget实例化成功时有此引用关系
LookAtTarget->ObjectTarget当LookAtTarget实例化成功时有此引用关系
LookAtTarget->ObjectPlayer当LookAtTarget需要判断ObjectPlayer的Animator是否存在时有此引用关系。
2.ObjectPlayer为最顶层,Animator及LookAttarget组件依附于ObjectPlayer。初始顺序为ObjectPlayer->Animator->LookAtTarget,ObjectTarger为LookAtTarget的一个引用对象,可以是除了ObjectPlayer之外的任意对象并赋予个体LookAtTarget的target属性,其类型为GameObject,通过Animator.SetLookAtPosition接口调用target的position属性达到注视效果,并在LookAtTarget添加约束注视对象范围参数:
target -->管理注视对象
pitchArea —>(pitch1,pitch2)注视对象左右移动范围
yawArea —>(yaw1,yaw2)注视对象上下移动范围
rollArea —>(roll1,roll2)注视对象翻滚移动范围。
3、2D屏幕坐标与注视点3D坐标的互相映射。
获得输入设备屏幕坐标有两种情况:一种是直接触碰屏幕取得的屏幕坐标,一种是对象的position属性通过UI相机的WorldToScreenPoint接口计算获得的屏幕坐标。
设屏幕中心点为原点a(x0,y0),获得输入的屏幕坐标b(x1,y1),取得通过2D坐标映射LookAtTarget的pitchArea、yawArea、rollArea约束范围等参数转换为3D坐标并赋值给LookAtTarget.target的position属性。
然后,最终调用Animator的SetLookAtPosition、SetLookAtWeight方法实现最终注视效果。
在一些实施例中,可以针对手势操作改变角色模型注视相机的使用行为,具体步骤如下:
a.初始化3D角色模型ObjectPlayer,初始Animator组件;添加LookAtTarget组件,管理Animator组件,实例化并管理注视对象ObjectTarget
b.初始化配置及读取相关注视参数:
Animator.weight—>(范围0-1)注视的全局权重,倍增其他参数
Animator.bodyWeight—>(范围0-1)确定注视的身体多少被涉及
Animator.headWeight—>(范围0-1)确定头部的头部多少被涉及
Animator.eyesWeight—>(范围0-1)确定注视的眼睛多少被涉及
Animator.clampWeight—>(范围0-1)0.0表示角色完全无约束运动,1.0表示完全被限制(注视变为不可能),0.5表示能移动可能范围的一半(180°)
ObjectTarget实例化后赋值给LookAtTarget.target属性
LookAtTarget.pitchArea—>(pitch1,pitch2)注视对象左右约束移动范围
LookAtTarget.yawArea—>(yaw1,yaw2)注视对象上下约束移动范围
LookAtTarget.rollArea—>(roll1,roll2)注视对象翻滚约束移动范围
c.LookAtTarget添加void OnAnimatorIK()接口使用Animator.SetLookAtPosition接口取得target的position属性,使用Animator.SetLookAtWeight接口取得Animator的(weight、bodyWeight、headWeight、eyesWeight、clampWeight)属性。
d.2D屏幕坐标与注视点3D坐标的映射。
在一些实施例中,可以针对角色模型注视UI相机的使用行为,具体步骤如下:
初始化3D角色模型ObjectPlayer,初始Animator组件;添加LookAtTarget组件,管理Animator组件,注视对象设置为当前的UI相机的GameObject;
上述的b,c步骤;
取得当前UI相机的position属,通过调用当前UI相机的WorldToScreenPoint接口获得当前UI相机的2D屏幕坐标screenUI2DPos,通过2D屏幕坐标与注释掉3D坐标的映射,达到实现角色注视相机的效果。
在一些实施例中,2D屏幕坐标与注视点3D坐标的映射可以包括以下步骤:
划分2D屏幕区域,取屏幕中心点为原点a(x1,y1),取任意屏幕坐标b(x2,y2),即得到
c=((x2-x1)/x1,(y2-y1)/y1)=(x3,y3);
z轴的坐标默认不变,c乘以约束相关参数得到一个最新的注视对象坐标;
targetPosition=(Mathf.Lerp(pitch1,pitch2,x3),Mathf.Lerp(yaw1,yaw2,y3),z);
并把该值赋予给LookAtTarget的target的position属性。即可映射屏幕坐标改变角色模型注视行为。
应当认识到,本发明实施例中的方法步骤可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。