官方提供的游戏模式是在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按钮进行跳跃啦。
本节完,下一节我们接续讨论如何将视角改成「固定过肩视角」。
系列文章
- Unity3D游戏开发-修改LEGO microgame的操控模式以适合在手机上游玩01-添加跳跃虚拟按键【当前文章】
- Unity3D游戏开发-修改LEGO microgame的操控模式以适合在手机上游玩02-将视角改为「固定过肩视角」