您好,登錄后才能下訂單哦!
最近發現『Catlike系列教程』覺得內容真的很贊,感覺有很多地方涉及到了我的知識盲點,如果真的可以照著做下來一遍的話應該收獲頗豐。因為教程很長所以逐字翻譯不太可能了(主要是翻譯的太差)。基本上就是把實現的思路記錄下來最后甩一個 「Github Repo」這樣就可以了。理論上來說第一篇比較簡單,感興趣的同學可以移步「原文鏈接」
實現一個鐘表的話我們的目標就是
大家都是 Unity 熟手了所以具體制作流程就不講了,博主自己也沒仔細看就按照自己想法做了一個差不多的,具體思路就是多設一個層級然后父節點只旋轉就可以把指針轉到相應的位置而不需要同時調整 Rotation 和 Position。如果不是很懂的話可以回到「原文地址」里面有更詳細的做法,或者到我的「Github Repo」下載下來看看。
首先建立一個新的 MonoBehaviour 腳本比如說 ClockController.cs 之類的,把時針分針秒針的 Transform 的引用拖到腳本里,然后開始設置各個指針的位置。
那么眾所周知表盤的360度被分割成12塊所以每一塊也就是每個小時占據了 360 / 12 = 30 度。同理每分鐘占據了 360 / 60 = 6 度,每秒鐘也是。那么直觀來說就是這樣寫。
void Update()
{
_hourArm.localEulerAngles = new Vector3(0, DateTime.Now.Hour * 30, 0);
_minuteArm.localEulerAngles = new Vector3(0, DateTime.Now.Minute * 6, 0);
_secondArm.localEulerAngles = new Vector3(0, DateTime.Now.Second * 6, 0);
}
然而運行一下會發現時針和分針都是筆直的指向其所在的時間。。如下圖所示
好吧現在剛好七點鐘貌似看不出來,總之就是需要在比如 6:30 的時候時針應該指向 6 和 7 之間。所以這個度數需要再加上一點偏移,變成下面這樣。
void Update()
{
var hour = DateTime.Now.Hour;
var minute = DateTime.Now.Minute;
var second = DateTime.Now.Second;
var milisecond = DateTime.Now.Millisecond;
_hourArm.localEulerAngles = new Vector3(0, hour * 30 + minute / 60f * 30f, 0);
_minuteArm.localEulerAngles = new Vector3(0, minute * 6 + second / 60f * 6f, 0);
_secondArm.localEulerAngles = new Vector3(0, second * 6 + milisecond / 1000f * 6f, 0);
}
就可以輕松實現文章里的各種平滑移動之類的~
沒有完全按照「原文」中的寫法來寫好像這樣會更簡潔一點,然后大家應該也會更容易理解,不過作者的主要用意可能是想展示 coroutine 之類的吧不管那些了~總之大家可以進入「Github Repo」查看全部代碼和運行 Demo。
原文鏈接:https://snatix.com/2018/06/06/019-gameobject-and-scripts//
本文由 sNatic 發布于『大喵的新窩』 轉載請保留本申明
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。