gpt4 book ai didi

c# - 使Android手机振动100ms C#

转载 作者:行者123 更新时间:2023-11-30 22:51:29 25 4
gpt4 key购买 nike

上周我在手机上尝试了几款游戏,发现有些游戏使用振动作为玩家的“反馈”发生了,比如:

  • 玩家撞到墙上;
  • 播放器完美启动
  • 玩家获得大奖...

等等...

我真的很喜欢给手机一点振动或摇晃,基本上可以通过输出告诉玩家一些重要的(对于游戏)发生这不仅仅是在屏幕上,也不是来自扬声器

我正在使用 开发我的游戏 Unity

在我的游戏中,我会让手机振动当玩家崩溃时,以及当他获得大奖时,就像我看到其他漂亮游戏所做的那样。

I've already tried using the default vibration: Handheld.Vibrate(), that worked, but it was lasting for too much time for my need and I wouldn't have been able to change anything in it.

我读过,要做到这一点,我需要编写一个单独的插件,或者使用一个已经存在的插件。我还没有找到任何可用的,而且不知道如何写一个!

我只需要调用类似 vibrateFor(100) 的方法,其中 100毫秒

一些游戏,比如“Perfect Slices”似乎经常使用这个。

那么,任何人都可以为我制作这样一个插件或指出一个现有的 Android 插件吗?

提前感谢您的帮助!

编辑:否则,谁能给我详细解释一下如何使用 this 插件似乎对其他人有用?

Unity 版本为 2019.2.8f1

最佳答案

2018.3 版本开始,Unity 允许您将 .java 文件添加到您的 Unity 项目中,并在您构建 Android 播放器时编译它们。

1) 将输出的UnityAndroidVibrator.javaAndroidManifest.xml文件复制到Assets/Plugins/Android> Unity 项目中的目录。

2) 转到:[文件] > [build设置] > [播放器设置] > [播放器] 并复制包名称。

3) 在这两个类中查找并替换 "uav.uav.uav" 包名称,并将其替换为您在步骤 2) 中复制的名称。


UnityAndroidVibrator.cs类:

using UnityEngine;
public class UnityAndroidVibrator : MonoBehaviour
{
#if UNITY_ANDROID || UNITY_EDITOR
private static AndroidJavaObject plugin = null;
#endif


// Use this for initialization
void Awake ()
{
#if UNITY_ANDROID && !UNITY_EDITOR
plugin = new AndroidJavaClass("uav.uav.uav.UnityAndroidVibrator").CallStatic<AndroidJavaObject>("instance");
#endif
}


/// <summary>
/// <para>Vibrates For Given Amount Of Time.</para>
/// <para>1 sec = 1000 Millseconds :)</para>
/// </summary>
/// <param name="DurationInMilliseconds">Duration in milliseconds.</param>
public void VibrateForGivenDuration(int DurationInMilliseconds)
{
plugin.Call("VibrateForGivenDuration", DurationInMilliseconds);

}

/// <summary>
/// Stoping All Vibrate.
/// </summary>
public void StopVibrate()
{
plugin.Call("StopVibrate");
}


/// <summary>
/// <para>Customs Vibrate or Vibration with Pattern.</para>
/// <para>Start without a delay</para>
/// <para>Each element then alternates between vibrate, sleep, vibrate, sleep...</para>
/// <para>long[] Pattern = {0, 100, 100, 300};</para>
/// </summary>
/// <param name="Pattern">Pattern.</param>
public void CustomVibrate(long[] Pattern)
{
plugin.Call("CustomVibrate", Pattern);
}


}

UnityAndroidVibrator.java类:

package uav.uav.uav;

import android.os.Vibrator;
import com.unity3d.player.UnityPlayer;

public class UnityAndroidVibrator
{
private static UnityAndroidVibrator _instance;

public UnityAndroidVibrator() {
}

public void VibrateForGivenDuration(int duration) {
Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
vibs.vibrate((long)duration);
}

public void StopVibrate() {
Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
vibs.cancel();
}

public void CustomVibrate(long[] Pattern) {
Vibrator vibs = (Vibrator)UnityPlayer.currentActivity.getApplicationContext().getSystemService("vibrator");
vibs.vibrate(Pattern, -1);
}

public static UnityAndroidVibrator instance()
{
if (_instance == null)
{
_instance = new UnityAndroidVibrator();
}

return _instance;
}
}

AndroidManifest.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="fullSensor" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.VIBRATE" />
</manifest>

注意:例如,如果您的包名称是“com.my.app”,则结果名称将是:

“UnityAndroidVibrator.cs”类:

plugin = new AndroidJavaClass("com.my.app.UnityAndroidVibrator").CallStatic<AndroidJavaObject>("instance");

“UnityAndroidVibrator.java”类:

package com.my.app;

import android.os.Vibrator;
import com.unity3d.player.UnityPlayer;

关于c# - 使Android手机振动100ms C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59123343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com