2016年3月24日 星期四

Unity_C#_Quaternion_角度

*此教學使用Unity 5.3.2f1 (64-bit)免費版
*最後更新時間2016/03/24

position、localScale、Rotate可以用new Vector3就能達到效果, 但是不允許直接設置X.Y.Z的值而是必須先宣告Quaternion (四元數)

本文將教學: Unity角度的運用
                      Quaternion.Euler角度鎖定
                      transform.localEulerAngles判別式運用
 ----------------------------------------------------------------------------------------------------------




transform.Rotate可用於旋轉物件,例如轉動的風扇或螺旋槳
Quaternion.Euler可用於鎖定角度,不會旋轉,指定為多少就是多少不適合用來做平滑動作
Quaternion.identity 此為唯讀程式碼,可解釋為"不更動角度
transform.localEulerAngles.x 後面可加.x、.y、.z,用於判別式判斷角度,可用於搭配print除錯


先來看Rotaterotation的差別
 (以下程式碼寫在Update裡)
每次旋轉增加2度的寫法(一直轉):
gameObject.transform.Rotate (new Vector3 (0f, 0f, 2f));
直接就是2度的寫法(指定角度不動):
 gameObject.transform.rotation = Quaternion.Euler (0f, 0f, 2f);


接下來練習用Quaternion設置角度 

先宣告一個Quaternion : 

Quaternion quate = Quaternion.identity; 
然後設置角度:設置X軸方向旋轉45度
quate.eulerAngles = new Vector3(45, 0, 0); 
然後再把quate賦予給Gameobject: 
gameobject.transform.rotation = quate; 


transform.localEulerAngles可用於有關角度的判別式,例如

    void FixedUpdate()
    {
        if (Input.GetMouseButton(1))
        {
            if (transform.eulerAngles.z <= 10)
            {  transform.Rotate(Vector3.forward * Time.deltaTime * 10);> }
        }
        else
        {
            if (transform.eulerAngles.z > 0)
            {
                transform.Rotate(-Vector3.forward * Time.deltaTime * 10);
                if (180.0f < transform.eulerAngles.z)
                {  transform.eulerAngles = Vector3.zero;
            }
        }
    }

2016年3月9日 星期三

Unity_C#_在Unity中播放影片

2020/06/03更新
此為Unity 5x版本的方法
新版請使用Video Player Component
===============================================================

*此教學使用Unity 5.3.2f1 (64-bit)免費版
*最後更新時間2016/05/30

此教學為使用Plane播放,若要使用UGUI請看Unity_C#_開頭動畫的製作

Unity支援的影片格式有: .mov、.mpg、.mpeg、.mp4、.avi、.asf
播放影片是使用的MovieTexture為Texture的子類別,與貼圖非常相近,
如影片含音頻會自動生成audio文件,如沒音頻就無生成。

本文將教學:
                     Unity播放影片(含音軌)
----------------------------------------------------------------------------------------------------------

本教學使用的影片為.mov檔,需要安裝Quicktime,
如果電腦裡沒有quicktime,可到下列網址下載(安裝完需重新開啟Unity):
http://www.apple.com/tw/quicktime/

1.先在場景中新增一個Plane,把Main Camera對準它。
   

2.直接把你的影片檔拖曳至Unity Asset視窗,或在檔案管理員中直接加入(需等待一段時間)。
   

3.這時就會產生一個MovieTexture了,
   如果你的影片含有音軌,可以展開看到Audio Source。
   

4.這時你可以設置你的MovieTexture品質,調越高容量越大和載入時間越長。
   依需求調整。
   

5.這時對Asset視窗案右鍵,產生Material。
   設定其Shader,在此設定為Legacy Shaders-Self-Illumin-Specular
   此設定適合用來當作電視螢幕,你也可以設置其他Shader試試看。
   

6.把你的MovieTexture拖曳到如圖位置。
   

7.這時可以把Material和Audio Source拖曳到Plane的Component裡。
   此範例不需要Play On Awake(載入場景時自動撥放),故取消勾選。
   

8.這時進入腳本階段,新增一個C#腳本,開始撰寫腳本如下。
   
    解釋程式碼:
 
    public MovieTexture movTexture;
    //宣告公開變數電影材質,設為公開為了之後拖曳
    private AudioSource movAudio;
    //設定影片音軌
 
    GetComponent<Renderer>().material.mainTexture = movTexture;
    //設置主要材質為movTexture
    movTexture.loop = true;
    //movTexture是否重複撥放
    movAudio = GetComponent<AudioSource>();
    //設置movAudio變數為物件之AudioSource
 
    if (Input.GetKeyDown(KeyCode.A) && movTexture.isPlaying == false)
    //如果鍵盤A被按下且movTexture正在撥放為否時

    GetComponent<AudioSource>().Play();
    //這一段被註解掉,因為有為AudioSource設變數movAudio,如果你不想設置變數可以直接         使用此程式碼

    Play(); Pause(); Stop(); //字面上的意思
 
    如果需要複製可複製以下程式碼

 
---------------------------------以下附上完整程式碼--------------------------------------------------------------

    public MovieTexture movTexture; //電影材質
    private AudioSource movAudio; //影片音軌

    void Start()
    {
        GetComponent<Renderer>().material.mainTexture = movTexture;
        movTexture.loop = true;
        movAudio = GetComponent<AudioSource>();
    }
    void Update() {
        if (Input.GetKeyDown(KeyCode.A) && movTexture.isPlaying == false)
        {
            //GetComponent<AudioSource>().Play();
            movTexture.Play();
            movAudio.Play();
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            //GetComponent<AudioSource>().Pause();
            movTexture.Pause();
            movAudio.Pause();
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            //GetComponent<AudioSource>().Stop();
            movTexture.Stop();
            movAudio.Stop();
        }
     
    }
---------------------------------以上附上完整程式碼------------------------------------------------------------

 9.把腳本掛在Plane上,再把MovieTexture拖曳到程式碼的公開區。

 
 
10.這時你可以開始測試你的影片是否能撥放了!