Unreal Engine 4 虚幻引擎学习笔记(四)

Author Avatar
稻草人 11月 19, 2015

玩转C++之前还是先熟悉下blueprint吧~来做个小型FPS(First-person shooter),照着官网教程写吧,顺便记忆一下:)

刚升了win10 th2,内存管理比之前给力啊,不过GT740M的驱动没啥用,又从NVIDIA下了最新的驱动,估计进桌面慢也是这个原因~UE4又可以快速打开了:)

项目设置

  1. FPS0.png
  2. 重命名为HUD
  3. 直接复制HUD,再建2个Widget Blueprint,一个叫MainMenu,一个叫PauseMenu.

  4. Content Browser里打开First Person Character
    路径在Content>FirstPersonBP>Blueprints

  5. 在My Blueprint窗口新建变量

    FPS2.png

    Health,Float,default value:1.0
    默认值要编译后才能修改
    Energy,Float,default value:1.0
    Ammo,Integer,default value:25
    MaxAmmo,Integer,default value:25

    FPS3.png
  6. 在Event Graph里新建Event Begin Play,结点拖出来后选择Create Widget,并绑定类HUD

    FPS4.png
  7. Create HUD Widget的返回值拖出来选择Promote to Variable并重命名为HUD Reference(这个重命名可以直接在右侧名称里编辑HUD_Reference)

    FPS5.png

    图的含义是:游戏开始时创建HUD Widget Blueprint并将它保存为一个变量,方便之后的操作

  8. 拖出set的结点选择Add to Viewport

    FPS6.png

    这一步就是将HUD显示给玩家

  9. 设置Energy逻辑(每跳一次递减0.25)
    直接将Energy从My Blueprint拖到Event Graph,一个get,一个set,中间用Float - Float连接,如下:

    FPS7.png
  10. 设置Health逻辑(每按一次F键递减0.25)

    FPS8.png
  11. 设置Ammo逻辑(子弹>0时才能开火)
    找到Spawn Projectile开头作如下修改:

    FPS9.png

Spawn Projectile尾部作如下修改:
FPS10.png
表示每发射一次子弹Ammo减1

编译,保存,关闭

显示Health, Energy,Ammo

这边调的挺纠结的,play和make确实是两码事:(

  1. 打开HUD,添加一个Horizontal Box,在其下方再添加2个Vertical Box,再在Vertical Box下方各添加2个Text,2个Progress Bar,如下图

    FPS11.png
  2. 选中Horizontal Box将其放到左上角,并拖动来改变它的大小

    FPS12.png
  3. 选中2个Progress Bar,在Size里选择Fill,然后上层的Vertical Box,也选择Fill

    FPS13.png
  4. 改名
  5. 设置Health的progress bar为绿色,Energy的progress bar为橙色

    FPS15.png
  6. 为Ammo条设计UI
    FPS16.png)

  7. 将Ammo的Horizontal Box设为右上角

    FPS17.png

    目的是可以自适应屏幕

  8. 在UE编辑器的任务栏右上角切到Graph,并按下图添加结点

    FPS18.png

    As First Person Character右侧选择Promote to Variable
    这个图的含义是:检查玩家角色是否是First Person Character

  9. 编译,切回Designer标签,状态条绑定变量

    FPS19.png
  10. Ammo的25/25绑定变量

    第一个25的逻辑
第二个25的逻辑
  1. 编译,保存,可以玩了:)
    但是血条,能量,子弹为空时并没有任何异常FPS22.png

