static public HapticData CreateFrom(AudioClip sound) { var hapticData = new HapticData(); var samples = sound.samples; var msec = (int)(sound.length * 1000); var sampleData = new float[samples * sound.channels]; sound.GetData(sampleData, 0); var length = samples / msec; var amplitudes = new int[msec]; var pattern = new long[msec]; for (int i = 0; i < msec; i++) { var sum = 0.0f; for (int j = 0; j < length; j++) { sum += sampleData[i * length + 2 * j] + 1.0f + sampleData[i * length + (2 * j) + 1] + 1.0f; } pattern[i] = 1; amplitudes[i] = (int)((sum * 255.0 / length) / 4.0f); } hapticData.pattern = pattern; hapticData.amplitudes = amplitudes; hapticData.repeat = -1; return(hapticData); }
public override CollisionActionResult OnCollisionAction(CollisionActionResult result) { if (isHapticable(result)) { Debug.Log("Feedback Haptic: " + result.Other.gameObject.name); // Rumble(500); // 500 ms // pattern: off, on, off, ...(ms), repeat: -1 is oneshot. m_HapticFeedback.Rumble(HapticData.CreateFrom(result.Sound)); // StartCoroutine("Restore"); } return(result); }
public void Rumble(HapticData hapticData) { rumble(hapticData.pattern, hapticData.amplitudes, hapticData.repeat); }