在北欧游戏大会上,我们展示了在黑莓10的辅助下使用您最喜爱的手柄和一个微型的HDMI电缆连接到电视机搭建一个游戏控制系统是一件多么容易的事情。Unity的开发人员喜欢它并且想知道他们的游戏如何可以利用这一点。这篇博文将告诉你添加黑莓10手柄支持是多么容易。
背景
黑莓10的原生SDK提供了一个原生手柄API支持以下游戏手柄
- Moga Pro Game controller
- SteelSeries Free controller
- Gametel controller
- Nintendo Wii Remote
以后还会有更多的游戏手柄将被支持,并且这种API的原生游戏不需要改变自己的代码来支持它们。
Unity SDK使用上面列出的手柄提供的即插即用支持来进入系统API。该API允许访问连接手柄的名称,轴值和当前按下的按钮。
让我们看看如何设置并充分利用黑莓10的手柄支持Unity游戏。
第1步:配置手柄的模拟摇杆
你需要做的第一件事是设置输入设置项目设置,如下图所示:
如果你的游戏将受控于模拟操纵杆,设置涉及指定名称轴手柄上的模拟摇杆。例如,一个自上而下的射击游戏,用模拟操纵杆控制球员的运动和其他射门方向,将需要4个轴进行设置:
轴1 – 对应于右操纵杆的水平运动(X轴)
轴2 – 对应于右操纵杆的垂直运动(Y轴)
轴3 – 对应的水平移动左摇杆(第3轴)
轴4 – corresponsds的左摇杆(第4轴的垂直运动)
下图所示为一个参考设置:
有一个很酷的功能就是2个操作杆可以在BB10上立刻配对。如果你的游戏支持多人游戏的话,你可以便捷的启动第二个操作杆。
第二步:配置手柄按钮
其实,这里不需要配置。手柄的按键已经预先映射到KEYCODE,可以直接开始你的游戏了。例如:Moga Pro和SteelSeries的手柄KEYCODE在BB10上的映射如下所示:
第三步:读取手柄输入
下面的C#脚本显示了集成游戏手柄的支持是多么的简单:
using UnityEngine;
using System.Collections;
using System;
public class PlayerJoystickClass : MonoBehaviour {
private Transform originalTransform;
private string currentButton;
private float[] axisInput = new float[4];
// Use this for initialization
void Start () {
for(int i = 0; i axisInput[i] = 0.0f;
}
// Update is called once per frame
void Update () {
// Get the Gamepad Analog stick’s axis data
axisInput[0] = Input.GetAxisRaw(“Axis 1″);
axisInput[1] = Input.GetAxisRaw(“Axis 2″);
axisInput[2] = Input.GetAxisRaw(“Axis 3″);
axisInput[3] = Input.GetAxisRaw(“Axis 4″);
// Get the currently pressed Gamepad Button name
var values = Enum.GetValues(typeof(KeyCode));
for(int x = 0; x if(Input.GetKeyDown((KeyCode)values.GetValue(x))){
currentButton = values.GetValue(x).ToString();
}
}
// Transform the object.
transform.Translate(0, 0, axisInput[1] * 0.05f);
transform.Rotate(0, 0, axisInput[2]*3);
if (currentButton.CompareTo(“Joystick1Button0″))
{
// Fire something
}
}
// Show some data
void OnGUI()
{
GUI.TextArea(new Rect(0, 0, 250, 40), “Current Button : ” + currentButton);
GUI.TextArea(new Rect(0, 50, 250, 40), “Axis 1 : ” + axisInput[0]);
GUI.TextArea(new Rect(0, 100, 250, 40), “Axis 2 : ” + axisInput[1]);
GUI.TextArea(new Rect(0, 150, 250, 40), “Axis 3 : ” + axisInput[2]);
GUI.TextArea(new Rect(0, 200, 250, 40), “Axis 4 : ” + axisInput[3]);
}
}
首先,我们定义一个浮动方向来接受从模拟操纵杆获得的4轴输入值和一个字符串来识别当前按下的按钮。要获得一个轴的值,我只是简单的调用Input.GetAxisRaw(),然后用它来改造我的对象。当前按下的按钮,可以通过简单地检查上述手柄映射对应的KEYCODE。
注:许多游戏手柄仍然不支持模拟操纵杆(例如:Wii,Gametel等。),有关通过方向键控制为核心的游戏是值得加入的。
第4步:触摸控制和手柄之间切换
假设你的蓝牙是打开的,并且和手柄是配对的,你将可以通过简单地检测输入来探测到你的手柄。在你的脚本中更新获取到的手柄的名字为“BlackBerry Gamepad”。当配对之后,你就可以关闭所有触摸手柄然后把游戏设置到“控制台模式”,然后使用真正的手柄来控制了。
注:“BlackBerry Gamepad”为公测期间所有BB10支持的游戏手柄返回的标识符。我建议在正式发布之后再次检查BB10返回的手柄标识符有无任何变化。
现在你们知道了。你的Unity游戏将可以获得模拟手柄的支持,更棒的是我们将致力于让他支持所有很酷的手柄,而且并不需要去改变任何一行代码。
任何问题、评论、关注等等可以直接发送邮件到 rmadhavan@blackberry . com 或者直接在推特上联系 @rmadhavan7 .