【知识摘录】Unity3D PC游戏实现手柄的震动(Vibration)

发表于2016-10-23
评论0 7.5k浏览
  今天小编为大家分享一下, 手柄如何做到能带震动的效果,说到手柄的震动可以给游戏增加更好的体验,如主角受伤的时候,手柄会有震动的效果,那么会让玩家有更好的体验..
  其实实现手柄震动功能的方法也是有很多的,如利用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);
    }
}
   3、最后插上手柄,就可以运行看效果啦!


   看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
  福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!
腾讯GAD游戏程序交流群:484290331

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引