unity跟 android的互動,網路上有些教學是建立 AndroidManifest.xml 還有同包名的 jar檔,放進 Unity然後再壓出來。其實跟本不用那麼麻煩,可以先壓好 unity的 android專案,然後再將 jar檔放進 lib資料夾底下就行了。所以只要先建立好方法, jar包可以隨時替換。
unity跟 android的互動,網路上有些教學是建立 AndroidManifest.xml 還有同包名的 jar檔,放進 Unity然後再壓出來。其實跟本不用那麼麻煩,可以先壓好 unity的 android專案,然後再將 jar檔放進 lib資料夾底下就行了。所以只要先建立好方法, jar包可以隨時替換。
以下為 ScrollView物件循環腳本,有註記就不多做解釋了
using UnityEngine; using System.Collections.Generic; public class Loop : MonoBehaviour { public List prefab; // grid裡的所有物件 public UIScrollView scrollview; private List child; private List intlist; // 資料 float move = 110; // 移動距離 bool b; // 是否開始拖動 void Start () { child = new List(); // 註冊 grid裡的所有物件 for (int i = 0; i < transform.childCount; i++) { Elements e = new Elements(); e.widget = transform.GetChild(i).GetComponent(); e.index = i; child.Add(e); } intlist = new List(); for(int i=1;i<21;i++)intlist.Add(i); // 註冊 ScrollView拖動事件 scrollview.onDragStarted = DragStart; // 開始 scrollview.onDragFinished = DragEnd; // 結束 } void DragStart() { b = true; } void DragEnd() { b = false; } void Update () { if (!b) return; // 是否開始拖動 // 當元素 1與 2為不可見,代表正在往下滑 // 偵測是否缺下一筆資料 if (child[0].widget.isVisible == false && child[0].widget.isVisible == false) { Elements u = child[0]; // 如過預取得資料位置沒超出 if (child[0].index + prefab.Count < intlist.Count) { // 重新定位該元素 Transform tt = child[0].widget.transform; tt.localPosition = new Vector3(tt.localPosition.x, tt.localPosition.y - move * prefab.Count, tt.localPosition.z); // 元素資料改變 u.index += prefab.Count; // 更新現在資料位置 u.widget.transform.GetChild(0).GetComponent().text = intlist[u.index].ToString(); // 元素資料傳遞 // 元素順序改變 child.RemoveAt(0); child.Add(u); } } // 當元素 1可見,倒數第1 與倒數 2為不可見,代表可往上滑 // 偵測是否缺上一筆資料 else if (child[0].widget.isVisible == true && child[child.Count - 1].widget.isVisible == false && child[child.Count - 2].widget.isVisible == false) { Elements u = child[prefab.Count-1]; // 如過有預取得資料位置 if (u.index - prefab.Count > -1) { Transform tt = child[prefab.Count - 1].widget.transform; tt.localPosition = new Vector3(tt.localPosition.x, tt.localPosition.y + move * prefab.Count, tt.localPosition.z); // 元素資料改變 u.index -= prefab.Count; // 更新現在資料位置 u.widget.transform.GetChild(0).GetComponent().text = intlist[u.index].ToString(); // 元素資料傳遞 // 元素順序改變 child.RemoveAt(prefab.Count - 1); child.Insert(0, u); } } } struct Elements { public UIWidget widget; // 該元素的 UIWidget public int index; // 資料位置 } }