接上一篇圍繞一個(gè)點(diǎn)生成一圈物體亿遂,然后轉(zhuǎn)動(dòng)到需要的角度。(某種抽獎(jiǎng)效果)

image.png

如上圖我們要實(shí)現(xiàn)以上效果材彪,即讓生成的一圈圖是斜著的冠息!
至于怎么生成一圈物體,這里不做過(guò)多解釋荠瘪,詳情請(qǐng)看上一篇:http://www.reibang.com/p/829f990d81b0(傳送門)

1.實(shí)現(xiàn)一圈圖片斜著的效果:

首先夯巷,我們?cè)O(shè)置相機(jī)到合適的位置,然后調(diào)整角度即可哀墓。如圖:

image.png
(注意紅色框框的地方)

小提示:如果需要在ui或者別的地方上顯示這樣的效果趁餐,但是主攝像機(jī)又要拍攝場(chǎng)景,可以考慮用創(chuàng)建多一個(gè)攝像機(jī)來(lái)渲染篮绰!然后設(shè)置第二個(gè)攝像機(jī)的里面的參數(shù)即可后雷!

image.png

不過(guò)需要注意的是,Culling Mask是拍攝選中的Layer的物體吠各,所以需要拍攝的物體也需要設(shè)置對(duì)應(yīng)的Layer(如下圖)臀突。
image.png

前面的只是開胃小菜,接下來(lái)贾漏,我們進(jìn)入主題:

需求:實(shí)現(xiàn)一個(gè)轉(zhuǎn)動(dòng)抽獎(jiǎng)的效果候学,按下按鍵后開始轉(zhuǎn)動(dòng),按下停止按鍵后開始減速停下纵散。

具體上代碼吧梳码,感覺不需要過(guò)多解釋了:

不過(guò)需要注意的是隐圾,這個(gè)腳本是掛在要轉(zhuǎn)動(dòng)的物體上,然后圍繞這個(gè)物體生成一圈子物體掰茶!

using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 轉(zhuǎn)動(dòng)的狀態(tài)控制
/// </summary>
public enum RotationState
{
    None = 0,
    Trun,
    Stop,
    Stoped,
}

public class MyTest : MonoBehaviour
{
    //一個(gè)無(wú)關(guān)代碼的注釋:重點(diǎn)暇藏,我生成的物體起點(diǎn)是從靠近屏幕這邊開始的起點(diǎn),具體用的操作是設(shè)置掛載此腳本的Scale的Z為-1



    public GameObject go_Prefab;   //生成的prefab
    public float fRadius = 500;    //圓的半徑
    private int m_MaxRotNumber = 20;
    private float m_IntervalAngle = 18f;//間隔角度

    private List<GameObject> IconObj = new List<GameObject>();
    private List<RotTran> m_RectTrans = new List<RotTran>();
    private List<float> IconObjYpos = new List<float>();

    private RotationState enumRotationState = RotationState.None;//當(dāng)前狀態(tài)

    float fStopTargetAngle = 0;       //停止的目標(biāo)角度
    float fAngle = 0;                 //旋轉(zhuǎn)的角度
    public float fRotationSpeed = 200;       //旋轉(zhuǎn)速度
    float fOriginRotationSpeed = 0;   //用來(lái)記錄旋轉(zhuǎn)速度濒蒋,用來(lái)重置數(shù)據(jù)
    float fSlowDownRotationSpeed = 50;//最慢旋轉(zhuǎn)速度

    private struct RotTran
    {
        public Vector3 r_Pos;
        public Vector3 r_Eul;


        public RotTran(Vector3 pos, Vector3 eul)
        {
            r_Pos = pos;
            r_Eul = eul;
        }
    }

    private RotTran NewRot;

    // Use this for initialization
    void Start()
    {
        fOriginRotationSpeed = fRotationSpeed;

        for (int a = 0; a < m_MaxRotNumber; a++)
        {
            GameObject newTemp = GameObject.Instantiate(go_Prefab);
            newTemp.name = a.ToString();
            newTemp.transform.parent = this.transform;
            IconObj.Add(newTemp);
            //生成位置信息叨咖,圓形的公式
            // x = 原點(diǎn)x + 半徑 * 鄰邊除以斜邊的比例,   鄰邊除以斜邊的比例 = cos(弧度) , 弧度 = 角度 *3.14f / 180f(大致的參考公式)
            NewRot = new RotTran(new Vector3((Mathf.Sin((m_IntervalAngle * a) / 180 * Mathf.PI) * fRadius), 0, fRadius * Mathf.Cos((m_IntervalAngle * a) / 180 * Mathf.PI)), new Vector3(0, m_IntervalAngle * a, 0));
            m_RectTrans.Add(NewRot);
            IconObjYpos.Add(NewRot.r_Pos.y);
        }

        //設(shè)置位置和旋轉(zhuǎn)
        for (int i = 0; i < IconObj.Count; i++)
        {

            //IconObj[i].transform.localScale = Vector3.one;
            IconObj[i].transform.localPosition = m_RectTrans[i % IconObj.Count].r_Pos;
            IconObj[i].transform.localEulerAngles = m_RectTrans[i % IconObj.Count].r_Eul;
        }
    }

