_list.SetVirtual(); 將列表虛擬化,(不會爲每一條數據都實例化,根據視口大小創建最小量的顯示對象)必須通過_list.itemRenderer回調函數,設置列表數據。
在滑動列表的時候,可以用一下這段代碼來實現,距離的把控,顯示最近的。
void DoSpecialEffect()
{
//change the scale according to the distance to middle
float midX = _list.scrollPane.posX + _list.viewWidth / 2;
int cnt = _list.numChildren;
for (int i = 0; i < cnt; i++)
{
GObject obj = _list.GetChildAt(i);
float dist = Mathf.Abs(midX - obj.x - obj.width / 2);
if (dist > obj.width) //no intersection
obj.SetScale(1, 1);
else
{
float ss = 1 + (1 - dist / obj.width) * 0.24f;
obj.SetScale(ss, ss);
}
}
//當前的頁面數
_mainView.GetChild("n3").text = "" + ((_list.GetFirstChildInView() + 1) % _list.numItems);
}
//導入一個prefab,然後顯現出來
Object prefab = Resources.Load("Role/npc");
GameObject go = (GameObject)Object.Instantiate(prefab);
go.transform.localPosition = new Vector3(61, -89, 1000); //set z to far from UICamera is important!
go.transform.localScale = new Vector3(180, 180, 180);
go.transform.localEulerAngles = new Vector3(0, 100, 0);
_mainView.GetChild("holder").asGraph.SetNativeObject(new GoWrapper(go));
設置新手指導
_guideLayer = UIPackage.CreateObject("Guide", "GuideLayer").asCom;
_guideLayer.SetSize(GRoot.inst.width, GRoot.inst.height);
_guideLayer.AddRelation(GRoot.inst, RelationType.Size);
GObject bagBtn = _mainView.GetChild("bagBtn");
bagBtn.onClick.Add(() =>
{
_guideLayer.RemoveFromParent();
});
_mainView.GetChild("n2").onClick.Add(() =>
{
GRoot.inst.AddChild(_guideLayer); //!!Before using TransformRect(or GlobalToLocal), the object must be added first
Rect rect = bagBtn.TransformRect(new Rect(0, 0, bagBtn.width, bagBtn.height), _guideLayer);
GObject window = _guideLayer.GetChild("window");
window.size = new Vector2((int)rect.size.x, (int)rect.size.y);
window.TweenMove(new Vector2((int)rect.position.x, (int)rect.position.y), 0.5f);
});