예제 #1
0
        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);
        }
예제 #2
0
 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);
 }
예제 #3
0
 public void Rumble(HapticData hapticData)
 {
     rumble(hapticData.pattern, hapticData.amplitudes, hapticData.repeat);
 }