【知识摘录】Unity3D PC游戏实现手柄的震动(Vibration)
发表于2016-10-23
今天小编为大家分享一下, 手柄如何做到能带震动的效果,说到手柄的震动可以给游戏增加更好的体验,如主角受伤的时候,手柄会有震动的效果,那么会让玩家有更好的体验..
其实实现手柄震动功能的方法也是有很多的,如利用Rewired插件,或者利用Itween插件,都能达到一样的效果,然而今天小编为大家介绍的是另外一款插件
XInputDotNet,这个插件可以在github上面下载学习【地址:https://github.com/speps/XInputDotNet/releases】[插件一般只适用于PC平台游戏] 。
好吧!废话不多说!直接看如何简单调用吧!
1、新建3d项目,导入下载好的XInputDotNet.unitypackage.
2、然后直接上测试代码【TestInputVibration.cs】。测试震动是否可用?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | using UnityEngine; using System.Collections; using System; using System.Text.RegularExpressions; public class TestInputVibration : MonoBehaviour { public string LeftMotorRange = "1" ; public string RightMotorRange = "1" ; public string DurationTime = "1" ; //震动的方向 XInputDotNetPure.PlayerIndex _type= XInputDotNetPure.PlayerIndex.One; void OnGUI() { // 文本显示 GUI.Label( new Rect(50, 100, 200, 50), "简单演示" ); GUI.color = Color.yellow; //按钮文字颜色 GUI.backgroundColor = Color.red; //按钮背景颜色 GUI.Label( new Rect(50, 150, 200, 30), "左边的震动幅度 :" ); LeftMotorRange = GUI.TextField( new Rect(200, 150, 200, 30), LeftMotorRange.ToString()); LeftMotorRange = Regex.Replace(LeftMotorRange, "[^0-9]" , "" ); GUI.Label( new Rect(50, 200, 200, 30), "右边的震动幅度 :" ); RightMotorRange = GUI.TextField( new Rect(200, 200, 200, 30), RightMotorRange.ToString()); RightMotorRange = Regex.Replace(RightMotorRange, "[^0-9]" , "" ); GUI.Label( new Rect(50, 250, 200, 30), "持续震动时间 :" ); DurationTime = GUI.TextField( new Rect(200, 250, 200, 30), DurationTime.ToString()); DurationTime = Regex.Replace(DurationTime, "[^0-9]" , "" ); if (GUI.Button( new Rect(50, 300, 200, 30), "震动手柄" )) { if ( string .IsNullOrEmpty(LeftMotorRange) || string .IsNullOrEmpty(RightMotorRange) || string .IsNullOrEmpty(DurationTime)) return ; StartCoroutine(SetVibration()); } } ///
/// 设置手柄震动 /// IEnumerator SetVibration() { // XInputDotNetPure.dll XInputDotNetPure.GamePad.SetVibration(_type, Convert.ToSingle(LeftMotorRange), Convert.ToSingle(RightMotorRange)); yield return new WaitForSeconds(Convert.ToSingle(DurationTime)); XInputDotNetPure.GamePad.SetVibration(_type, 0, 0); } } |