1. 程式人生 > >關於Unity中stretch的分開使用、預制體、Scroll View的UI節點

關於Unity中stretch的分開使用、預制體、Scroll View的UI節點

pre 左右 類型 ane 不變 rac tor pos initial

一、上次講的菊花的四個花瓣,只講了四個花瓣和在一起的時候的作用,現在是分開的菊花的四個花瓣的作用


1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg。
4.再創建一個GameObject的空節點作為Canvas的子節點。
5.在GameObject下面創建一個叫icon的Image類型的UI子節點
6.把icon的顏色改為紅色便於觀察,大小改為300X300
點擊左上角的stretch,圖案選擇最右下角的四個花瓣對應四個角的狀態,
7.菊花花瓣的作用是父親節點GameObject伸縮多少,子節點icon就伸縮多少,四個角的偏移量不會變化,相對距離不變。就是子節點在四個花瓣的作用下跟著父節點伸縮。
8.如果上面中間兩塊花瓣,下面中間兩塊花瓣,那麽父節點伸縮的時候,上下縮的話,子節點也上下縮,左右縮的時候,子節點不會縮。

二、預制體
模板,有的時候,一個小兵要生成10個,需要一個模板
1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個image的UI節點作為Canvas的子節點,名字叫item.
4.在Resources文件夾下面創建一個文件夾叫做prefabs
5.直接把item拖進prefabs文件夾中
6.發現會自動生成一個預制體,原來的item節點也會變成藍色
7.這時候修改Hierachy下的item節點,預制體也會發生變化,修改之後記得點右上角的Apply
8.Revert表示預制體覆蓋回節點,但是修改Rect Transform中的屬性是無法Revert的。Apply是從節點再保存回預制體
9.如果想斷開這種連接關系,選中節點-->菜單-->GameObject-->Break Prefab Instance
修改預制體,所有與它相關的節點都被修改,除非斷開連接,這時候修改預制體,節點不會跟著變,但是一旦點擊Revert或者Apply都會重新建立連接


預制體也是節點的一個復制
使用代碼實例化預制體
1.寫一個叫game_scane的腳本,掛載到Canvas節點上
2.定義腳本中的public屬性,public GameObject item_prefab
3.把預制體拖進Hierachy面板的game_scane腳本的item_prefab屬性上

public class game_scene : MonoBehaviour {
public GameObject item_prefab;

// Use this for initialization
void Start () {
    GameObject item = GameObject.Instantiate(this
.item_prefab);//以預設體為模板實例化一個物體 item.transform.SetParent(this.transform);//放在正確的父節點下,不寫這個會放根節點下 item.transform.localPosition = new Vector3(0, 0, 0); //設置坐標 } }


三、Scroll View節點


1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg。
4.創建一個Scroll View的UI節點在Canvas下作為子節點
5.Scroll View節點下面的Viewport子節點,Viewport子節點有一個Mask組件用來裁剪其子節點的顯示範圍,Viewport就相當於一個蒙版
6.Viewport節點下面有一個Content節點用來存放內容
7.Scrollbar Horizontal和Scrollbar Vertical是Scroll View的子節點,表示拉條。
8.在Content下面創建多個Imgae的UI子節點,把同一張圖片依次拖進去
9.給Content一個排版的腳本,這裏用Grid
10.發現運行後可以上下或者左右拖動Content中間的內容,這是因為在Scroll View節點的scroll rect屬性面板勾選了Horizontal和Vertical,表示允許橫拉和縱拉。
11.有的時候上下拖動不了,是因為Content的高度太小,圖片的高度加起來比Content的高度大,修改一下Content的高度就好了,用計算器算出Content的高度。
12.Scrollbar關聯的時候不能隱藏,可以直接刪除。關聯的方式是直接把Scrollbar節點拖進Scroll View的scroll rect的Scrollbar屬性裏


制作一個排行榜
1.創建一個Canvas
2.對Canvas進行初始化
3.創建一個Image的UI節點作為Canvas的子節點,名字叫bg。
4.創建一個叫rank的Scroll View的UI節點在Canvas下作為子節點
5.給rank一個排行榜的背景圖片
6.在rank下面創建一個子Image節點叫tital,用來顯示分數排行的標題圖片
7.背景圖片要在rank節點外面放好了就行了,最好是比rank大一點,可以給rank的Image一個顏色,再隱藏這個Image組件
8.在rank再創建一個rank_option的子節點,類型是Image
9.在rank_option的子節點下面再創建一個mask的子節點用來放頭像的裁剪蒙版節點,記得要加上Mask裁剪組件和拖進裁剪貼紙。
10.在Mask節點下面再創建一個叫avator的Image節點用來表示放頭像圖片。這時候發現沒有裁剪成功,是因為沒有運行的原因,運行起來,頭像就裁剪了。
11.在mask上面再創建一個空的父節點,在這個空的父節點下面創建一個Image類型的節點用來顯示相框圖片。
12.在rank_option子節點下面創建一個Image類型的UI節點用來放分割線,叫slice_line
13.在rank_option子節點下面創建一個Text類型的UI節點叫unick
14.把整個rank_option節點拖到預制體文件夾prefabs中,可以把空節點的Iamge組件隱藏起來,就可以去掉白色區域了。
15.給rank節點的Content加一個排版的組件grid,一般都是用grid,等一下要弄很多rank_option節點進來
16.用代碼實現rank_option節點的實例化和批量添加和擺放

public class game_scene : MonoBehaviour {
public GameObject item_prefab;
public GameObject rank_prefab;
public ScrollRect rank;
// Use this for initialization void Start () { // rect transorm this.rank.content.sizeDelta = new Vector2(0, 20 * 160); for (int i = 0; i < 20; i++) { GameObject opt = GameObject.Instantiate(this.rank_prefab); opt.transform.SetParent(this.rank.content); opt.transform.Find("unick").GetComponent<Text>().text = "" + (i + 1); } } }

關於Unity中stretch的分開使用、預制體、Scroll View的UI節點