官方提供的游戏模式是在PC端使用键盘控制,如果直接导出APK安装在手机上,虽然游戏可以运行但无法控制人物移动。所以我们需要为游戏添加虚拟按键或虚拟摇杆的功能。
这已经超出官方这个游戏编辑器的本意了,所以需要做很多工作,需要研读官方源码搞清楚动作控制的逻辑。然后再寻找方案实现虚拟按键。

本文将指导你为游戏添加一个控制人物跳跃的虚拟按键。

完成效果(虚拟按键在左下角)

开始

  • 新建一个VKey类。
using System;
using UnityEngine;
using UnityEngine.EventSystems;

namespace CL
{
    public class VKey : MonoBehaviour, IPointerUpHandler, IPointerDownHandler
    {
        public String m_keyName;
        protected bool m_isPressing;

        private void Start()
        {
            m_isPressing = false;
        }

        public void OnPointerDown(PointerEventData eventData)
        {
            if (!m_isPressing)
            {
                m_isPressing = true;
                Debug.Log("KeyDown:" + m_keyName);
            }
        }

        public void OnPointerUp(PointerEventData eventData)
        {
            m_isPressing = false;
            Debug.Log("KeyUp:" + m_keyName);
        }
    }
}
  • 再新建一个子类继承VKey
namespace CL
{
    public class VKeyJump : VKey
    {
        public bool IsJumpPressing()
        {
            bool tmp = m_isPressing;
            if (m_isPressing)
            {
                // 当被检测到按键按下时只返回一次true,立即切换回false,防止重复触发跳跃
                m_isPressing = false;
                return true;
            } else
            {
                return false;
            }
        }
    }
}
  • 找到并双击打开场景「LEGO Tutorial」
  • 在GameHUD项目下的Cavans上点右键,添加一个button控件,并为其命名为btnJump

    添加完以后的树结构:
  • 选择btnJump下层的Text项目,右侧的Inspector中修改按钮上显示的文字为Jump,并调整大小样式等,将其拖动到合适的位置,由于我们添加的是UI控件所以是2D的,运行的时候不管3D视角如何改变都会始终显示设置好的位置上并处于最顶层。

    比如我将其放置在了左下角
  • 再次选择btnJump项目,点击在Inspector中下方的「Add Component」,搜索框中输入vkey,添加VKeyJump。这一步是将我们刚才写的类绑定在这个按钮上。当按钮被按下/放开时会去调用类里面的「OnPointerDown」和「OnPointerUp」函数。也就是回调函数或事件函数。
  • 添加以后会出现在Inspector中,为KeyName起一个名字,便于识别输出的Log是哪一个按钮中打印的。注意,这里之所以可以设置KeyName是因为我们在类中定义了一个公开的名为KeyName的字符串成员变量。这里就自动出现配置界面了,很方便。
  • OK,准备工作完成,接下来我们需要修改官方源程序了。官方程序中判定人物跳跃的地方在文件「MinifigController.cs」中。
    首先在MinifigController类中添加一个我们的虚拟键成员变量:

    public VKeyJump vKeyJump;

    然后往下找到350行左右就是判定跳跃键(空格)是否被按下的地方。

    这里使用「Input.GetButtonDown("Jump")」获取键盘space是否被按下。「Jump」这个名字跟键盘space的绑定在Unity菜单「Edit - Project Settings - Input Manager」里。

    为了不影响原来的判定我们需要在这里加一个我们自己的判定,用于检测虚拟按键是否被按下。
    我们在原来的条件上加了一个或条件,当我们的虚拟按键被按下的时候这个函数会返回true,也就是不管是空格被按下或者我们的按钮被按下都让人物跳跃。
    修改完的条件如下

    if (Input.GetButtonDown("Jump") || vKeyJump.IsJumpPressing())
  • 最后,将btnJump绑定到人物对象上去。在左侧选择「Player Minifig」,右侧「Minifig Controller」里面的属性「V Key Jump」栏指定「btnJump」即可绑定。(也就是将按钮的实例赋值给上面定义的成员变量)

大功告成,运行游戏看看效果吧,现在你不光可以用空格键跳跃,也可以点击Jump按钮进行跳跃啦。

本节完,下一节我们接续讨论如何将视角改成「固定过肩视角」。

系列文章

Last modification:April 26, 2021
If you think my article is useful to you, please feel free to appreciate