本文實例為大家分享了unity 2017實現(xiàn)大轉(zhuǎn)盤抽獎的具體代碼,供大家參考,具體內(nèi)容如下
涉及到的插件:dotween
在“hierarchy”面板創(chuàng)建一個image,這個image用來顯示大轉(zhuǎn)盤的那個圓盤,我用的ugui里默認的那個圓圓的圖片,放大后很模糊,不過不打緊
接著創(chuàng)建一個panel名字改成“獎品組”,這個是獎品的父物體,記得吧panel里的image,canvas renderer組件刪了
然后在創(chuàng)建一個panel名字改成“awar”用制作獎品的,一樣的吧image,canvasrenderer組件刪除
然后在awar中創(chuàng)建image,text,分別吧名字改為“ico,desc”,然后設(shè)置一下自己想要的效果,我設(shè)置的ico上方,desc下方
如圖:
結(jié)構(gòu)圖:
*需要注意的地方:把awar的小藍點移動到圓盤的中心如圖:
如果這步?jīng)]做后面的自動生成代碼生成就不準嘍
然后寫一個代碼:生成的腳本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class generateawar:monobehaviour{ public gameobject awargameobject; //上面制作的awar物體 public int count = 10; // 生成個數(shù),當你根據(jù)數(shù)據(jù)生成個數(shù)的時候記得修改 void onenable () { var angle = 360 / count; // 計算每個獎品的z軸度數(shù) var additionangle = 0; //當前角度 for (var i = 0; i < count; i++) { var obj = instantiate(awargameobject); additionangle = angle + additionangle; obj.transform.rotate(vector3.forward,additionangle); log.error(obj.transform.localrotation.eulerangles.z); obj.transform.setparent(transform, false ); obj.setactive( true ); } } } |
然后掛到”獎品組“身上
如:
那個獎品就是awar,我名字改不回來了,似乎是unity的問題,哇哈哈哈
然后運行,就能看到如圖效果:
然后創(chuàng)建一個指針放在中心編寫一個腳本:旋轉(zhuǎn)指針的腳本
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
|
//這個腳本掛在指針身上, //然后在抽獎按鈕的button事件里拖入指針選擇這個類的settime方法 public class rotatepointer : monobehaviour { private bool _isrotate = false ; //是否旋轉(zhuǎn) public float continuoustime = 2; //旋轉(zhuǎn)時間 public float speed = 2000; //旋轉(zhuǎn)速度 public float angle = 0; // 這個是設(shè)置停止的角度 private float _time; // update is called once per frame void update () { if (!_isrotate) return ; //不旋轉(zhuǎn)結(jié)束 if (time.time < _time) // 沒結(jié)束 { transform.rotate(vector3.forward * speed * time.deltatime); } else { //結(jié)束,使用dotween旋轉(zhuǎn)到結(jié)束角度,耗時1秒 //這里有個360,使用來防止指針回轉(zhuǎn)的,如果不加這個360,你會看到指針倒退 transform.dorotate( new vector3(0, 0, 360 + angle), 1f, rotatemode.fastbeyond360); _isrotate = false ; // 設(shè)置不旋轉(zhuǎn) } } //外部調(diào)用,初始化時間和打開旋轉(zhuǎn) public void settime() { _time = time.time + continuoustime; _isrotate = true ; } //外部調(diào)用,設(shè)置停止角度 public void setangle( float angle) { angle = angle; } } |
指針:
開始按鈕:
因為電腦上沒什么制作動圖的軟件,如果效果我就結(jié)束,旋轉(zhuǎn)個1張
旋轉(zhuǎn):
結(jié)束:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/yikalyosi/article/details/73550358