【Lesson 1】如何製作開頭動畫/影片 How to make opening video/animation
【影片播放/Movie player】
遊戲製作中常常開頭就會放一個影片,所以今天就來分享製作方式
在Unity5中有三種播放影片的方式,主要是透過MovieTexture(),透過貼圖的方式渲染出影片
- 藉由投射在Panel來播放(如果用VR可以移動視角)
- 直接在GUI上播放
- 行動裝置無法使用MovieTexture,所以有另外一種解法是Handheld.PlayFullScreenMovie()
Unity適用影片格式:PC需要安裝Quicktime播放器
.mov、.mpg、.mpeg、.mp4、.avi、.asf(PC限定,可以做為測試時使用)預先動作是將目標影片拖曳進Project中,建議特別新增一個folder專門存放影音圖檔等Assets,不然檔案一多的時候Project裡面就會變得十分雜亂。
.ogg / .ogv (Moblie Device Only移動裝置限定)
如果影片中含有音檔,會自動產生Audio檔,之後記得也要跟著拖到Panel
※以下的Script是為了展示API功能包含播放、暫停與停止等
實際上做開頭動畫就不用特別畫GUI來給別人播放暫停,是直接在Start放movTexture.Play()
※以下的Script是為了展示API功能包含播放、暫停與停止等
實際上做開頭動畫就不用特別畫GUI來給別人播放暫停,是直接在Start放movTexture.Play()
在Hierarchy視圖中
- 創建一個Plane
- 創建Directional light照亮Plane
- 創建Main Camera對著Plane(可以利用2d場景來固定)
- 創建MoviePlayer.cs,拖曳到Plane上
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
using UnityEngine; using System.Collections; public class MoviePlayer: MonoBehaviour { public MovieTexture movTexture; //影片紋理 void Start() { GetComponent<Renderer>().material.mainTexture = movTexture; //設置當前對象為主紋理為影片紋理(這邊我有做修正) movTexture.loop = true;//設置循環撥放,如果要當開頭的話可以設計成不循環然後自動切場景下面會再提 } void OnGUI() { if(GUILayout.Button("Play")) { if(!movTexture.isPlaying) {movTexture.Play(); //播放與繼續 } } if(GUILayout.Button("Pause")) {movTexture.Pause();//暫停播放 } if(GUILayout.Button("Stop")) {ovTexture.Stop();//停止播放 } } }
| ||
public class MoviePlayer: MonoBehaviour | ||
{ | ||
public MovieTexture movTexture; //影片紋理 | ||
void Start() | ||
{ | ||
GetComponent<Renderer>().material.mainTexture = movTexture; //設置當前對象為主紋理為影片紋理(這邊我有做修正) | ||
movTexture.loop = true;//設置循環撥放,如果要當開頭的話可以設計成不循環然後自動切場景下面會再提 | ||
} | ||
void OnGUI() | ||
{ | ||
if(GUILayout.Button("Play")) | ||
{ | ||
if(!movTexture.isPlaying) | ||
{movTexture.Play(); //播放與繼續 } | ||
} | ||
if(GUILayout.Button("Pause")) | ||
{movTexture.Pause();//暫停播放 } | ||
if(GUILayout.Button("Stop")) | ||
{ovTexture.Stop();//停止播放 } | ||
} | ||
} |
transform.localScale = new Vector(1,1,1);模型預設縮放係數為1,這裡可以調節平面X、Y、Z三個方向的縮放係數,平面的大小會隨之改變,對應影片的大小也會隨之改變。
【方法2】
第二種播放視頻的方式基於GUI。可以不用新增Plane&Directional light
創建 MoviePlayer2.cs,將以下Script套進Camera中即可
using UnityEngine;
using System.Collections;
public class MoviePlayer2: MonoBehaviour
{
//影片紋理
public MovieTexture movTexture;
void Start()
{
//設置是否循環撥放,這邊設定開頭撥放完就跳轉場景所以不需要Loop
movTexture.loop = false;
}
void OnGUI()
{
//繪製紋理
GUI.DrawTexture (new Rect (0,0, Screen.width, Screen.height),movTexture,ScaleMode.StretchToFill);
if(GUILayout.Button("Play"))
{
//播放
if(!movTexture.isPlaying)
{
movTexture.Play();
}
}
if(GUILayout.Button("Pause"))
{
//暫定
movTexture.Pause();
}
if(GUILayout.Button("Stop"))
{
//停止
movTexture.Stop();
}
}
2.播放時彈出IOS控制項,可以控制暫停播放全螢幕等等
3.播放時無法停止,當其播放完一次後自動關閉(適用在開頭場景)
4.播放時彈出IOS控制項,可以跳轉播放進度
接著,通常影片會附帶直接點擊螢幕就跳過開頭
一般而言會透過 Application.LoadLevel() 來達成
新增一個Button
把Button調成透明
把Button底下Text的文字刪除(或刪掉Text也可)
新增一個script(C#)LoadOnClick
using UnityEngine;在Button的Inspector最下面會找到一個onclick()點擊觸發事件
using System.Collections;public class LoadOnClick : MonoBehaviour {public void LoadScene(int level){Application.LoadLevel(level);}}
- 按一下加號
- 在把None(object)改成Canvas
- 右邊No Function應該會多出上述的LoadOnClick,裡面應該有一個LoadScene
- 選擇之後下面空格填1就會跳轉到場景1
場景編號可以透過File>Build Settings 去編號,初始場景是0,所以理論上也是跳轉到1去
【影片播放完畢後自動跳轉場景】
由於不一定玩家會透過觸控來跳轉,所以在影片播放完畢後仍然需要設置一個自動跳轉點
我研究了一下Movietexture的部分,好像沒有偵測影片播放完畢的狀態,只有判斷影片是否有播放的isPlaying(),但是影片播放完後他不會自動消失,而是停在最後一幀的圖片,所以他還是會判斷isPlaying=true,而duration也沒有用,最後只好採取比較土炮的方式就是直接用計數器,直接根據影片長度來結束強制跳轉,Code如下,可以直接加在上面影片播放的Script裡面
void Update()
{
StartCoroutine(load());
}
IEnumerator load()
{
yield return new WaitForSeconds(20);//填入影片時間,這邊假設是20秒
Application.LoadLevel(1);//自動跳轉第n關,這邊假設是第1關
}
最後呈現出來應該是,程式一開啟自動撥放影片,然後按螢幕可以跳過
(或是在Button放一個自製的SKIP字樣的image)
或是到影片播放結束時自動跳轉到開始畫面
那我們下篇文章再來談開始畫面製作
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -參考網站:雨松MOMO 泰課在線 Movie Texture
延伸閱讀:關於場景切換與優化 Unity:設計靈活的無縫場景轉換機制
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
使用版本:Unity5.2.0f3個人版
使用系統:Windows 10
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
最後PC版的Script應該長這樣,然後可以直接丟到Camera上
using UnityEngine;
using System.Collections;
public class Movie : MonoBehaviour
{
public MovieTexture movTexture;
void Start()
{
movTexture.loop = false;
}
void Update()
{
StartCoroutine(load());
}
IEnumerator load()
{
yield return new WaitForSeconds(19);
Application.LoadLevel(1);
}
void OnGUI()
{
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), movTexture, ScaleMode.StretchToFill);
movTexture.Play();
}
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
行動版的寫法這幾天再補上
謝謝你,很感謝這篇文的幫助
回覆刪除