【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1532|回复: 0

在BB10上增加对Unity游戏的手柄支持

[复制链接]
发表于 2015-4-15 16:22:02 | 显示全部楼层 |阅读模式
在北欧游戏大会上,我们展示了在黑莓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.Length; i++)     
    axisInput = 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 < values.Length; 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(<axis名>),然后用它来改造我的对象。当前按下的按钮,可以通过简单地检查上述手柄映射对应的KEYCODE。
注:许多游戏手柄仍然不支持模拟操纵杆(例如:Wii,Gametel等。),有关通过方向键控制为核心的游戏是值得加入的。   
   
第4步:触摸控制和手柄之间切换假设你的蓝牙是打开的,并且和手柄是配对的,你将可以通过简单地检测输入来探测到你的手柄。在你的脚本中更新获取到的手柄的名字为“BlackBerry Gamepad”。当配对之后,你就可以关闭所有触摸手柄然后把游戏设置到“控制台模式”,然后使用真正的手柄来控制了。
注:“BlackBerry Gamepad”为公测期间所有BB10支持的游戏手柄返回的标识符。我建议在正式发布之后再次检查BB10返回的手柄标识符有无任何变化。   
现在你们知道了。你的Unity游戏将可以获得模拟手柄的支持,更棒的是我们将致力于让他支持所有很酷的手柄,而且并不需要去改变任何一行代码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-4-28 04:43

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表