標籤

3C 科技 (1) 免費資源 (1) 使用心得 (2) 版權註記 (1) 遊記 (3) 網路購物 (1) 學習 (4) Android Studio (10) MVC 學習 (2) Unity 學習 (6)
顯示具有 Unity 學習 標籤的文章。 顯示所有文章
顯示具有 Unity 學習 標籤的文章。 顯示所有文章

2014年5月31日 星期六

Unity 中 C# 與 JS 混用 (以 Joystick 為例)

這一陣子需要用到虛擬 joystick 的功能,在 unity 的 Standard Assets (Mobile) 中已有 joystick.js 可用,可是習慣使用 c#, 這下就出問題了: 在c#中直接引用 Joystick 的 class, 發生了沒有定義的錯誤。在拜過Google大神後,發現以下重要資訊:
(以下原文出自 http://www.cnblogs.com/sicily/archive/2009/10/28/1591763.html )

JS文件必須是在 "Standard Assets"、 "Pro Standard Assets" 和 "Plugins" 這三個目錄中的任何一個里,而CS文件不能與JS文件在一個目錄中。原因是,這三個目錄里的腳本被最先編譯,"Editor"目錄里的稍后編譯,其他的腳本最后編譯。

因此把 joystick.js 移到上述目錄中即可 (如果都沒有,可以自建其中一個)。

2014年5月12日 星期一

Unity playmaker: photon network parsing error

當 import playmaker 時,有些人會出現下列錯誤:

Assets/Photon Unity Networking/PlayMaker/Actions/PhotonNetworkDestroy.cs(43,9): error CS8025: Parsing error

此時只要找尋網路上是否有人發佈 PhotonNetworkDestroy.cs  的內容,將其剪貼覆蓋原來的檔案內容即可 (或者自已重建一個同樣內容的檔案取代也可)。推測可能是因為該檔案內容有一些無法察覺的字元導致錯誤。

Unity3d Asset store import 錯誤

自 Unity 的 Asset store 下載物件時,有時會出現如下的載入錯誤:
Error while importing package: Couldn't decompress package UnityEditor.AssetStoreContext:OpenPackage(String, String)

此時有可能是因為內定的下載目錄路徑中有中文而導致,可以到下列位置找尋已下載完成的 unitypackage:
C:\Users\使用者名稱\AppData\Roaming\Unity

找到後將其移往其他沒有中文的位置,再由 unity3d import 即可。

2014年5月9日 星期五

Unity3d 輸出 android apk

Unity3d 可以輸出成不同平台的應用程式,這是它一個相當強的的功能。基本上要輸出android apk 需要設定 android sdk 及 java sdk 兩項。android sdk 可以在 http://developer.android.com/sdk/index.html?hl=sk 下載,只要按下 Download the SDK 大大的按鈕就可以了。 而 java sdk 可以在 Oracle 網站 http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=otnjp 下載,找最新的下載就可以了。
不過目前 Unity3d 只支援 x86 的 java sdk (android sdk 可以使用 64-bit的),這點需要注意。
另外在 Unity3d 的 player settting 中 bundle indentifier 資料要設定一下(參考下圖),要不然會不能完成 apk.


目前所試的程式中,OnMouseEnter 與 OnMouseExit 都可移植至平板觸控沒有問題,而手指碰觸/離開 平板,使用 Input.GetMouseButton(0) 也可以對應到滑鼠左鍵按下/放開 的情況,所以應該不少程式可以不用修改就直接轉成 android app 使用了。

2014年5月8日 星期四

Unity3d Trail Renderer 的使用技巧

Unity3d 中的 Trail Renderer 可以自動繪出物件移動的軌跡,可是當我們將 Trail Renderer 的 enabled 設定為 false 時,只能暫時停止軌跡的繪製,但是將 enabled 設定為 true時,就會將之前未繪出的軌跡一併繪出,是否可以只畫出 enabled=true之後的軌跡呢? 答案是肯定且簡單的,只要將 Trail Renderer 的 time 設定為 0, 它就不會保留之前的軌跡,而當程式中將 enabled 設為 true 時,也將 time 設定為所需要延遲消失的時間即可。

             private TrailRenderer tr;
            ...
                              // 取得子物件中的 TrailRenderer 元件
tr = bird0.GetComponentInChildren <TrailRenderer>();
                              // 啟用取得的 TrailRenderer元件
tr.enabled = true;
                              // 設定軌跡消失延遲時間 (seconds)
tr.time = 5;

而如果希望物件在發生碰撞後,及不要再繪出軌跡,但又要將之前軌跡留在畫面上,就不能將 enabled 設為 false, 因為這樣會使所有軌跡立即消失。
解決方法是將 TrailRenderer掛在一個空物件上,而此空物件則成為主要物件的子物件,因此可以畫出主物件的移動軌跡。當發生碰撞時,則將此空物件脫離主物件,而由於空物件沒有質量,所以會立即停止移動,軌跡也就停止了。

       // 以下掛在 TrailRenderer所屬空物件的父物件上
void OnCollisionEnter(Collision collision)
{
                        // 與所有子物件脫離
transform.DetachChildren ();
//停止物件移動速度
transform.rigidbody.velocity = new Vector3 (0, 0, 0);

Destroy (gameObject, 2);
}
}

2014年5月7日 星期三

Unity3d 中如何取得其他 script 中的變數 (C#)

假設在unity3d 中有一script "disp.cs", 此 script 中有一變數 mystr, 而 disp.cs 掛在一個叫 dispstr的 prefab 物件上。如果今天有一個 control.cs 的程式要產生 dispstr的物件,而且要改變此物件上掛的 disp.cs 裡的 mystr 變數值,可以考慮以下程式片段:

private disp myscript1;
private GameObject mydigit1;

// Use this for initialization
void Start () {
       // 產生 dispstr 物件
mydigit1 = Instantiate (dispstr, new Vector3 (6.2f, 5.35f, -0.1f), Quaternion.identity) as GameObject;
       // 取得物件上的 disp script
myscript1 = mydigit1.transform.GetComponent<disp> ();

       //設定 script 裡的變數
                myscript1.mystring = "";