热门标签 | 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 .



推荐阅读
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
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社区 版权所有