<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                本文章由cartzhang編寫,轉載請注明出處。 所有權利保留。? 文章鏈接:[http://blog.csdn.net/cartzhang/article/details/50680237](http://blog.csdn.net/cartzhang/article/details/50680237)? 作者:cartzhang ### 數據平滑處理 由于需要處理硬件的傳給數據,硬件是其他商家的。? 坑爹的是發送頻率太低了,20HZ左右,也是服氣了。好處有么,肯定是便宜。? 這個用在VR游戲上,不做評論了。? 既然這樣,生活還得繼續!!!? 怎么辦? ### 插值 第一考慮的就是插值。? 插值,內插和外推插值。插值算法,有多種,5點,7點,二次插值等,不一一列舉。? 游戲的幀率在DK2上75fps,這幀率插值,需要至少有2秒數據,再加上硬件數據的抖動,個人覺得這不算是個好的方案。 ### 緩動函數 在ITween中有個緩動曲線函數。? 這個不錯啊!我們來細說下。 ### 1.先看看各種函數都長啥樣? 截圖:? ![](https://box.kancloud.cn/2016-03-09_56dfda882f19a.jpg) ### 2.網址介紹 相關網址啊:? [http://easings.net/zh-cn#](http://easings.net/zh-cn#) 說明網址上的各個圖都是可以點開,動態的哦。 [http://robertpenner.com/easing/easing_demo.html](http://robertpenner.com/easing/easing_demo.html)? 這個也是可以看看每個曲線的樣子。真是方便啊!! 微軟msdn上帶有代碼和圖例的? [https://msdn.microsoft.com/zh-cn/library/ee308751.aspx](https://msdn.microsoft.com/zh-cn/library/ee308751.aspx) ### 3.在看看所有曲線種類。 可以在ITween中找到EaseType. ~~~ /// <summary> /// The type of easing to use based on Robert Penner's open source easing equations (http://www.robertpenner.com/easing_terms_of_use.html). /// </summary> public enum EaseType{ easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint, easeInSine, easeOutSine, easeInOutSine, easeInExpo, easeOutExpo, easeInOutExpo, easeInCirc, easeOutCirc, easeInOutCirc, linear, spring, /* GFX47 MOD START */ //bounce, easeInBounce, easeOutBounce, easeInOutBounce, /* GFX47 MOD END */ easeInBack, easeOutBack, easeInOutBack, /* GFX47 MOD START */ //elastic, easeInElastic, easeOutElastic, easeInOutElastic, /* GFX47 MOD END */ punch } ~~~ 根據需要各區所需啊!!不一定要全部都帶上。 ### 4\. 函數代碼: ITween中這個代碼比較長,代碼中更多的是算法。? 代碼在ITween.cs中,就不一一貼上來。 ### 緩動曲線代碼 我需要的只有這些曲線,其他的不需要,就摘了出來,寫成了靜態函數,這樣方便在需要時候直接調用。 ~~~ /************************************************************************** Copyright:@cartzhang Author: cartzhang Date: Description: **************************************************************************/ using UnityEngine; using System.Collections; public enum EaseType:int { easeInQuad, //easeOutQuad, easeInOutQuad, easeInCubic, //easeOutCubic, easeInOutCubic, easeInQuart, //easeOutQuart, easeInOutQuart, easeInQuint, //easeOutQuint, easeInOutQuint, //easeInSine, //easeOutSine, //easeInOutSine, easeInExpo, //easeOutExpo, easeInOutExpo, //easeInCirc, //easeOutCirc, easeInOutCirc, //linear, //spring, ///* GFX47 MOD START */ ////bounce, //easeInBounce, //easeOutBounce, //easeInOutBounce, ///* GFX47 MOD END */ //easeInBack, //easeOutBack, //easeInOutBack, ///* GFX47 MOD START */ ////elastic, //easeInElastic, //easeOutElastic, //easeInOutElastic, ///* GFX47 MOD END */ //punch } public class DataAlgorithm { #region Easing Curves public static float linear(float start, float end, float value) { return Mathf.Lerp(start, end, value); } public static float clerp(float start, float end, float value) { float min = 0.0f; float max = 360.0f; float half = Mathf.Abs((max - min) / 2.0f); float retval = 0.0f; float diff = 0.0f; if ((end - start) < -half) { diff = ((max - start) + end) * value; retval = start + diff; } else if ((end - start) > half) { diff = -((max - end) + start) * value; retval = start + diff; } else retval = start + (end - start) * value; return retval; } public static float spring(float start, float end, float value) { value = Mathf.Clamp01(value); value = (Mathf.Sin(value * Mathf.PI * (0.2f + 2.5f * value * value * value)) * Mathf.Pow(1f - value, 2.2f) + value) * (1f + (1.2f * (1f - value))); return start + (end - start) * value; } public static float easeInQuad(float start, float end, float value) { end -= start; return end * value * value + start; } public static float easeOutQuad(float start, float end, float value) { end -= start; return -end * value * (value - 2) + start; } public static float easeInOutQuad(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return end / 2 * value * value + start; value--; return -end / 2 * (value * (value - 2) - 1) + start; } public static float easeInCubic(float start, float end, float value) { end -= start; return end * value * value * value + start; } public static float easeOutCubic(float start, float end, float value) { value--; end -= start; return end * (value * value * value + 1) + start; } public static float easeInOutCubic(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return end / 2 * value * value * value + start; value -= 2; return end / 2 * (value * value * value + 2) + start; } public static float easeInQuart(float start, float end, float value) { end -= start; return end * value * value * value * value + start; } public static float easeOutQuart(float start, float end, float value) { value--; end -= start; return -end * (value * value * value * value - 1) + start; } public static float easeInOutQuart(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return end / 2 * value * value * value * value + start; value -= 2; return -end / 2 * (value * value * value * value - 2) + start; } public static float easeInQuint(float start, float end, float value) { end -= start; return end * value * value * value * value * value + start; } public static float easeOutQuint(float start, float end, float value) { value--; end -= start; return end * (value * value * value * value * value + 1) + start; } public static float easeInOutQuint(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return end / 2 * value * value * value * value * value + start; value -= 2; return end / 2 * (value * value * value * value * value + 2) + start; } public static float easeInSine(float start, float end, float value) { end -= start; return -end * Mathf.Cos(value / 1 * (Mathf.PI / 2)) + end + start; } public static float easeOutSine(float start, float end, float value) { end -= start; return end * Mathf.Sin(value / 1 * (Mathf.PI / 2)) + start; } public static float easeInOutSine(float start, float end, float value) { end -= start; return -end / 2 * (Mathf.Cos(Mathf.PI * value / 1) - 1) + start; } public static float easeInExpo(float start, float end, float value) { end -= start; return end * Mathf.Pow(2, 10 * (value / 1 - 1)) + start; } public static float easeOutExpo(float start, float end, float value) { end -= start; return end * (-Mathf.Pow(2, -10 * value / 1) + 1) + start; } public static float easeInOutExpo(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return end / 2 * Mathf.Pow(2, 10 * (value - 1)) + start; value--; return end / 2 * (-Mathf.Pow(2, -10 * value) + 2) + start; } public static float easeInCirc(float start, float end, float value) { end -= start; return -end * (Mathf.Sqrt(1 - value * value) - 1) + start; } public static float easeOutCirc(float start, float end, float value) { value--; end -= start; return end * Mathf.Sqrt(1 - value * value) + start; } public static float easeInOutCirc(float start, float end, float value) { value /= .5f; end -= start; if (value < 1) return -end / 2 * (Mathf.Sqrt(1 - value * value) - 1) + start; value -= 2; return end / 2 * (Mathf.Sqrt(1 - value * value) + 1) + start; } /* GFX47 MOD START */ public static float easeInBounce(float start, float end, float value) { end -= start; float d = 1f; return end - easeOutBounce(0, end, d - value) + start; } /* GFX47 MOD END */ /* GFX47 MOD START */ //public static float bounce(float start, float end, float value){ public static float easeOutBounce(float start, float end, float value) { value /= 1f; end -= start; if (value < (1 / 2.75f)) { return end * (7.5625f * value * value) + start; } else if (value < (2 / 2.75f)) { value -= (1.5f / 2.75f); return end * (7.5625f * (value) * value + .75f) + start; } else if (value < (2.5 / 2.75)) { value -= (2.25f / 2.75f); return end * (7.5625f * (value) * value + .9375f) + start; } else { value -= (2.625f / 2.75f); return end * (7.5625f * (value) * value + .984375f) + start; } } /* GFX47 MOD END */ /* GFX47 MOD START */ public static float easeInOutBounce(float start, float end, float value) { end -= start; float d = 1f; if (value < d / 2) return easeInBounce(0, end, value * 2) * 0.5f + start; else return easeOutBounce(0, end, value * 2 - d) * 0.5f + end * 0.5f + start; } /* GFX47 MOD END */ public static float easeInBack(float start, float end, float value) { end -= start; value /= 1; float s = 1.70158f; return end * (value) * value * ((s + 1) * value - s) + start; } public static float easeOutBack(float start, float end, float value) { float s = 1.70158f; end -= start; value = (value / 1) - 1; return end * ((value) * value * ((s + 1) * value + s) + 1) + start; } public static float easeInOutBack(float start, float end, float value) { float s = 1.70158f; end -= start; value /= .5f; if ((value) < 1) { s *= (1.525f); return end / 2 * (value * value * (((s) + 1) * value - s)) + start; } value -= 2; s *= (1.525f); return end / 2 * ((value) * value * (((s) + 1) * value + s) + 2) + start; } public static float punch(float amplitude, float value) { float s = 9; if (value == 0) { return 0; } if (value == 1) { return 0; } float period = 1 * 0.3f; s = period / (2 * Mathf.PI) * Mathf.Asin(0); return (amplitude * Mathf.Pow(2, -10 * value) * Mathf.Sin((value * 1 - s) * (2 * Mathf.PI) / period)); } /* GFX47 MOD START */ public static float easeInElastic(float start, float end, float value) { end -= start; float d = 1f; float p = d * .3f; float s = 0; float a = 0; if (value == 0) return start; if ((value /= d) == 1) return start + end; if (a == 0f || a < Mathf.Abs(end)) { a = end; s = p / 4; } else { s = p / (2 * Mathf.PI) * Mathf.Asin(end / a); } return -(a * Mathf.Pow(2, 10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p)) + start; } /* GFX47 MOD END */ /* GFX47 MOD START */ //public static float elastic(float start, float end, float value){ public static float easeOutElastic(float start, float end, float value) { /* GFX47 MOD END */ //Thank you to rafael.marteleto for fixing this as a port over from Pedro's UnityTween end -= start; float d = 1f; float p = d * .3f; float s = 0; float a = 0; if (value == 0) return start; if ((value /= d) == 1) return start + end; if (a == 0f || a < Mathf.Abs(end)) { a = end; s = p / 4; } else { s = p / (2 * Mathf.PI) * Mathf.Asin(end / a); } return (a * Mathf.Pow(2, -10 * value) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p) + end + start); } /* GFX47 MOD START */ public static float easeInOutElastic(float start, float end, float value) { end -= start; float d = 1f; float p = d * .3f; float s = 0; float a = 0; if (value == 0) return start; if ((value /= d / 2) == 2) return start + end; if (a == 0f || a < Mathf.Abs(end)) { a = end; s = p / 4; } else { s = p / (2 * Mathf.PI) * Mathf.Asin(end / a); } if (value < 1) return -0.5f * (a * Mathf.Pow(2, 10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p)) + start; return a * Mathf.Pow(2, -10 * (value -= 1)) * Mathf.Sin((value * d - s) * (2 * Mathf.PI) / p) * 0.5f + end + start; } /* GFX47 MOD END */ #endregion } ~~~ ### 總結: 這個使用還是非常方便的。對于數據的處理和抖動,目前來看還是比較有用的。 這么實用有好用 的東西,當然要記錄下來,僅供參考。 若有問題,請隨時聯系!!? 非常感謝!!!! ![](https://box.kancloud.cn/2016-03-09_56dfda884ba15.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看