顯示具有 Unity 標籤的文章。 顯示所有文章
顯示具有 Unity 標籤的文章。 顯示所有文章

2019年11月18日 星期一

[ AR ] 用Vuforia和Unity打造Multi-Targets的擴增實境

Vuforia SDK工具的網址:https://developer.vuforia.com/

1. 利用Vuforia Target Manager來製作Multi-Targets的標籤目標物件。

2. 利用vuforia License Manager來實作,啟動金鑰。

3.打開Unity建立新專案,打開Built Settinfs設定Platform為Andoid。


4.Player Settings要注意的地方。


5.建立相關物件,記得要把原來的Camera物件去除,記得新增Camera AR, Multi-Targets物件,並到Asse Store下載動畫。

6.記得先滙入步驟1滙出的資料庫,並貼上步驟2的金鑰。
7.設定標籤。

8.最後輸出成APK, 並安裝到手機,進行測試


2019年10月13日 星期日

使用Unity和Vuforia以擴增實境方式來製作生日快樂影片播放APP

請先參考前一篇文章,"利用Unity和Vufroia來設計擴增實境"。

1. 更換成生日快樂的Target。


2.增加一個Plane的物件,記得滙入影片。

3.將Mesh Renderer取消,讓Plane物件呈現透明。

4.調整大小,使其和卡片一樣大。

5.增加元件,選擇Add Component。

6. 增加Video Player元件。

7.選擇影片。

8.設定播放影片

9.編譯成APK

10.測試

11. 影片反轉,可以把Plane物件的y值設為180。


利用Unity和Vufroia來設計擴增實境

1.打開Unity建立新檔


2.刪除Main Camera物件

3. 打開File->Build Settings

4.切換Andriod平台

5.按下Player Settings,在XR Settings中,設定Vuforia Augment Realty。

6.取消multithreaded Rendering以及設定Pachage Name,要全部都小寫,而且至少要兩層,換句話說要有一個"."

7. 增加vuforia/CameraAR物件

8. 增加Vuforia/Image物件

9.打開Asset Store,並把視寫設定為Maximize。

10. 下載Unity-Chan模型並滙入(Import)。

11. 打開Vuforia,在Target Manager中把圖片上傳,並選擇想要的Target,再按下Download Database,記得選Unity格式輸出。

12. 再Unity下,在Asset視窗下按下右鍵,選擇Import Package->Custom Package,滙入第11步驟的資料庫檔案。

13. 選擇Image Target,在右邊選擇剛滙入的資料庫以及選擇圖片。

14.選擇CamaraAR物件,打開 Open Vuforia configuration

15. 在Vuforia License Manager中產生一個Development Key,選擇該KEY,複製全部KEY。

16.打上一個步驟中的Key貼在Open License Key中。

17.打開Unity-chan!中的Prefabs,選擇最右邊的unitychan_dynamic,拖移至左上角的Image Target上。

18. 最後編譯製作成APK檔

19.執行結果



2018年11月25日 星期日

在 Unity UI中加入具有漸層效果的圖片介面

1. 先在Assets目錄,按右鍵選擇New Import Asset,匯入新的影像。
2. 影像不能直接用在人機介面(UI)上,必須先轉成Sprite (2D and UI)才能使用,如下圖。
3.接下來我們新增一個Canvas物件,並在Canvas物件下分別產生 5個Image物件,在Image物件中,放入在步驟2做的一個Sprite。
4.撰寫程式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour {
    private float startTime;
    private float alpha = 1.0f;
    [SerializeField]
    private int m_time = 8;
    [SerializeField]
    private CanvasGroup m_canvasGroup;
// Use this for initialization
void Start () {
startTime = Time.time;
      }

// Update is called once per frame
    void FixedUpdate()
    {
        if (Time.time - startTime > m_time)
        {
            if (alpha > 0)
            {
                alpha -= 0.01f;
                m_canvasGroup.alpha = alpha;
            }
        }
    }
}

2017年12月10日 星期日

號外!Unity 2017.2內建Vuforia功能,開發擴增實境應用程式更方便!

官方文章:Getting Started with Vuforia in Unity 2017.2

