unity 制作書本 翻頁效果


 

 

unity 制作書籍翻頁效果

unity C# 翻書效果 2D 真實翻頁 不使用插件 自制

 

實現思路

將書本分為兩邊,一邊一個翻頁實現;

 

下圖為書本的右面,以OA為分界線,△OAB是下一面的如上圖的左下角,△OAC是下一面的如上圖的右下角;

 

利用unity的mask可以實現,也就是,假設這一頁是1(左邊那一頁是0),需要有一個對象作為底面顯示3,一個對象被mask遮住顯示2的左下角在△OAB上,一個對象被mask遮住顯示1的左上部分在◇OADE上;

 

OAB部分的mask可以如下圖理解:◇OAFG是mask,◇OBCD是2,翻頁時,◇OAFG逆時針轉動,◇OBCD作為◇OAFG的子對象,相同的方向旋轉相同角度;

 

 

其他部分以及左邊頁面實現的原理都同上,還有就是翻書的中心點是以兩頁中間底部為旋轉原點;

 

 

實現步驟

1.新建一個2D項目並在hierarchy面板新建一個Canvas,並在其下建立如下對象,從上到下含義可以理解為左邊底頁面、左邊逐漸消失頁面(父對象為mask子對象為圖片)、左邊逐漸出現頁面、右邊底頁面、右邊逐漸消失頁面(父對象為mask子對象為圖片)、右邊逐漸出現頁面,其中的LeftPageShadow和RightPageShadow是翻書的陰影,如下圖2的灰色線,會跟着◇OBCD一起旋轉,但是是反方向才能和書折痕的邊緣契合,折痕圖片使用下圖3有漸變的即可;

 

 

 

2.此處將單講右邊部分,左邊部分同理。RightBottomPage_Appear不需要怎么修改,只需把坐標設置好,作為底面即可。把Width和Height設置成想要的尺寸,PosY為-Height*0.5f,調至頁面的右側,還需要把Pivot設置為0,0,把旋轉中心點設置為書本中軸線的底部;

 

 

3.RightTopCover_DisAppear設置如下,為了顧及旋轉時RightTopPage_DisAppear會出頭,此處簡單粗暴的把Width設置為2倍,同理也要把旋轉中心點設置在中軸線底部,Pivot設置為0,0;

 

 

4.RightTopPage_DisAppear設置如下,不多說;

 

 

5.RightNextCover、RightNextPage和RightPageShadow基於同樣的原因和效果出現的位置做如下設置,可在設置過程中體會理解,注意Pivot和Rotation,RightPageShadow可以減少顏色透明度來減淡陰影;

 

 

6.創建一個腳本並掛載在MainCanvas上,定義以下變量,上面部分的Image表示對應名字的Image屬性,Sprite[]表示所有書頁,turningTime表示翻頁時間,isturing表示當前是否正在翻頁;

 

 

7.右邊翻向左邊的代碼如下,SetSiblingIndex是設置物體在hierarchy面板的位置,用來排序,因為排在下面的物體會顯示在排在上面的物體的前面,SetSiblingIndex具體說明可參看unity文檔。offsetAngle根據旋轉時間來調節旋轉的幅度。然后就是各種角度的疊加和旋轉抵消。ResetBookImage函數和ResetPagesAttribute函數,后面細說。此處使用SetSiblingIndex也可通過,創建兩個空物體然后附加一個canvas組件,把左右兩邊的物體分別作為子物體,然后通過調節sorting order來顯示哪一頁在前面;

 

 

8.左邊翻向右邊的代碼如下,同理不再贅述

 

 

9.ResetPagesAttribute的代碼如下,重置所有Image的坐標和角度;

 

 

10.創建如下變量,含義分別為當前頁數,最大頁數,還有左邊翻頁協程和右邊翻頁協程。ResetBookImage函數代碼如下,用於重新設置各個Image對應的圖片,此處比較需要抽象和想象,想通就很容易理解;

 

 

11.在Start里初始化變量和重設圖片,然后再創建兩個函數用來啟動翻頁的功能;

 

 

12.在hierarchy面板創建一個空物體並掛載新腳本InputControl用來控制點擊,代碼如下。此處使用Graphic Raycaster(UI射線)來檢測點擊的位置,還需要創建兩個空Image並調至要響應翻頁的地方,此處為頁面左右兩邊並且寬度為總寬度的四分之一。射線檢測通過比對name來進入不同翻頁;

 

 

至此,使用unity原生組件制作書本翻頁效果的功能就完成了,以下為效果

 

 

 

 

另外還可參考GitHub上的這位道友的項目:

https://github.com/Dandarawy/Unity3DBookPageCurl


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM