本文實例為大家分享了unity實現3d循環滾動效果展示的具體代碼,供大家參考,具體內容如下
然后通過setdepthandposition這個方法,實現圖片的空間空間展開
z軸和y軸,系數是一樣的
經過上面設置,空間就擺開了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
using unityengine; using system.collections; using system.collections.generic; public class selectrole : monobehaviour { public gameobject rolesobj; private int _half = 0; //一側的卡片數 private int _movx = 150; //x軸移動距離 private int _movy = 50; //y軸移動距離 private int _movz = 60; //z軸移動距離 private int count = 3; //組件數 private list<roleitem> _rolelist = new list<roleitem>(); // use this for initialization void start () { //加載圖片 object [] texturelist = ( object [])resources.loadall( "pictures" ); int maxdepth = texturelist.length % 2 == 1 ? texturelist.length / 2 + 1 : texturelist.length / 2; //最大深度 _half = maxdepth; for ( int i = 0; i < texturelist.length; i++) { //加載角色圖片預設 gameobject role = instantiate(resources.load( "role" , typeof (gameobject))) as gameobject; role.transform.parent = rolesobj.transform; role.transform.localscale = vector3.one; eventdelegate.add(role.getcomponent<uitoggle>().onchange , roletogglechange); roleitem item = role.getcomponent<roleitem>(); item.texture.maintexture = texturelist[i] as texture; //設置角色卡片排序命名 role.name = maxdepth.tostring(); if (i > 0) { //奇數設置為右邊,下標為正數 if (i % 2 == 1) { maxdepth--; role.name = maxdepth.tostring(); } //偶數設置為左邊,下標為負數 else { role.name = "-" + maxdepth.tostring(); } } setdepthandposition(item,0,0); _rolelist.add(item); } } private void setdepthandposition(roleitem role, int dir, int index) { int indexdepth = 0; //左右移動后,重新排序命名 if (dir != 0) { if (index*dir > _half ) indexdepth = -dir * (_half - 1); else indexdepth = index > -1 && index < 1 ? dir : index; role.name = indexdepth.tostring(); } else { indexdepth = int .parse(role.name); } tweenposition tp = role.getcomponent<tweenposition>(); int x = indexdepth < 0 ? -(_half + indexdepth) * _movx : (_half - indexdepth) * _movx; indexdepth = system.math.abs(indexdepth); tp.to = new vector3(x, (_half - indexdepth) * _movy, (_half - indexdepth) * _movz); role.bg.depth = count * indexdepth; role.active.depth = 1 + count * indexdepth; role.texture.depth = 2 + count * indexdepth; role.getcomponent<uitoggle>().value = indexdepth == _half ? true : false ; tp.playforward(); } /// <summary> /// 左邊 /// </summary> public void leftclick() { //重新排列順序 foreach (roleitem role in _rolelist) { int index = int .parse(role.name); print(index); setdepthandposition(role,1,++index); } } /// <summary> /// 右邊 /// </summary> public void rightclick() { //重新排列順序 foreach (roleitem role in _rolelist) { int index = int .parse(role.name); setdepthandposition(role,-1,--index); } } /// <summary> /// 鼠標選中某個角色 /// </summary> public void roletogglechange() { if (uitoggle.current.value) { int index = int .parse(uitoggle.current.name); int movecount = _half - system.math.abs(index); //移動個數 for ( int i = 0; i < movecount;i++ ) { if (index > 0) leftclick(); else rightclick(); } } } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_15267341/article/details/76011321