下載Unity 2017.2版本,在安裝時可以選擇Vuforia AR,開發擴增實境應用程式更方便。


1.建立新專案
2.選擇GameObject中的Vuforia,新增AR Camera以及Image,並刪除Camera。

3. 在Player Setting上選擇Vuforia Augmented Realit。

4.在Vuforia Target Manager工具中新增Database,並以Unity Editor格式滙出。
5. 在Unity下,滙入Vuforia Target Manager工具中滙出的Database。
6. 在Vuforia License Manager工具中新增License。
7. 點選Unity中的AR Camera,開啟open Vuforia configuration,貼上新增的License。
8.在Image Target物件下,新增Cube。

9. 使用Target來測試,測試成功如下圖。








2017年12月7日 星期四

用擴增實境測量距離、周長、面積、還有辨識形狀

本篇文章將介紹當數張具有擴增實境標籤卡片移動時,可以測量出鄰近兩張卡片的中心點距量,當卡片移動時,還能自動地顯示改變後的距離。

原文網址:Augmented Reality Shapes Combined from Trackers
Download: Download Whole Unity3D AR Shapes project (*.rar file)請大家留意影片中左上角,可以計算周長、面積、還有辨識形狀。

 




2017年11月17日 星期五

Unity程式設計初體驗(五)-動畫簡易控制程式解析


在Asset Store 下載Zombie 0_1,找到之後把它滙入(import),並選擇在Scenes資料夾中的Demo的場景範例,點後後可以選定Main Camera物件,在右邊的Inspector可以檢視Main Camera物件的相關內容,在下方有一個PlayGUI(Script)的視窗,內部儲存腳本的變數,有一個是Trnsforms,另一個是GUI Contents,如下圖。

回到專案的目錄,在Asset子目錄下,可以找到PlayGUI.cs的檔案,打開來其程式碼如下圖(僅摘錄部份內容):

public class PlayGUI : MonoBehaviour {
public Transform[] transforms;

public GUIContent[] GUIContents;

private Animator[] animator;

private string currentState = "";
:
:
:
}
上圖程式中可以看到public和private兩個關鍵詞,分別表示變數成員是"公開的"表示可以由外部程式來存取和"私有的"表示只能自己使用。因此在Unity的介面中,可以看到Transforms和GUI Contents表示Transform和GUIContent都是以陣列方式呈現,如下圖。


在PlayGUI 類別中,定義一個Start()函式,這是一個初始化的函式,在這個函式中,會讀取上圖中Trnsforms的內容,利用把它放置GetComponent()函式來取得元件的動畫資訊,存放到animator的變數中。在這裏transforms.Length會等於1,如上圖所示,只有一個元件就是Element 0,內容就是Zombie_0_1 (Transform),也就是畫面中的動畫。

// Use this for initialization
void Start () {
    animator = new Animator[transforms.Length];
for (int i = 0; i < transforms.Length; i++) {
animator[i] = transforms[i].GetComponent();
}
}

2017年10月9日 星期一

Unity程式設計初體驗(一)-從MonoBehaviour類別開始

好玩的程式設計

程式設計是一門很好玩的學科,可以訓練邏輯概念,透過指令的排列組合,完成某一個特定任務,最方便是電腦已經成為每個家庭必供的家電用品,對於有些家庭成員來說,花在電腦上的時間可能都比看電視時間還長。學習程式設計自學很重要也很方便,因為只要一部電腦即可,在現在以工業4.0或社會5.0都很重視程式設計,學習程式設計可以指揮機器人的運作,也可發展網路服務軟體,既好玩又有趣。

Unity是學習程式設計非常實作的平台

為什麼我們學習Unity?Unity應用在哪些領域,前景又如何?目前許多知名的遊戲都是使用Unity開發,更重要的是Unity具有很強的跨平台能力,不管是桌機、手機、遊戲機都有支持。Unity具有很好優勢和前景,特別是在3D/AR/VR上。Unity程式語言可以使用C#或JavaScript,目前以C#為主流。

學習Unity程式設計就從MonoBehaviour類別開始

