‫你好, 欢迎回来｡
‫现在, 我们已经为坦克和塔创建了处理死亡的能力,
‫我们看到这涉及到一些额外的步骤, 因为我们访问了玩家控制器, 以禁用输入和禁用显示鼠标光标｡
‫现在, 我们希望有自己的自定义播放器控制器类, 以便我们可以向其添加功能, 为我们处理这一点｡
‫然后我们想基于这个类创建一个蓝图, 这样我们就可以访问播放器控制器上的一些公开变量,
‫例如, 一旦我们实际开始显示鼠标光标, 要显示哪个鼠标光标｡
‫因此, 我们将创建一个播放器控制器类, 并添加启用和禁用输入功能｡
‫然后, 我们将创建一个蓝图, 并在蓝图中设置鼠标光标类型｡
‫现在你知道如何创建这个类了｡
‫因此, 您将为您的挑战创建一个播放器控制器类, 创建一个新的C++类,
‫并选择播放器控制器作为父类｡
‫把这个调叫做坦克, 播放器控制器或者类似的东西｡
‫完成后, 根据该类创建蓝图｡
‫现在, 一旦你有了蓝图, 你就可以把它指定为游戏模式蓝图中的默认玩家控制器｡
‫在游戏模式中这样做, 蓝图本身｡
‫现在暂停视频并为坦克创建播放器控制器类｡
‫好吧, 我会的
‫所以我又回到了编辑部｡
‫我将右键单击“新建C++类”并向下滚动, 我将看到播放器控制器是此处的一个选项｡
‫所以我将选择播放器控制器并命名我的新播放器控制器tune tank｡
‫播放器､ 控制器, 然后单击创建类｡
‫这是我的新播放器控制器类｡
‫下一步是在此基础上创建蓝图｡
‫我回到了编辑器中, 我没有告诉你要这样做, 但我将在我的蓝图文件夹中创建一个新文件夹,
‫名为“播放器控制器”｡
‫如果你想要相同的文件夹结构, 你可以现在创建这个文件夹, 如果你还没有这样做,
‫然后把你的播放器控制器蓝图移动到这个｡
‫如果您不知道如何将蓝图从一个文件夹移动到另一个文件夹, 这很简单｡
‫转到包含蓝本的文件夹, 单击并拖动到正确的文件夹, 然后单击“move here”（移动到此处）｡
‫现在, 我不想将我的投射物移动到这个文件夹中, 所以我只需要在内容浏览器中单击这里来取消该操作｡
‫现在我有了一个播放器控制器文件夹｡
‫我将右击并单击蓝图类, 在这个搜索中, 我将寻找卡通坦克, 玩家控制器,
‫并选择该类, 然后单击选择｡
‫现在我可以把这个哔声叫做下划线toon tank播放器控制器｡
‫所以我现在有了一个播放器控制器｡
‫现在我需要将其设置为默认的播放器控制器｡
‫所以我要去游戏模式文件夹, 打开哔哔声, 调整坦克, 游戏模式, 并打开完整的蓝图｡
‫这里我看到了播放器控制器类｡
‫我将点击下拉菜单, 选择BP调坦克, 播放器控制器和编译, 保存和关闭了｡
‫现在我们有了自定义播放器控制器类｡
‫我们已经准备好向其中添加一些功能｡
‫所以我想要的是一个函数, 它可以设置玩家的启用状态,
‫无论玩家是否被启用来添加移动坦克的输入｡
‫现在我打算在演员死的时候从游戏模式调用这个｡
‫所以我在这里创建一个公共区, 函数是空的.
‫我只需要调用这个set player enabled state, 它可以取一个布尔值, 称为B player enabled.
‫这样, 如果我们调用这个函数, 如果我们想启用播放器, 我们可以传入true,
‫如果我们想禁用播放器, 我们可以传入false｡
‫因此, 让我们在tune tank､ 播放器和控制器中实现此功能｡
‫这是我的函数, 当然我需要类名.
‫它将是一个调音器, 播放器, 控制器, 还有一个范围解析操作符｡
‫这个函数非常简单｡
‫它将检查B player enabled的值, 我们可以用一个简单的if检查来完成.
‫所以我会说如果B玩家被启用, 我想访问兵, 启用或禁用输入, 访问兵的方法是使用这个玩家控制器拥有的函数,
‫get pawn.
‫这个返回和一个卒和卒类具有这个功能｡
‫我们已经看到, Enable input和enable input需要一个播放器控制器, 这样我们就可以传入它｡
‫现在我得到了红色的曲线, 因为我们需要包含这个兵类类型,
‫我们可以很容易地看到这个兵的包含, 通过查看一个兵的虚幻引擎文档, 或者我们可以简单地转到我们的基本兵类,
‫它继承自一个兵｡
‫因为它继承自兵, 我们看到它需要包含兵头, 这样我就可以复制它的游戏框架,
‫斜线兵.
‫所以回到调坦克球员控制器｡
‫我可以将包含内容粘贴在顶部, 以去掉那些红色的波浪线｡
‫这就解决了B player enabled为true的情况, 但我们还需要一个LS情况｡
‫在LS的情况下, 我们将调用get pawn, 这里有一个类似于enable input的函数, 它被设计来禁用输入,
‫正如你可能猜到的, 它被称为, disable input｡
‫这还需要一个玩家控制器, 我们将在这里传递它｡
‫现在播放器控制器显示鼠标光标, 我们也要设置它｡
‫我们希望根据是否应启用播放器来设置它｡
‫所以不管B播放器使能的布尔值是多少, 我们都要将B显示鼠标光标设置为该值｡
‫所以我们要说B sho鼠标光标等于B播放器启用｡
‫现在, 我们还没有显示鼠标光标｡
‫我们会讲到这一部分的｡
‫我们希望在玩游戏时能看到鼠标光标, 这样我们就能知道坦克的目标｡
‫所以我们很快就会谈到这个问题｡
‫但是现在我们在玩家控制器中有一个很好的函数, 我们想在游戏模式中调用这个函数来告诉你我的意思｡
‫我将返回到游戏模式, 这是演员死亡功能, 您将看到我们禁用了输入,
‫并在此处设置了b显示鼠标光标｡
‫所以我之所以要有一个｡
‫函数, 这样我们就可以简单地调用该函数, 传入一个布尔值｡
‫在这种情况下, 我们将传入false, 这样我们将调用禁用输入函数, 并将传入B,
‫这样鼠标光标将被设置为false｡
‫所以我们现在可以简单地调用这个函数, 而不是调用tank get player controller返回一个player controller｡
‫我想有一个指针变量, 允许我们访问播放器控制器｡
‫在tune tank游戏模式下, 我将添加一个私有变量.
‫我会声明它的类型是A, tune tank, player, controller, 这是一个指针.
‫我将把这个调音称为坦克的玩家控制器, 我可以在调音坦克游戏模式下设置这个调音,
‫然后开始使用游戏静态｡
‫现在, 如果你想知道游戏静态是否有一个获得玩家控制器功能, 你是对的｡
‫这是一个方便的静态函数,
‫它需要一个世界上下文对象和一个玩家索引, 所以我们可以继续复制游戏静态的include, 并在开始Play中调用它｡
‫我在顶部看到, 我已经有了游戏静态, 这是因为我们已经在这里使用了它, 并开始播放, 以调用get
‫player--.
‫我们将在这里做同样的事情来设置播放器控制器指针｡
‫现在你应该知道怎么做｡
‫所以你为什么不暂停视频, 在这里做一个小的挑战, 只是设置的价值调谐坦克, 播放器控制器｡
‫好吧, 我会的
‫所以我们会说tune tank, player, controller,
‫我们把它设置成等于你的游戏静态的结果, get player controller, 我们知道世界上下文对象可以是这样的, player
‫index不是9而是0｡
‫当然, 我们知道这会返回一个播放器控制器, 而不是一个tune tank播放器控制器｡
‫就像我们对Tank做的那样, 我们要选角.
‫所以我会说cast to a tune tank player controller, 我们要转换get player controller的结果｡
‫在开始播放之后, 我们将有调音器和播放器控制器｡
‫现在我们可以回到这里,
‫而不是直接从坦克中获取播放器控制器, 我们可以检查以确保我们的变量tune坦克播放器控制器是有效的, 然后我们可以调用我们创建的函数｡
‫让我们回过头来看看｡
‫这叫做设置玩家启用状态, 在游戏模式下, 我们希望禁用输入并停止显示光标,
‫这意味着我们将为此传入false.
‫因此, 我们将调用tune tank､ player､ controller､ set player enabled state, 并为此传递false, 我们将使用tune
‫tank､ player controller, 这意味着我们需要包括tune tank､ player controller｡
‫在顶部, 我们将包括调音箱､ 播放器控制器｡
‫现在我们有了定义为OC的类型｡
‫让我们继续进行编译｡
‫在结束之前,
‫我们要做的最后一件事是进入我们的播放器控制器蓝图, 我希望你向下滚动到鼠标界面部分, 你会看到它写着“默认鼠标光标”｡
‫现在, 我们可以单击下拉菜单, 有许多不同的光标可供选择｡
‫我会选择十字准线｡
‫现在, 我们还没有显示鼠标光标, 但是一旦我们开始游戏, 我们就会显示光标.
‫当我们这样做的时候, 我喜欢它是十字光标, 而不是我们在看鼠标光标时总是看到的默认白色箭头｡
‫因此, 将默认的鼠标光标设置为十字光标, 一旦我们真正启用鼠标光标, 我们就可以看到这些十字光标｡
‫总之, 我们创建了一个自定义播放器控制器类, 并使用该类中的函数启用或禁用输入｡
‫我们还使用该函数根据传入的布尔值显示或隐藏鼠标光标｡
‫在我们创建的蓝图中, 我们设置了鼠标光标类型, 我们很快就会看到, 当游戏开始时,
‫鼠标光标开始显示时, 十字光标是什么样子｡
‫干得好｡
‫我们现在有了这个玩家控制器, 我们准备继续实现游戏功能｡
‫所以我们在下一个视频中再见｡