Silverlight.XNA(C#)跨平台3D游戏研发手记:(十)3D 场景与控制设计①

模型和骨骼动画仅仅是开启3D游戏的敲门砖,置入基于摄像机的场景设计方能呈现最完美的3D游戏。本节,我们依旧从简单着手,一步步创建基于模型的3D游戏场景。

XNA4.0学习指南(中文)》是一本绝对值得一看的好书,对于3D游戏的基础知识、概念以及简单应用讲解非常全面。比如书中提到关于XNA内置了创建摄像机的方案代码,根据该提示我们便可轻松实现一个名为Camera3D的类:

Camera3D

摄像机是我们观查3D世界的窗口,很多游戏开发者会亲切的称之为“上帝之眼”。毫不夸张的说,有了它,市面上一切3D游戏视觉设定都能随意实现。

比如“第一人称视角”的RPG和FPS,经典代表作有《魔法门》,《反恐精英》等:


第一人称视角的最大特点是玩家置入感强,屏幕就好比玩家的眼睛,玩家通过屏幕看去仿佛置身其中,身临其境般感觉,非常真实。

当然,在此基础上又进化出来了“第三人称平视”视角,该视角很好的规避了“第一人称视角”中存在的视觉死角以及容易产生眩晕等问题,动作感及玩家操控体验更强,逐渐成为3D游戏,尤其是动作和射击类3D游戏的主流视角。

经典代表作有ACT《鬼泣》和TPS《全球使命》等:


而“第三人称俯视”视角则是我们最最常见的游戏视角,该视角非常有利于玩家时刻观察大范围周边环境,视觉面广,立体感强,操作尤为爽快。应该感谢网游,使之能够成为目前绝大多数玩家最钟爱的3D(2.5D)游戏视角模式。经典游戏耳熟能详,举不胜举,比如ARPG《暗黑破坏神》和SLG《英雄无敌》:


总体来说,游戏视角的选取应该符合游戏本身的性质以及匹配游戏的核心玩法,像《刺客信条》等神作,为了在不同动作、环境时得到最好的玩家操控体验,采用了极为复杂的动态视角切换技术。当然还有比如《上古卷轴5》和《辐射3》等大作,为了不失去任何玩家,系统可根据玩家自身适应性与操作习惯选择相应的特定视角等等。

通过对以上案例的分析,本人只想向大家传递一个思想:开发3D游戏若能很好的把握住摄像机的运作原理,对于3D游戏场景设计来说,一切都是小Case。

接下来,为了让大家更进一步理解3D摄像机,以上一节中的骨骼动画角色作为主角,以3DMAX导出的FBX格式建筑模型模拟游戏实际场景,再根据之前创建的摄像机代码,通过修改其中的Position和Target两个关键参数即可调节出任意3D视角:

当我们将摄像机置于主角的眼睛位置,并同时看向主角的正前方时,此时便形成了“第一人称视角”(通常我们会在屏幕正中心放置一个十字准心,用于方向与目标的定位):



当摄像机置于主角身边某处(比如正后方)并穿过主角看向前方,同时仅作围绕主角的垂直方向旋转时,便形成了“第三人称平视”视角:



将摄像机固定于主角的上空,并呈一定角度的倾斜对准主角脚底俯视时,便形成了“第三人称俯视”视角:



其实很简单对吧,不妨将摄像机看作是我们的游戏屏幕,那么各类视角的实现其实都不过如此。

最后,为了配合Windows Phone等移动设备独特的操作方式,按照游戏玩家们的传统习惯,即左手控制角色移动,右手控制行为指令;那么我们便可创建出一个名为Controller的“虚拟拇指摇杆控制器”类,并分别置于屏幕左右两边:

Controller

在本节的Demo中,左手遥控杆用来移动角色。需要说明一点,基于XNA右手坐标系下,一个场景模型在3DMAX中以(0,0,0)坐标导入进游戏中,角色若要在其表面上移动,改变的不是X、Y值,而是X、Z值,Y值代表实际高低深度,这与后面章节将要讲到的HeightMap有很大却别:

右手遥控杆则用来旋转摄像机和角色(模拟PC中的鼠标右键按住不放时的场景旋转功能),实际游戏开发中大家可以在此基础上作更进一步设计,比如单击、双击、长时按压以实现主角攻击、射击、特技、魔法等行为,使得遥控杆功能得以最大化,满足游戏更多的操控需求:


本节源码中集成了EngineNine源码的核心部分,源码下载地址:(WP)SLXnaGame2

手记小结:本节主要讲解了基于不同视角的3D场景搭建以及传统的基于遥控杆的游戏操控功能实现,也算是非常简单的3D游戏开发入门级场景设计知识。后续章节我将在本节源码的基础上进行深度拓展,通过搭建出各种类型的经典3D游戏Demo案例向大家展示SL.XNA在开发跨平台3D游戏开发方面的强大与高效,敬请关注。

推荐参考:NowpaperWilliams关于Windows Phone的游戏开发博客。