MonoBehaviour是基礎的類別,這個類別有兩個很重要的函式Start()和Update(),Start()只會執行一次,負責初始化的任務,但Update()就會不斷地被呼叫執行,是程式的主函式。以下是我們建立一個新的C#程式的樣版,類別名稱是NewBehaviourScript,繼承MonoBehaviour類別。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class NewBehaviourScript : MonoBehaviour {


   // Use this for initialization
   void Start () {

  }

   // Update is called once per frame
   void Update () {

  }
}

GameObject是遊戲世界的基本物件

GameObject我們稱遊戲物件,它是Unity場景中所有實例的基本的類別。首先我們先介紹Find()函式,該函式可以用來找遊戲物件,例如:要找一個叫Cube的物件,我們可以使用GameObject.Find("Cube");,當找到這個物件時,會傳回GameObject物件指標,因此我們需要先宣告一個GameObject物件,private GameObject cube;採用private是表示該物件是私有的,只能在該類別內使用。找到可以控制的物件後,我們就可以使用GameObject內的translation變數來進行對遊戲物件的轉換控制。translation變數其資料型態是Translation變數,它可以用來控制遊戲物件的位置(Position)、旋轉(Rotation)、大小(Scale)等。首先我們先來學習如何控制遊戲物件的旋轉方向,我們可以呼叫Rotate()函式,三個參數分別是X、Y、Z,我們來控制Y軸的旋量,採用時間物件Time.deltaTime。其完整的程式如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    private GameObject cube;

    // Use this for initialization
    void Start () {
       cube = GameObject.Find("Cube");

    }

// Update is called once per frame
void Update () {
        cube.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}

使用Prefab預製功能,讓控制更輕鬆

Unity中的Prefab資源類型我們稱它為預製,它可以透過添加組件並將其屬性設置為適當的值,可以方便地在場景中構建一個遊戲物件(GameObject),那兩者之間有何差別呢?Prefab資源類型可以讓您存儲一個完整的組件和屬性的GameObject對象。 預製作為模板,您可以在該模板中在場景中創建新的對象實例。 對預製資產進行的任何編輯都會立即反映在從其生成的所有實例中,但也可以單獨覆蓋每個實例的組件和設置。
我們可以通過選擇Asset->Create Prefab來建立預製,然後再將對象從場景拖動到“空”預製資產上。換句話,場景上的所有物件,都是 GameObject物件,Prefab就是把場景上,製作好的 GameObject 拖曳到 Assets 目錄下保存起來。在使用預製功能要注意,在前面的例子,我們使用到Find()找特定的物件,因此您使用預製功能時,把原本的物件變成三個,一個Cube,其兩個是使用預製Prefab來製造出的兩個Cube,您會發現在轉動的Cube只有一個,要三個都能使用,可以改成下列程式,改用this物件指標。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {


    // Use this for initialization
    void Start () {

    }

// Update is called once per frame
void Update () {
        this.transform.Rotate(0, 100 * Time.deltaTime, 0);
    }
}


2017年10月1日 星期日

擴增實境的工具:Unity跨平台的遊戲引擎

Unity 是一套具備跨平台的遊戲引擎的遊戲應用程式開發工具,不但可用於開發 WindowsMacOSLinux 平台的單機遊戲也可以用來iOSAndroid 行動裝置的遊戲,Unity 更可以用來開發支援 WebGL 技術的網頁遊戲,或 PlayStationXBoxWii 主機上的遊戲。

想學習Unity可以參考CG數位學習網http://www.cg.com.tw/Unity/

耕雲智慧生活科技股份有限公司的業師介紹三款Unity所設計的遊戲,分別是:

<<神魔之塔>> 陳研希代言



爐石戰記


鬥陣特攻



Unity 3D概念及工具詞彙

  • Assets創建的專案文件都儲存在這個資料夾中,模型、貼圖 、聲音、程式碼。
  • Scenes編輯物件的主要視窗,可切換2D3D顯示模式。
  • Game Object 變數型態,指定要控制的物件,例如 : 模型。
  • Scripts 腳本,C#JavaScript

  • Prefabs可以用來儲存預先製作的物件。
Unity基本介面

以下是業師提供的講義: