紧接上回,本篇文章将和大家一同整理总结UE4关于角色网格、动画、子弹类和HUD的简单实现。 (五)角色添加网格
Character类为我们默认创建了一个SkeletaMeshComponent组件,所以我们仅仅需要做的就是使用哪一个静态网格模型。接下来我们为我们的FPSCharacter类创建一个蓝图,这样我们可以简单的把资源指定给静态网格模型这里,并且方便以后操作添加的组件。作为开始,我们首先要导入一个第三人称的静态网格模型,最后我们设置成两个网格,一个是我们自己看的,另外一个是其他人看到的。
1.添加一个完整的全身的网格,现在点击这里载入资源吧。我把我们要用到的所有资源全部放进去了,GenericMale.fbx文件就是有全身网格的,HeroFPP.FBX是等下我们要用到的自己看自己只有胳膊和武器的网格,Sphere.FBX是个球体网格模拟子弹,crosshair.TGA是瞄准的十字准心,FPP_Animations文件夹存放的是胳膊和武器的那个网格的用的的动画。这是我的目录结构,仅供参考。 ![](http://img.blog.csdn.net/20150313164253297?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 大家把他们都载入进来吧,注意一点就是,注意载入全部,比如载入网格,需要勾选载入材质,载入动作的时候,要选择网格,如下: ![](http://img.blog.csdn.net/20150313164653868?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 好了,关于资源载入的问题,就一次性说清,以后就不说了。 2.在蓝图文件夹内,新建蓝图 ![](http://img.blog.csdn.net/20150313164921698?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![](http://img.blog.csdn.net/20150313165154581?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 这里注意!在下拉框中选择FPSCharacter,使其作为蓝图的父类,给蓝图命名为“BP_FPSCharacter”,打开它。
3.选中Mesh,指定网格,并把Mesh的z轴值改为-88 ![](http://img.blog.csdn.net/20150313165432970?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![](http://img.blog.csdn.net/20150313165442377?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTcwNzA3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
完成以后就应该是这样了,为什么是-88?因为是已经调整好的数值,当使用自己的网格模型时,需要自己调整,最终目标是 使得网格被外面的胶囊组件包裹,并且方向为箭头所指向的方向。这将会使得模型在世界中正确行走,方向正常。可以直接在视图中调整,也可以直接设置数值。 4.编译保存蓝图,现在,我们要告诉我们的游戏模型使用最新我们创建的蓝图类来作为游戏角色的pawn物体,而不是我们之前创建的父类:FPSCharacter。返回VS,在模式的CPP文件构造函数中,删除 [cpp] view plaincopyprint?
- DefaultPawnClass = AFPSCharacter::StaticClass();
并添加如下代码:
[cpp] view plaincopyprint?
- AMyNewFPSGameMode::AMyNewFPSGameMode(const FObjectInitializer& ObjectInitializer)
- : Super(ObjectInitializer)
- {
- //DefaultPawnClass = AMyNewFPSCharacter::StaticClass();
-
- static ConstructorHelpers::FObjectFinder<UBlueprint> PlayerPawnObject(TEXT("Blueprint'/Game/Blueprints/BP_FPSCharacter.BP_FPSCharacter'"));
- if (PlayerPawnObject.Object != NULL)
- {
- DefaultPawnClass = (UClass*)PlayerPawnObject.Object->GeneratedClass;
- }
- }
(这里提前说一下,大家无视我的类名,按照自己的来即可)
这里有非常重要的一个知识点:在C++中引用蓝图(这样,就可以打通C++和蓝图了!),更准确的说应该是引用资源,这里的蓝图是以资源出现,等下我们也会发现在引用十字瞄准点的时候,使 用的是同样的方法,那就是:
[cpp] view plaincopyprint?
- static ConstructorHelpers::FObjectFinder<UBlueprint> PlayerPawnObject(TEXT("Blueprint'/Game/Blueprints/BP_FPSCharacter.BP_FPSCharacter'"));
TEXT里面的是资源的路径,获取资源路径有个小技巧,就是在内容浏览器中右键资源,选中复制引用命令,就会把具体的位置复制到剪贴板中了。
5.回到编辑器,选择编译,等待编译成功进入游戏测试。如果你移动摄像机,你会发现角色的影子,按下F1+Shift键,来获得鼠标指针,点击上面的弹出,这 时候就可以在世界中随意的移动摄像机来看到角色的网格。
|