圖有真相,沒圖說個蛋!
大家好,這里是每周一更新的《圖個好游戲》,我是正驚小弟。又到了我們上班……不是,是看圖挑游戲的日子,廢話不多說,上動圖!
《記憶重構》:真·真人密室逃脫游戲
游戲平臺:手機
《記憶重構》是一款由騰訊極光計劃代理發行的真人互動影視游戲,這是一款很新穎的解密系列游戲,玩起來特別有真人密室逃脫的既視感!這款考驗智商的游戲,剛上線不久就刷爆朋友圈,說起來你可能不信,這款騰訊游戲居然完全免費,無內購,無任何氪金要素。
在畫面上,因為是實景搭建錄制視頻,所以不會有三次元客串到二次元的突兀感。真實的環境讓人更有帶入感,3D的視角棒到爆炸。游戲中的真人演員也有相當高的專業程度,表情,語氣,應對,心態,反應……都沒有出現讓人出戲的表現。講真,好心疼第一章在水里掙扎的演員小姐姐啊!
《戰爭之歌》:日服高端版的王者榮耀
游戲平臺:手機
《War Song》由騰訊互娛旗下魔方工作室群自主研發的游戲,是一款以“日式西風”神話世界為背景故事來闡述的MOBA類游戲,是騰訊在日本上線的一款MOBA游戲。不過雖說大家稱它為日版《王者榮耀》,不過實際上兩者有很大不同,就從英雄上來說,日服英雄集體重塑,畫風技能幾乎找不到原型,英雄技能機制比較平衡,而且英雄的皮膚沒有某些限制,十分給力!
更有特色的是,《War Song》有個與DOTA一樣的晝夜系統,白天和晚上的加成不同,其中黑夜就相當于大多數MOBA的迷霧模式,白天增加經驗,夜晚增加移速,對于游戲的節奏有很大改變。整體表現上來看,英雄皮膚大放異彩,局內機制更加復雜,絕非“小學生”意識操作之流可以掌控。最關鍵的是,還有八神這名英雄!
《死或生6》:史上最少衣服的硬核格斗游戲
游戲平臺:PC/XboxOne/PS4
說到《死或生》系列想必大家都不陌生,原本只是一款質量上佳的格斗游戲,但是在陰差陽錯之下卻變成了某種意義上的紳士福利游戲。不過《死或生6》作為《死或生》系列時隔8年的正統續作,游戲將會更加專注于格斗元素本身。
全新的“打擊”、“投擲”、“反擊”三者互相克制的戰斗系統,也將會為玩家帶來全新的戰斗機制的體驗,針對新手玩家游戲中還加入了簡單的一鍵連擊,讓新手玩家也能夠體驗到連擊的快感。某些紳士玩家喜歡的乳搖、爆衣等福利依舊保留了下來,不過卻不再有前作的夸張效果,而是以更加真實合理的條件下進行。
《狂賭之淵》:在游戲中體驗賭的快感!
游戲平臺:手機
由人氣漫畫改編的手機游戲《狂賭之淵 CHEATING ALLOWED》為《狂賭之淵》改編的桌面游戲,游戲中玩家通過模擬,體驗游玩原作中的賭博項目,來體驗“私立百花王學園”的瘋狂。游戲畫面做的十分精美,如果你看過這部動漫的話,相比玩起來會更加順手更有感覺!
游戲中主要還原了原作中兩個原創游戲“投票猜拳”和“印第安撲克”,規則上和原作中也大體相近,玩家可以在故事模式中打AI也可以直接和玩家對戰。玩家主要通過發動老千技能獲得賭局優勢,而老千技能發動成功幾率主要看玩家抽出的角色卡和技能卡,說白了就是誰老千多誰就能贏,當然了游戲中老千技能種類也不少,老千博弈也是戰術的一部分。
《Cytoid》:自由創作屬于自己的音游
游戲平臺:手機
《Cytoid》是一個可以創建、分享和游玩自制關卡的開源音樂游戲。游戲的定位和 OSU 是一樣的,屬于同人游戲,不為盈利,就是為了給予大家創作的空間,用最喜愛的音樂配合獨家打造的譜面,為玩家們帶來一次“表演”,全球玩家一起來挑戰高分。
無論是豐富的音樂庫,還是變化無窮的譜面設計,背后皆由來自社區的幾百位創作者們所驅動。在游戲中,作為玩家的你,可以與其他玩家在關卡排行榜上競爭、可以每月票選出你最喜歡的關卡、可以在排位模式里提升 Rating、展示自己的實力……這或許是你從未有過的音游體驗。
《特技摩托:崛起》:摩托車手的一萬種死法
游戲平臺:PC/XboxOne/PS4/NintendoSwitch
時隔多年,《特技摩托》的最新作《崛起》終于面世。這一次,它的畫面更強、玩法更多、系統更科學——更重要的是,主角的死法,也是越來越有花樣了。雖然《特技摩托》是一個和摩托車有關的游戲,但它并不主打競速,而是需要你在精心設計的橫版地圖上,通過各種各樣的技巧躲避障礙物來通關。
游戲的物理引擎非常“魔性”,如果沒有接觸過同類型的作品,可能一上手的時候會相當無法適應——“怎么開個摩托車也能戰術后仰?”實際上,這些看似不友好的設計,正是這類游戲的核心樂趣所在。就是要用這么靈敏又魔性的物理引擎,才能讓游戲變得鬼畜、好玩兒、驚心動魄~
《樂高大電影:游戲版》
游戲平臺:PC
說起樂高相信大家都不會陌生,《樂高大電影:游戲版》其實是動畫片《樂高大電影2》的游戲版,不過國內電影還沒有上映,可以玩玩游戲來提前嘗鮮了。
本次《樂高大電影2:游戲版》依舊講述了“隨處可見的普通青年”埃米特的有一次精彩的冒險之旅。在游戲中,玩家需要時刻去尋找分散在各地的稀有物品、材料、工具。然后利用找到的材料與工具,來幫助自己完成這場樂高世界的冒險。
內容來源于@什么值得買APP,觀點僅代表作者本人 |作者:haichuan111
xBox One X,又稱“天蝎座”,“x1x”,已經是幾年前的機器了。雖然比新的 XSX 落后一代,但在 4K 電視上玩,性能足夠用了,經典游戲還玩不過來呢,誰急著換主機啊(其實是窮)。最近玩的比較多,越發覺得硬盤太慢,該換 SSD 了。
我的這臺是國行,已經跨服。最近看了不少帖子,發現很多貼都沒有細說“國行刷完能否再次變成港服”的問題,倒是有不少零散的帖子提到,手欠刷了機/換了硬盤,就再也不能跨服了(我懶,沒有深究原因,只是覺得挺麻煩,不想冒這個風險)。
于是繼續查,終于找到了標題中說的,真正的“不限 SSD 容量,保持港服,保留登錄狀態,不用 OSU1 鏡像文件,不用 Ubuntu”的方法。
在查找教程的過程中,我發現很多教程關于細節說的都不清楚,造成實際操作時,會遇到各種各樣的問題。
所以我才有動力寫這篇文章,盡量把一些細節認真地說清楚。
在這里先說一下,最終結果 是,換完硬盤開機,我的帳號、白嫖朋友的 XGP 帳號、港服狀態、開機動畫、Wifi 等各種設置,以及最近游戲的圖標的排列等等,和換盤之前一模一樣,不告訴你都不知道換過硬盤這種,字節級復制的效果。
你能用最大 5T 的 SSD,但 微 軟 只 認 最 大 2T
的 容 量!!!后 面 3T 不 認!!!
所以,最大買 2T 的就行了,不要太浪
!!!小心容量損失!!!
一是小容量用著真是難受,裝幾個游戲就滿了,二是教程雖然寫了支持,但容量太小總比大了容易出問題,三是現在 SSD 這么便宜,何必呢。
1、一塊 SSD。我買的是 1T 的,因為確實夠用了。按工具的說明書,500G、1T、2T 是最標準的三種容量,都能保證完美更換。就是這個愛國者,只確認了是 TLC(不想要 QLC),并且不算太貴,是 1T(而不是 960G)就買了。(后來發現 960G 好像 也可以,但這時已經是后來了)
2、一臺裝了 Win10,至少能再插兩塊硬盤的電腦。臺式機當然好,用 SATA 復制數據會快一些。沒條件的話,用 USB 硬盤盒轉接也行,但一定保證供電,別弄一半掛了。
3、下載主要工具“xboxonehdd-master”,現在更新到第 9 版了,以后可能還會更新。點擊直接下載最新版:https://gbatemp.net/download/xbox-one-windows-and-linux-internal-hard-drive-partitioning-script.34239/download
如果鏈接寄了,就自己找前面引號里的文件名吧,挺好找的。
主要流程網上都有,但有一些問題。簡單的我就直接粘圖了,并且會四處引用一些圖片,把普遍說錯的、關鍵的、容易出錯的步驟單獨說一下。(拆機的參考圖片網上有的是,就不放具體鏈接了)
1、國行機器是有保修貼的,拆機就沒保了——當然都2022年了,有保的 x1x 也基本不存在了吧。按下圖開始拆機。
2、下圖這一步,教程就說錯了。前兩步是對的,方向對好,平拉大概8~9mm。然后,照他寫的是打不開的。
首先,這時左側完全動不了,所以右側應該是以左側邊為軸,向外輕輕掰一點(因為模具有點卡,不掰抬不起來),一直向上抬(而不是只抬1cm),直到右側完全離開下面機身為止。此時,上蓋是左低右高的。
然后,左側也不是說,上抬1cm就開了。因為左側從正面往里看,是 下圖 這樣的結構。這個地方,上蓋有孔有擋片,底下有齒,直接拿根本拿不下來!
所以,先按 下 右 圖 中 1 的方向,往上抬一點。然后,以下面右側的草圖中,齒和孔交錯那條邊為軸,按 2 的方向,把整個上蓋向左旋轉,大概90度,再把上蓋向左移,就能 輕巧的 下來了。手感上看,左側全程無阻力,無卡頓(感覺有就晃一晃,調整位置,慢點)
3、下圖這一步很簡單,但我這個國行,是 T8 的螺絲,而不是 T9 的。 --- 注意顏色,往回裝時別錯了!
拆完螺絲,插口在黃框后面,慢慢晃著向自己身體的方向扯 1cm,就下來了。
4、下圖是拆前側電路板,這一步教程各種問題,我直接說正確的吧。首先看圖,方向沒說錯。
先別動螺絲,看紅框里的白色小卡扣。用指甲(別用鑷子)從上方伸進那個小白扣上沿,輕輕往外一勾,就開了。
然后拆 3 個螺絲,同樣是 T8 。
這個板后面也有插口,就在圖中的紅框后面。以紅框為中心捏著板子,邊晃邊往自己的方向扯(自己面對機器),輕點慢點,不用擠到排線,就能把板子扯下來 ——(定心丸:這個排線很長,順著線扯足夠長,但不要有剪切的力,不要折彎它)—— 然后,再用手拉著排線往下扯,就和板子分開了。
5、下圖中先拆兩顆 T8。然后用指甲從左側向上摳,很松。然后把這個軟線向右下壓一下,后面操作都要小心它,別壓壞了。
6、下圖,拆連接螺絲,都是 T9。6 紅是塑料下底的,4 藍是硬盤架的,一起擰了就行。
7、巨坑標記,后面裝機要用!
下圖說“調轉方向”正確。但是,注意橙藍雙圈,4 個塑料榫頭的存在!這幾個榫頭沒有其它功能,就是真正的榫頭,機殼前塑料蓋里有幾個對應的洞,固定用的。
這里需要拿著機身中后部,以前面榫頭那條線為軸,只抬蓋子的后面,邊抬邊轉。后面完全分離了,再往前拉,就能和榫頭分開了。
8、前面拆了硬盤螺絲,省了一步。下圖中,用 T9 拆 2 個螺絲,注意長度!
然后,就可以用力的、垂直往上扯,拆下底部金屬殼了。這一步只有阻力,沒有卡子,用力就行。
注意,上圖中兩個藍圈,是殼子和下面的光驅之間的連接部。這里一有金屬殼的彈性,二有密封的海棉條,所以卡的比較緊。要用點力。
9、至此,露出了光驅。把光驅掀開,就能拿出硬盤。
看下圖,光驅線 拔不拔都行,想拔就拔光驅這一端的線(無卡扣,有點緊),因為主板那端根本下不去手。
硬盤的線 還是要拔的,就是下圖第3幅里,那三個小紅方框,左邊的兩個,從主板上拔下來,硬盤架就下來了。
然后按第6幅圖,擰下4個螺絲,再把 橙色框 那個轉接頭拔下來(無卡扣),硬盤就拆下來了。
1、把“xboxonehdd-master-9.rar”復制到 C盤 根目錄,解壓到當前文件夾。正確路徑是:
C:xboxonehdd-masterwin
C:xboxonehdd-masterwin
進去后,應該能看到一堆文件。
2、如下圖,把電腦語言改成英文,設為默認語言,重啟電腦。這步太簡單,不細說了。
修改完成并重啟后,開始菜單、控制面板都會變成英文的,這就行了。還有很多地方是漢語,不用管它。
3、關機,把電腦上除了主硬盤之外,其它硬盤都盡量拔掉。這是減小風險,免的手抖把有用的資料清掉。
開機后,確認以下盤符沒有被占用(各種 NAS 大佬請注意):
“H、I、J、K、L、U、V、W、X、Y”,一共10個。
4、關機,把原 xBox 硬盤和 新SSD 都插好,開機。跳出什么盤符都無視。(如果你用 USB 接硬盤的話,當然就不用關機了。)
5、按“Win”鍵,輸入“cmd”,在“Command Prompt”上右鍵(注意這里已經是英文系統了),一定要點 "Run as administrator" !如下圖所示。
6、在出來的窗口中,輸入如下命令:
cd C:xboxonehdd-masterwin
回車。(正常的話,窗口應該能接受Ctrl+V),這一步是進入程序所在的路徑。
然后,輸入命令:
create_xbox_drive.bat
回車。會跳出 下圖 的屏幕,顯示 從H:到 Y:都是“ is free ”。按任意鍵 繼續。
7、如下圖,會跳出 a~h 的選項。 輸入 b ,回車 。
(這一步是功能選擇。選項 b:從 原盤 到 SSD 自動分區、復制資料)
8、如下圖,會顯示現在電腦上的硬盤列表。(—— 注意,我當時沒截屏,現在是隨便復現一下,為了裝的像一些,我也弄了 3 塊硬盤)
可以看到,電腦中的每塊盤都有 0、1、2 的編號,從后面的名字,能分清每塊盤都是誰( —— 你要是連這都分不清,就收手吧)
然后,還是上圖。提示我們“ Select SOURCE ……”,需要輸入 源盤 的編號,也就是 xBox 里拆下的 機械硬盤的編號。如果 你的屏幕上,2 是源盤,就輸入 2 ,回車。
9、然后,屏幕一閃,就會提示“Select TARGET……”,讓你輸入 目標盤 的編號。輸入新的 SSD 對應的編號,回車。( 這步不演示了,怕萬一手抖,就覆蓋亂了。。。)
(注意!!!這兩步一定要認真,因為你的編號很可能是亂的。比如我這個圖,1 才是系統盤,0 是機內倉庫盤,2 是 USB 外掛盤。)
回車之后,好像有一步是,確認是否擦除目標盤數據,確定就行。(—— 記不清了,也不敢繼續演示
)
10、然后,就是非常重要的一步:選擇 你的目標盤容量。下圖 不是程序窗口,而是一個教程里截的,內容一樣。
( 圖源:參考文獻 3)
以(b)為例,意思是,1T 的硬盤,可用(裝游戲的)容量是 781G,還有 50G 是浪費的。
如果你的硬盤是 500G 的,就輸入 a ,回車;如果是 1T、2T 的,就對應輸入 b 或 c ,回車。
如果 你的盤是 256G(不會吧) 或 750G 的,就輸入 d,如果是 3、4、5T 的,就輸入 f。程序會給你一個偽造的 GUID 表。但是,比如 1.5T 的盤,就只能按 1T 的用,損失 500G。
Most people should choose (a), (b), or (c). If you have a 256GB or 750GB you
should select (d). For 3TB, 4TB, or 5TB drives you should select (f).
11、然后,真忘了還有沒有確認,總之就開始復制數據了。這里慢慢等,看 不 到 總 進 度,但有經驗的同學可以自己估一下時間。它只拷有效數據,空閑的空間不會浪費時間的。等著,直到提示全部完成,按任意鍵退出。這一次,是直接退出了整個“xboxonehdd-master”程序。
別關 CMD 窗口!
同時,好像還會跳出 5 個新盤符(SSD 的新分區),無視就行。(我就是這時發現,這個 1T 的 SSD,最后有大概 72G 的空間未分配,相當于浪費了。所以, 960G 的硬盤應該也能按 1T 的來分區的,只浪費 30G。方便的朋友可以試試)
12、關鍵的來了!修復 GUID 表!
原理(這一段可以不看):GUID 表保存在硬盤中,每個硬盤分區對應一串字符,屬于硬件標簽。所有 xBox 原廠硬盤的 GUID 表都相同,也存了一份在機器的系統文件中。游戲機開機后,先讀硬盤的 GUID 表,再和系統中保存的對比,如果對不上,就是硬盤被玩家換了,就會出錯。這個“xboxonehdd-master”會把 xBox 原廠五個區的 GUID 表(應該是固化在工具里的),強行寫到新的 SSD 里,游戲機就能認識這個盤了。很多教程會在這里說一堆,讓你自己去查表(還不說怎么查),又給出那個標準表(有的只是文字提到了,并沒把表格給出來)去對比,顯得又高深又麻煩,最后還沒說清楚原理。
實際上,我們根本什么都不用查,也不用對比,直接無腦往下操作,就行了:
在剛才留著的 CMD 窗口里,再次輸入命令:
create_xbox_drive.bat
回車。這一次,不用看顯示內容,按任意鍵 繼續,會再次跳出 a~h 的選項。
然后如下圖,這次輸入 c ,回車。
注意,這次會直接出現“ Select TARGET……”,而不像剛才一樣,先選源盤再選目標。輸入新 SSD 的編號數字,回車。( PS:隔了一天繼續寫,我換了一塊 U 盤)
不用管什么標準的 GUID 表,也不用操心回車之后處理的對不對,回車之后,稍等幾秒鐘(這個操作特別快),電腦關機,拔硬盤,就完事了。
13、一個小插曲:
剛才的回車后,如果你開著音箱,電腦會有一聲報警,細心的還能看到 SSD 的五個盤符瞬間消失。
去磁盤管理器里看,SSD 這塊盤會提示 下圖 這樣的錯誤(如果你會看的話)。這個現象,以前沒有教程里提過,我查了半天,終于發現:(算了不說什么原理了,總之)這時我們根本什么都做不了。不用去管它,直接關電腦就行了。
14、至此,硬盤的拷貝已經完成。
還有一個問題,關于 SSD 的 4K 對齊,有些教程說,像是這樣以近似拷貝的方式做完,是對不齊的。但是,有帖子從這個 xboxonehdd-master 工具,以及 Win10 的分區原理上分析,并且用 AS SSD 查看了,這樣處理后的 SSD 是 4K 對齊的,我也認為應該是的。(參考文獻 5)
做完以后,我也想用 AS SSD 驗證一下,到底對齊了沒,但出現了上面那個沖突問題,查了半天就忘看了,等裝好之后,誰還想再拆一遍啊
。
這里,拆機一共 9 步,反著做就行了,但是,有兩個地方要注意。
(湊)、擰硬盤螺絲時,我就特別納悶,同樣是標準的 2.5 寸盤,可是原裝的 4 個螺絲,有一個死活擰不進去,也不知道是原裝螺絲太粗,還是愛國者這個盤的孔太小。反正 SSD 也不怕震,3 個螺絲忍了。
1、拆機第 8 步,金屬殼往光驅上套時,小心殼上對應光驅兩側的密封條,用手壓著點再使勁,弄壞了容易進灰。
2、拆機第 7 步,那個“巨坑標記,后面裝機要用” ,如果按照拆機圖這么擺放,手拿著機殼,從上面往機芯上套,你就忙去吧,半小時能蒙對地方,都算你運氣好!不光是那 4 個塑料榫頭,殼子里還有一堆固定螺絲的孔位,都是凸起的。
把底殼翻面,平放在地上,有套著榫頭的那 4 個洞的一面放在后側(遠離自己)。然后把機芯也翻個面,塑料榫頭對著那4個洞,輕輕一塞,就進去了,特別方便!
3、拆機第 2 步,左側上蓋有洞有擋,下蓋有齒那里,也要注意一下。把上蓋側立起來,擋片塞進去,再向下轉右側,就把洞和齒套上了。裝蓋子右側時,也需要向外掰一下,就能復原了。
就像我最初說的,一套流程下來,再次開機,簡直沒什么可寫的,完 完 全 全 看不到任何變化。沒有任何一步初始化操作,和上一次開機一樣,賬戶港服狀態、各種設置、游戲內容等等等等,都和之前一模一樣 —— 除了讀盤反應更快了。
換 SSD 的提升還是很明顯的,在主界面,進游戲庫,看 XGP 列表,看游戲詳情等,這些操作的速度有了實質性的加快。
進游戲,加載游戲首頁,和切換場景時,也會快一些,但具體的要看游戲了。
然后,在游戲里打開物品欄,切換各種菜單、地圖,好像也 流暢 了一些,不知道是真的還是個人感覺(本來也不算慢)。
我玩游戲不多,不做詳細對比了。如果你想換 SSD,那肯定是受夠了機械硬盤慢吞吞的讀盤速度,就換吧。
寫這篇教程,一是因為,這個方法 對國行港服的用戶 太友好了。
二是因為,現有的教程真是,各種細節不清。比如 DOS 界面里,軟件的各種分支選項,不寫清楚了,很多時候沒人敢動,或者會去亂動的。再就是對不同容量的硬盤的支持,也沒有中文教程說過(這里贊一下工具自帶的說明文檔,真的很全,但是英文的)
還有裝機時那個榫頭問題,真是完全沒人提過。
祝大家都能成功換盤,加速讀盤。
作者聲明本文無利益相關,歡迎值友理性交流,和諧討論~
言
在前篇的OSU教程中已經簡單的完成了基礎戰斗部分,缺失的轉動圓盤功能這里會做補充。而且為了讓游戲效果更好,我會在游戲中插入視頻,并講解Unity5.6之后新出的VideoPlayer功能(一個很方便的視頻播放系統)。最后UI相關的知識點(網上收集整理的)補充游戲啊,這樣各位對UGUI的知識就掌握的七七八八了。
廢話不多說先上效果圖:
圓盤轉動數學知識
圓盤轉動主要是對我么在圓盤上輸入的位置點和之前的位置點做處理,讓UI知道我們是往哪個方向轉動的。曾經入門Unity的時候沒有太多的經驗,使用的是以圓盤中心劃分四個象限,通關鼠標的偏移來做的旋轉。現在來看,感嘆當初游戲數學知識不過關,為了避免各位讀者也走我之前的老路,我先普及一個數學概念。
向量的點乘和叉乘
點乘:
兩個向量點乘得到一個標量 ,數值等于兩個向量長度相乘后再乘以二者夾角的余弦值
公式里面有個余弦值,我們可以利用余弦的特性判斷出:
若為 o,則表示兩個向量之間角度是垂直關系, 。
若小于0 ,則兩個向量夾角大于90°。
若結果 >0 ,則兩個向量夾角小于 90°
總結:點乘通常用來判斷角度,在判斷物體是否轉動到目標角度、虛擬搖桿在某個方向上的力度,或者shader里面對光線做處理都會用到這個。
叉乘:
數學老師曾說過,兩個向量叉乘確定一個平面,而平面是有方向的。
a X b不等于b X a,因為確定的平面方向是剛好相反的,比如a X b我們根據右手定則,得到的是向上的向量,若b X a我們的右手就是向著a向量方向收攏,得到是向下的向量。
總結:叉乘通常判斷向量的方向,判斷a在b向量的相對位置通過叉乘的正負判斷是非常有效的。
代碼原型實現
我們只用獲取到鼠標開始拖拽轉盤UI時,每次鼠標偏移位置帶來的角度變化,以及轉盤左轉還是右轉,因為我們想讓轉動是單方向的,就直接轉動為逆時針的時候直接return,如果要任意轉動,則將return的地方改為angle=-angle。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class TurnAround :NoteLogic { /// <summary> /// UI上的圓盤物體 /// </summary> public RectTransform uiDisk; /// <summary> /// 對UI監聽的一個重寫(可以下載源碼查看) /// </summary> public EventTriggerListener eventTrigger; /// <summary> /// 上一幀點擊的方向 /// </summary> Vector2 perTouchDir; /// <summary> /// 圓盤中心點位置 /// </summary> Vector2 uiDiskPos; /// <summary> /// 當前轉動角度記錄 /// </summary> float curAngle; /// <summary> /// 和上篇一樣,通過重構虛函數,讓操作部分實現不同Node不同操作。 /// </summary> public override void OnJudgetOperation() { //將Ugui的開始拖拽事件和拖拽事件綁定功能函數 eventTrigger.onBeginDrag=BegionTurn; eventTrigger.onDrag=Turn; uiDiskPos=uiDisk.transform.position; //協程判斷時間是否超出,超出則直接判定當前分數 StartCoroutine(OnDelayCall(judgeTime)); } IEnumerator OnDelayCall(float rTime) { yield return new WaitForSeconds(rTime); JudgetStore(); } /// <summary> /// 開始拖拽UI的時候,儲存一個點擊點到轉盤中心點的向量 /// </summary> public void BegionTurn(PointerEventData rData) { perTouchDir=rData.position - uiDiskPos; } /// <summary> /// 轉動處理 /// </summary> /// <param name="rData"></param> public void Turn(PointerEventData rData) { //得到當前鼠標到轉盤中心的向量 var curTouchDir=rData.position - uiDiskPos; //上一幀向量和當前幀向量叉乘得到一個判斷當前向量位置值 var crossValue=Vector3.Cross(perTouchDir, curTouchDir); //獲取兩幀之間轉動的角度(Unity自帶的函數,原理其實可以用點乘來搞定) float angle=-Vector3.Angle(perTouchDir, curTouchDir); //如果逆時針旋轉,不響應 if (crossValue.z > 0) { return; } //讓ui旋轉角度 uiDisk.transform.Rotate(new Vector3(0, 0, angle)); //保存當前幀向量 perTouchDir=curTouchDir; curAngle -=angle; //提示的圓圈UI根據轉動的值由大變小 circleTipObj.gameObject.transform.localScale=Vector3.one * Mathf.Lerp(10, 0, curAngle / targetValue); //轉動到目標值判定分數 if (curAngle > targetValue) { JudgetStore(); } } public void JudgetStore() { if (curState==eState.Over) { return; } if (curAngle > targetValue) { curScore=eScore.Perfect; } else if (curAngle > targetValue*0.6f) { curScore=eScore.Good; } else { curScore=eScore.Fail; } StopCoroutine("OnDelayCall"); SetCurState(eState.Over); } }
(繼承NoteLogic的代碼有改動,對項目感興趣的朋友可以下載源碼)
VideoPlayer視頻播放
說到視頻播放曾經是Unity的一個坑點,PC和手機平臺的視頻播放采用兩種方式。電腦上是MovieTexture格式還得裝QuickTime,手機上則是利用Handheld.PlayFullScreenMovie接口播放而且還是直接停止代碼運行(怎么做功能啊喂!)。項目中為了用到視頻最后采用了MobileMovieTexture插件,但是效果有點差,得用專門的格式,還得放在流文件夾,而且音效還得單獨制作。
但是之前5.6更新的時候,新出的VideoPlayer功能搞定了以上的問題,PC端和手機端播放視頻的方式都做了統一,而且支持攝像機鏡頭播放,UGUI播放等多種播放方式,同時還能直接搞定音頻。簡直太方便了!
先說流程:
1.放入視頻文件,這里我將視頻轉換成了Unity支持的格式MP4
2.新建VideoPlayer組件,簡單介紹下組件的功能
Source:可以選擇是本地視頻還是URL視頻,如果是URL視頻只用下方寫上地址即可。
Wait For First Frame: 勾選PlayOnAwake后有效,避免加載視頻過程中直接播放卡掉前幾幀。
PlaybackSpeed:視頻播放速度。
RenderMode:視頻是哪里方式渲染的,目前有再攝像機上渲染,渲染到貼圖上,渲染到材質球,和OnlyAPI(沒對這個接口做研究)
AspectRatio:長寬比,是寬度適配還是高度適配。
Audio OutPut Mode:音頻輸出方式,這里選用通關AudioSource輸出。
3.因為我們將視頻渲染到UI上,因此需要一個目標渲染的貼圖,創建一個渲染貼圖
可以直接設置貼圖的像素:
4.創建一個UICanva當作視頻播放的界面
然后創建一個RawImage組件,掛載VideoPlayer組件,和音頻組件
RawImage的貼圖可以是任意類型,不一定是Sprite類型,因此我們沒有選用Image組件。
這樣我們就可以實現視頻播放了,是不是特別簡單?
順便補充:
VideoPlayer可以使用一系列事件來監聽播放的各個動作:
errorReceived: 錯誤監聽到時被執行
frameDropped :有丟幀發生時被執行
frameReady :新的一幀準備好時被執行
loopPointReached :播放結束或播放到循環的點時被執行
prepareCompleted :視頻準備完成時被執行
seekCompleted :查詢幀操作完成時被執行
started:在Play方法調用之后立刻調用
UGUI的相關知識點補充
以下是對UI相關的知識點整理,有自己闡述的也有來源于網絡各處的,如果侵權聯系我會進行刪除。
什么是圖集?
在使用3D技術開發2D游戲或制作UI時(即使用GPU繪制),都會使用到圖集 ,那么什么是圖集呢?準確的說法圖集是一張包含了多個小圖的大圖和一份記錄了每個小圖id、位置、尺寸等數據的數據文件 。
為什么要用圖集?
在GPU已經成為PC、手機等設備的必備組件的現在,把所有顯示的繪制操作交給專門處理圖像的GPU顯然比交給CPU更合適,這樣空閑下來的CPU可以集中力量處理游戲的邏輯運算。
而GPU處理圖像的做法和CPU是不一樣的,在GPU中,我們要繪制一個圖像需要提交圖片(即紋理)到顯存,然后在進行繪制(這個過程稱為一次DrawCall),那么如果我們一幀要繪制100個就需要提交100次圖片,如果使用包含了這100圖片的圖集,只需要一次提交即可,即一次DrawCall就搞定,處理效率上會有很大的提升。
另外使用圖集也方便管理和歸類各個模塊的圖片,可以通過一次加載和一次卸載完成多個圖片的處理,同理,加載次數也下來了,可以提升運行效率。
CPU與GPU的限制
GPU一般具有填充率(Fillrate)和內存帶寬(Memory Bandwidth)的限制,如果你的游戲在低質量表現的情況下會快很多,那么,你很可能需要限制你在GPU的填充率。
CPU一般被所需要渲染物體的個數限制,CPU給GPU發送渲染物體命令叫做DrawCalls。一般來說DrawCalls數量是需要控制的,在能表現效果的前提下越少越好。通常來說,電腦平臺上DrawCalls幾千個之內,移動平臺上DrawCalls幾百個之內。這樣就差不多了。當然以上并不是絕對的,僅作一個參考。
如何使用圖集
在Unity中我們只要使用小圖片即可,可以通過設置圖片的Packing Tag來指定小圖會被打包到的圖集,比如2個小圖的Packing Tag都叫“MyAtlas”,則Unity會將這兩個小圖打包到名為“MyAtlas”的圖集中。
注意圖片不能放在Resources文件夾下面,Resources文件夾下的資源將不會被打入圖集。
通過設置我們就可以發現多個同一Packing Tag的小圖放到場景中只會消耗一個DrawCall,表示我們的圖集已經開始起作用了。
Unity用到的基本圖片格式
Unity3D引擎對紋理的處理是智能的:不論你放入的是PNG,PSD還是TGA,它們都會被自動轉換成Unity自己的Texture2D格式。
在Texture2D的設置選項中,你可以針對不同的平臺,設置不同的壓縮格式,如IOS設置成PVRTC4,Android平臺設置成RGBA16等。嗯,非常的智能。
tga是無損支持透明的無壓縮格式,dds有一點點壓縮,png是無損壓縮,對效率要求高的可以tga,dds,ui一般png,psd不可取
格式對比
2的n次方冪天然被GPU接受
為什么要關心渲染順序?
1.如果是2D游戲,渲染順序關系著每個層次的顯示先后,比如UI在游戲內容前面,游戲內容又有多層次。舉一個簡單的例子,在橫版2D游戲中,經常會用到多層滾動的背景,把游戲物體分層管理起來,可以有效的減少出錯幾率,很好的控制顯示效果。
2.對于3D游戲,游戲內容是3D的,UI一般是2D,有很多時候需要把某個模型啊,粒子特效啊,放在界面上,這樣就有一個問題,3D物體和2D界面的先后關系,比如有些界面是在模型之上的,有些在下面,嘗試過很多種辦法,都能實現需求,但不是每種辦法都是那么舒服的。
unity中控制渲染順序的方式
Camera是unity中最優先的渲染順序控制。depth越大,渲染順序越靠后。
sortingLayer 和 sortingOrder
按照字面意思是層的排序,Canvas和Renderer都有這個屬性。
Canvas中的sorting layer可以控制Canvas的層級
Sorting order可以控制UI和粒子的層級
RenderQueue
這是unity中的一個概念,大致意思就是渲染順序 。
所以一般設置材質的renderQueue或直接在shader中設置。
(可以再Debug模式下直接修改)
在ShaderLab中,有4個提前定義好的render queue,你可以設置更多的在他們之間的值:
Background :表示渲染在任何物體之前
Geometry(default):渲染大多數幾何物體所用的render queue
AlphaTest:用于alpha測試
Transparent:用于渲染半透明物體
Overlay:渲染所有物體之上
空間深度
在攝像機坐標系下的Z軸,控制著該相機下的物體的深度,在fragment shader中進行深度測試,這樣就控制了渲染到屏幕的順序。
總結
轉盤轉動功能用數學方法可以很容易來解決,游戲中用到數學的地方非常的多。
關于視頻功能,Unity新出的VideoPlayer功能簡單易用,同時安全性也高。若舊版本的升級后,項目需要視頻功能的朋友可以試試這個功能。而且視頻相對使用2D動畫和即時演算雖然占用包體大小,但是對實際內存占用缺不高,對資源的依賴性也非常低。如果制作開場效果,選用視頻方法來實現是非常不錯的。
最后補充的UI相關知識,Unity在弱化圖集的概念,但是工程項目中圖集理解缺至關重要。同時渲染的知識也牽扯到UI,這個對自動化開關管理UI和修改粒子的層級效果至關重要。
最后附上源碼:
https://github.com/chs71371/OSU_Battle
(包里有視頻,我做了一個壓縮包,解壓就可以了,位置Resources/assetsbundles/video)