    // Update is called once per frame
    void Update()
    {

        switch (enumRotationState)
        {
            case RotationState.None:
                break;
            case RotationState.Trun:
                TurnChild();
                break;
            case RotationState.Stop:
                StopRotation();
                break;
            case RotationState.Stoped:
                ReSetAllData();
                break;
        }

        if (Input.GetKeyDown(KeyCode.A) && enumRotationState == RotationState.Trun)
        {
            SetStop();
        }
        if (Input.GetKeyDown(KeyCode.S) && enumRotationState == RotationState.None)
        {
            enumRotationState = RotationState.Trun;
        }
    }

    /// <summary>
    /// 旋轉(zhuǎn)
    /// </summary>
    void TurnChild()
    {
        fAngle += fRotationSpeed * Time.deltaTime;
        transform.rotation = Quaternion.Euler(new Vector3(0, fAngle, 0));
        if (IconObj[0].transform.position.x < 0)//<0為順時(shí)針旋轉(zhuǎn),判斷子物體的x軸世界坐標(biāo)是否小于0啊胶,小于0則進(jìn)入處理甸各,
        {
            GameObject tempGo = IconObj[0];
            tempGo.transform.SetSiblingIndex(transform.childCount - 1);//將此物體的層級(jí)設(shè)置到最后一個(gè)
            IconObj.RemoveAt(0);
            IconObj.Add(tempGo);
        }
    }

    /// <summary>
    /// 設(shè)置停止信號(hào)
    /// </summary>
    void SetStop()
    {
        fAngle = 0;
        fStopTargetAngle = 360 + IconObj[0].transform.localEulerAngles.y;
        Debug.Log(IconObj[0].name);
        enumRotationState = RotationState.Stop;
    }

    /// <summary>
    /// 停止旋轉(zhuǎn)
    /// </summary>
    void StopRotation()
    {
        fAngle += fRotationSpeed * Time.deltaTime;
        fRotationSpeed -= 50 * Time.deltaTime;
        fRotationSpeed = Mathf.Clamp(fRotationSpeed, fSlowDownRotationSpeed, 200);
        if (fAngle >= fStopTargetAngle)
        {
            fAngle = fStopTargetAngle;
            enumRotationState = RotationState.Stoped;
        }
        transform.rotation = Quaternion.Euler(new Vector3(0, fAngle, 0));
        if (IconObj[0].transform.position.x < 0)//<0為順時(shí)針旋轉(zhuǎn)
        {
            GameObject tempGo = IconObj[0];
            tempGo.transform.SetSiblingIndex(transform.childCount - 1);
            IconObj.RemoveAt(0);
            IconObj.Add(tempGo);
        }
    }

    /// <summary>
    /// 重置數(shù)據(jù)
    /// </summary>
    void ReSetAllData()
    {
        fAngle = 0;
        fStopTargetAngle = 0;
        fRotationSpeed = fOriginRotationSpeed;
        enumRotationState = RotationState.None;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市焰坪,隨后出現(xiàn)的幾起案子趣倾,更是在濱河造成了極大的恐慌,老刑警劉巖某饰,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒恋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡黔漂,警方通過(guò)查閱死者的電腦和手機(jī)诫尽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炬守,“玉大人牧嫉,你說(shuō)我怎么就攤上這事〖跬荆” “怎么了酣藻?”我有些...
    開封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鳍置。 經(jīng)常有香客問(wèn)我辽剧,道長(zhǎng),這世上最難降的妖魔是什么税产? 我笑而不...
    開封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任怕轿,我火速辦了婚禮,結(jié)果婚禮上辟拷,老公的妹妹穿的比我還像新娘撞羽。我一直安慰自己,他們只是感情好梧兼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開白布放吩。 她就那樣靜靜地躺著智听,像睡著了一般羽杰。 火紅的嫁衣襯著肌膚如雪渡紫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天考赛,我揣著相機(jī)與錄音惕澎,去河邊找鬼。 笑死颜骤,一個(gè)胖子當(dāng)著我的面吹牛唧喉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忍抽,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼八孝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鸠项?” 一聲冷哼從身側(cè)響起干跛,我...
    開封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祟绊,沒想到半個(gè)月后楼入,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牧抽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年嘉熊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扬舒。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阐肤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讲坎,到底是詐尸還是另有隱情泽腮,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布衣赶,位于F島的核電站诊赊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏府瞄。R本人自食惡果不足惜碧磅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遵馆。 院中可真熱鬧鲸郊,春花似錦、人聲如沸货邓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)换况。三九已至职辨,卻和暖如春盗蟆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舒裤。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工喳资, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腾供。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓仆邓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親伴鳖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子节值,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 大三下學(xué)期了,迷茫這個(gè)詞于我似乎不達(dá)邊榜聂,即使不是很清楚自己明確的目標(biāo)察署,但也有一個(gè)大致的方向。翻起我大一時(shí)候的日...
    ___十三月__閱讀 364評(píng)論 0 4
  • 《金融時(shí)報(bào)》介紹了學(xué)者莫騰·漢森的新書《玩轉(zhuǎn)工作》(Great at Work)。漢森在書中提出了一個(gè)工作理念:“...
    金雪一閱讀 308評(píng)論 1 1
  • 最近玩的好的朋友談戀愛了休吠,我覺得很為她高興扳埂。二十二年的單身狗,終于可以好好享受戀愛的滋味了瘤礁,記得她打電話過(guò)來(lái)和...
    阿貍璐吖閱讀 151評(píng)論 0 0