热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

提升BB10平台Unity游戏的手柄兼容性与操作体验

在BB10上增加对Unity游戏的手柄支持在北欧游戏大会上,我们展示了在黑莓10的辅助下使用您最喜爱的手柄和一个微型的HDMI电缆连接到电视机搭建一个游戏控制系统是一件多么容易

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

在北欧游戏大会上,我们展示了在黑莓10的辅助下使用您最喜爱的手柄和一个微型的HDMI电缆连接到电视机搭建一个游戏控制系统是一件多么容易的事情。Unity的开发人员喜欢它并且想知道他们的游戏如何可以利用这一点。这篇博文将告诉你添加黑莓10手柄支持是多么容易。

背景

黑莓10的原生SDK提供了一个原生手柄API支持以下游戏手柄

  1. Moga Pro Game controller
  2. SteelSeries Free controller
  3. Gametel controller
  4. Nintendo Wii Remote

以后还会有更多的游戏手柄将被支持,并且这种API的原生游戏不需要改变自己的代码来支持它们。

Unity SDK使用上面列出的手柄提供的即插即用支持来进入系统API。该API允许访问连接手柄的名称,轴值和当前按下的按钮。

让我们看看如何设置并充分利用黑莓10的手柄支持Unity游戏。

第1步:配置手柄的模拟摇杆

你需要做的第一件事是设置输入设置项目设置,如下图所示:

image04

如果你的游戏将受控于模拟操纵杆,设置涉及指定名称轴手柄上的模拟摇杆。例如,一个自上而下的射击游戏,用模拟操纵杆控制球员的运动和其他射门方向,将需要4个轴进行设置:

轴1 – 对应于右操纵杆的水平运动(X轴)

轴2 – 对应于右操纵杆的垂直运动(Y轴)

轴3 – 对应的水平移动左摇杆(第3轴)

轴4 – corresponsds的左摇杆(第4轴的垂直运动)

下图所示为一个参考设置:

image03

有一个很酷的功能就是2个操作杆可以在BB10上立刻配对。如果你的游戏支持多人游戏的话,你可以便捷的启动第二个操作杆。

第二步:配置手柄按钮

其实,这里不需要配置。手柄的按键已经预先映射到KEYCODE,可以直接开始你的游戏了。例如:Moga Pro和SteelSeries的手柄KEYCODE在BB10上的映射如下所示:

image00

image01

第三步:读取手柄输入

下面的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等。),有关通过方向键控制为核心的游戏是值得加入的。

image02

第4步:触摸控制和手柄之间切换

假设你的蓝牙是打开的,并且和手柄是配对的,你将可以通过简单地检测输入来探测到你的手柄。在你的脚本中更新获取到的手柄的名字为“BlackBerry Gamepad”。当配对之后,你就可以关闭所有触摸手柄然后把游戏设置到“控制台模式”,然后使用真正的手柄来控制了。

注:“BlackBerry Gamepad”为公测期间所有BB10支持的游戏手柄返回的标识符。我建议在正式发布之后再次检查BB10返回的手柄标识符有无任何变化。

现在你们知道了。你的Unity游戏将可以获得模拟手柄的支持,更棒的是我们将致力于让他支持所有很酷的手柄,而且并不需要去改变任何一行代码。

任何问题、评论、关注等等可以直接发送邮件到 rmadhavan@blackberry . com 或者直接在推特上联系 @rmadhavan7 .



推荐阅读
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文介绍了两种方法,用于检测 Android 设备是否开启了开发者模式。第一种方法通过检查 USB 调试模式的状态,第二种方法则直接判断开发者选项是否启用。这两种方法均提供了代码示例和详细解释。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • andr ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 创建一个功能齐全的联系我们表单,包括布局和样式设计。 ... [详细]
author-avatar
苦咖啡青柠檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有