创建Main Menu

  1. 打开MainMenu,按下图添加元素(第二个Vertical Box比第一个多一个button)

    FPS23.png
  2. 将第一个Vertical Box改名为MainMenu,在右侧勾选isVariable,设置ZOrder为1

    FPS24.png

    意义是将这个置于图片的上方
    第二个Vertical Box改为Options,同理

  3. 将其它的重命名如下:

    FPS25.png
  4. 选中所有的button,在details面板里调整下Tint的颜色,并勾选Fill

    FPS26.jpg
  5. 下载 https://docs.unrealengine.com/latest/images/Engine/UMG/QuickStart/3/ExampleBackground.png 导入UE,在Image的Details里选择它

    FPS27.jpg

    在Designer里将这个图片填满整个区域,并且将Details里的Anchors改为全屏

  6. 选中所有的Vertical Box,将Anchors改为left-center

    FPS28.jpg
  7. OptionsMenuVisibility改为Hidden
    打算通过脚本来显示它

  8. 调整MainMenu,将其大小改成如下图所示:

    FPS29.png
  9. 将OptionsMenu和MainMenu重叠

    FPS30.png

编写MainMenu脚本

  1. 在MainMenu里切换到Graph,如下图操作

    FPS31.png
  2. 为每个button都添加On Clicked事件

  3. Onclicked(PlayButton)添加下面的结点

    FPS32.png
  4. Onclicked(OptionsMenu)添加下面的结点

    FPS33.png
  5. Onclicked(Setting)添加下面的结点

    FPS34.png
  6. Onclicked(ReturnButton)与Onclicked(PlayButton)相反

    FPS35.png
  7. Onclicked(QuitButton)添加下面的结点

    FPS36.png

    编译-保存-关闭

  8. Level窗口中找到Blueprints,Open Level Blueprint,并添加如下结点

    FPS37.png

    编译,关掉.

  9. 打开First Person Character蓝图,在Event Begin Play这一段末尾添加结点

    FPS38.png

    含义是:This will turn off the cursor and set the input for the player to Game Only
    编译,保存,关掉

  10. 打开Level窗口上方的Settings,World Settings,按如下设置

    FPS39.jpg

    没选FirstPersonCharacter的原因:as we do not want the player to be able to run around and shoot behind the Main Menu.

  11. 点击play,可以玩啦:(

    FPS41.png

    被官网文档坑啦,点击Play Game无任何反应,调试了好久,最后在论坛里找到了答案

    content In 4.5 if you point the same map, the UMG will disappear. But in 4.6, you don’t need to open the same level as it already open. Just add “Remove From Parent” in Widget blueprint, and it would do the trick.

    意思就是在MainMenu蓝图里直接删掉OpenLevel结点

    FPS40.png

折腾Pause Menu

  1. 打开PauseMenu蓝图,按下图添加元素

    FPS42.png
  2. 调整border的大小,使其填充整个窗口,并且改一下颜色,A的值改为0.5,这样可以半透明;Anchor也要改为填充

    FPS43.png
  3. 将Vertical Box水平,垂直居中

  4. 调整2个button的颜色

    FPS44.png
  5. 切到Graph标签,为ResumeButton添加点击事件

    FPS45.png

    最后个结点没看懂:(

    Here when the Resume Button is clicked, the input mode is set to game only and the cursor that is displayed when the Pause Menu is activated is removed. The Remove from Parent node is used to remove the actual Pause Menu widget from display before leaving the paused state by using the Set Game Paused node and leaving Paused unchecked.
    
  6. 新建一个function,命名为Remove HUD
    目的是remove the game HUD from the player's view when the Pause Menu is activated
    并添加如下结点

    FPS46.png
  7. 切到Event Graph标签,为QuitButton添加结点

    FPS47.png

    目的:When Quit is clicked, this will turn on the mouse cursor for menu navigation when returning to the Main Menu
    这边反而要加Open Level,为了切回MainMenu

  8. 打开FirstPersonCharacter蓝图,

    FPS48.png

    解释如下:

    When M is pressed, if the Pause Menu has been accessed before it will not need to create it again and will instead access the variable. If this is the first time the Pause Menu has been accessed it will create it then store it as a variable so it can be access later. In either case, the input mode is set to UI only before we display the Pause Menu (which we will do next).
    
  9. 显示Pause Menu

    FPS49.png
  10. 编译,保存,运行.

    FPS50.png