纳金网

标题: Unity3D虛擬互動之公告板顯示-Faye Euler [打印本页]

作者: faye euler    时间: 2012-10-31 16:39
标题: Unity3D虛擬互動之公告板顯示-Faye Euler
本帖最后由 艾西格亚 于 2013-5-28 20:02 编辑

這次Faye為大家介紹的是在Unity3d中,逐字打印的效果,這種效果如果加上一種閃屏式是Image effect,就碉堡了,廢話不多說,先上效果圖


下面開始為大家介紹思路與方法:

首先程序開始運行時,我們先初始化一個GUStyle,為什麼要加GUIStyle呢,因為,如果不加GUIStyle的話,顯示出來的字體是不可以隨心改變大小和顏色的,更加談不上自動換行了

MyGUIStyle.wordWrap = ***e;

然後我們要初始話兩個string類型,Text是存放我們要打印的內容,Text裏面的內容賦值給word變量,然後清空Text自己,給個協同程序,在設定時間後開始執行打印方法,這個方法我們命名為TypeTexte,在C#裏面協同程序要加上IEnumerator,所以,有以下代碼:

  word = Text;

  Text = "";

  yield return new WaitForSeconds (2);

  StartCoroutine(TypeText ());

在這裡,Faye用OnGUI顯示打印文字,所以我們定義兩個GUI,其實GUI Box用來顯示我們的打印效果,這裡我們將我們的GUIStyle加上

GUI.Label (new Rect(100,75,250,250),"纳金网介绍:",MyGUIStyle);

GUI.Box (new Rect(100,120,300,400),Text,MyGUIStyle);

下面說說TypeText方法

TypeText方法中,faye用了一個String.ToCharArray()方法,作用是將word字符串拆分為字符到數組。然後在用一個循環,一個個加回到Text字符串中,然後播放聲音。播放完聲音後,又用一個WaitForSeconds協同程序做等待,目的是分開每次字符間的打印時間。Faye再啰嗦下,在C#裏面協同程序要加上IEnumerator

IEnumerator TypeText () {

  char[] s = word.ToCharArray();

  for (int i = 0; i < s.Length; i++)

        {

   this.Text += s.ToString();

   

   if (sound)

   {

    audio.PlayOneShot (sound);

   }

   yield return new WaitForSeconds (letterPause);

  }

}

完整代碼如下:

using UnityEngine;

using System.Collections;
public class typewriting : MonoBehaviour {

public float letterPause = 0.2f;

public AudioClip sound;

public string word;

public string Text= "纳金网倡导交互式3D电子商务,以用户体验和市场需求为发展导向,以技术创新提升产品竞争力,面向制造商、经销商和专业人士等不同的目标群体,结合互联网推出简单交互式3D展示和复杂交互式3D展示";//你希望打字机效果输出的字

public GUIStyle MyGUIStyle;

// Use this for initialization

IEnumerator Start () {

  MyGUIStyle.wordWrap = ***e;

  word = Text;

  Text = "";

  yield return new WaitForSeconds (2);

  StartCoroutine(TypeText ());

}

void OnGUI () {

  GUI.Label (new Rect(100,75,250,250),"纳金网介绍:",MyGUIStyle);

  GUI.Box (new Rect(100,120,300,400),Text,MyGUIStyle);

}

IEnumerator TypeText () {

  char[] s = word.ToCharArray();

  for (int i = 0; i < s.Length; i++)

        {

   this.Text += s.ToString();

   

   if (sound)

   {

    audio.PlayOneShot (sound);

   }

   yield return new WaitForSeconds (letterPause);

  }

}

}

將這個代碼掛到一個物體上,這裡faye把代碼掛在相機上,記得相機上面要加AudioScource組件哦。否則會報錯。




如果覺得字體不夠大的話,記得改GUIStyle下面的FontSize屬性


大功完成,看著自己一步步做完的作品,是否很有自豪感呢

本文由Faye個人原創,納金網和Faye共同擁有使用權,未經允許轉載保留追究法律責任權利。

作者: 比巴卜    时间: 2012-10-31 16:44

作者: 狂风大尉    时间: 2012-10-31 16:49
很有意思的效果啊,学习学习
作者: 菜鸟    时间: 2012-11-4 02:17
讲的蛮细致的  以前找的资料都是一知半解的 做不出成品没有成就感   现在有成就感了 真好
作者: 小丑龟    时间: 2012-11-4 11:10
蛮炫的效果,学习学习
作者: 烟雨    时间: 2012-12-31 20:22
有些不太明白,这个案例会用在什么地方?
var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = ***e;c.src = ( 'https:' == document.location.protocol ? 'https://z': 'http://p') + '.chango.com/static/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();
作者: 雅雅    时间: 2013-1-20 12:33
学习了,虽然还在摸索
var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = ***e;c.src = ( 'https:' == document.location.protocol ? 'https://z': 'http://p') + '.chango.com/static/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();
作者: 走四方    时间: 2013-5-28 17:31
感谢楼主分享!!!!!!!




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5