您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity入门 >
    GUIFly脚本
    时间:2015-03-03 08:55 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    用途:一个GUI对象在屏幕中飞行,用GameObject.SendMessage告诉GUI对象何时飞行。

    使用:把该脚本拖到一个GameObject上,用另一个脚本GameObject.SendMessage发送飞行消息。


      gameObject.SendMessage(“Fly”, true);    
      // Wait 5 seconds    
      yield new WaitForSeconds(5);    
      // Fly out    
      gameObject.SendMessage(“Fly”, false);    
      [c-sharp] view plaincopy    
      using UnityEngine;    
      using System.Collections;    
      public class GUIFly : MonoBehaviour    
      {    
      public enum InterpolationType    
      {    
      Linear,    
      Sinusoidal,    
      Hermite    
      }    
      public Vector3 m_InPosition;    
      public Vector3 m_OutPosition;    
      public float m_TravelTime = 0.5f;    
      public float m_DelayToStartTravelingAfterMessageReceived = 0.1f;    
      public bool m_StartWithInPosition = false;    
      public InterpolationType m_InterpolationType = InterpolationType.Sinusoidal;    
      void Start ()    
      {    
      transform.position = (m_StartWithInPosition) ? m_InPosition : m_OutPosition;    
      }    
      IEnumerator Fly(bool flyIn)    
      {    
      yield return new WaitForSeconds(m_DelayToStartTravelingAfterMessageReceived);    
      Vector3 targetPosition = (flyIn) ? m_InPosition : m_OutPosition;    
      float startTime = Time.time;    
      Vector3 startPosition = transform.position;    
      while (Time.time < startTime + m_TravelTime)    
      {    
      switch (m_InterpolationType)    
      {    
      case InterpolationType.Linear:    
      transform.position = Vector3.Lerp(startPosition, targetPosition, (Time.time - startTime) / m_TravelTime);    
      break;    
      case InterpolationType.Sinusoidal:    
      transform.position = Sinerp(startPosition, targetPosition, (Time.time - startTime) / m_TravelTime);    
      break;    
      case InterpolationType.Hermite:    
      transform.position = Hermite(startPosition, targetPosition, (Time.time - startTime) / m_TravelTime);    
      break;    
      }    
      yield return 0;    
      }    
      transform.position = targetPosition;    
      }    
      void Reset()    
      {    
      m_InPosition = transform.position;    
      }    
      private static Vector3 Sinerp(Vector3 start, Vector3 end, float value)    
      {    
      return new Vector3(Sinerp(start.x, end.x, value), Sinerp(start.y, end.y, value), Sinerp(start.z, end.z, value));    
      }    
      private static Vector3 Hermite(Vector3 start, Vector3 end, float value)    
      {    
      return new Vector3(Hermite(start.x, end.x, value), Hermite(start.y, end.y, value), Hermite(start.z, end.z, value));    
      }    
      /* The following functions are also in the Mathfx script on the UnifyWiki, but are included here so the script is self sufficient. */    
      private static float Sinerp(float start, float end, float value)    
      {    
      return Mathf.Lerp(start, end, Mathf.Sin(value * Mathf.PI * 0.5f));    
      }    
      private static float Hermite(float start, float end, float value)    
      {    
      return Mathf.Lerp(start, end, value * value * (3.0f - 2.0f * value));    
      }    
      }


    OK。赶快去测试下吧。。。



    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。