Unity物件的所有元件深拷貝與貼上

2021-08-08 14:06:11 字數 3364 閱讀 7869

unity中,經常有物件或預製體,但是想要把某個預製體或物件的元件全部都拷貝到某個新的物件上。 

unity 雖然已經提供了copy component這個功能, 

這個功能很不錯,可以拷貝貼上,但是面對某個元件上大量的元件和裡面的各種引數調整, 

物件或預製體的層級結構深,各層的元件多,引數也紛繁複雜,這個就不太靈光了。 

* 怎麼辦呢? 

網路上查出了, asset store上面有這個東西,所可以拷貝的。但是居然要求要5刀啊!! 

哎呀,不科學啊!!**就不給出了,因為有我,他們就不再被需要了。 

咋辦?道理很簡單,不就是複製和貼上麼? 

哈哈!!先來簡單的,兩步走。 

1.拷貝

static component copiedcomponents;

[menuitem("gameobject/copy current components #&c")]

static

void copy()

一句話,就是獲取當前選中的物件的元件,然後儲存於變數中。 

2.貼上

[menuitem("gameobject/paste current components #&p")]

static

void paste()}}

這裡面幹了點啥?基本上都是自解釋的句子。使用了unityeditorinternal的componentutility的函式。

copycomponent

pastecomponentasnew

然後在編輯器的gameobject下就可以看到copy current components和paste current components兩個選單了,當然還包括他們的快捷鍵。 

由於擔心與其他快捷鍵重複,所以ctrl,shift,alt都是用上了。當然你可以根據自己喜好來決定。

上面的當前層的拷貝,已經把當前拷貝乙個層的問題解決了。 

深度拷貝,當然要深入到物件或預製體的所有子物件進行拷貝了。 

1. 建立了乙個鍊錶來解決層級的問題。

public

class mycomponentlist

public listgameobjlist;

public listnextlist;

}

2.拷貝物件元件,包括所有子物件元件內容

static mycomponentlist pri_my_list = new mycomponentlist();

private

static

void

getallchilds(gameobject transformforsearch, mycomponentlist next)

foreach (transform item in transformforsearch.transform)

return;

}[menuitem("gameobject/copy all components #%&c")]

static

void copy()

3.選擇新物件貼上拷貝內容

private

static

void

pastechildcomponent(gameobject gameobj, mycomponentlist next)

}if (next.nextlist != null)

int i = 0;

foreach (var item in next.nextlist)

i++;}}

}

稍微羅嗦一下,深度拷貝與貼上元件都使用了遞迴呼叫。 

貼上的遞迴過程中,首先貼上了當前層級的所有元件,方法仍舊使用的是第一種拷貝貼上的方法。 

然後遍歷子物件中的物件,遞迴呼叫。 

就是這樣。

物件陣列的深拷貝和物件的深拷貝

1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....

物件深拷貝

最近在專案中用到了物件拷貝這一塊,而且用到的是物件的深拷貝。下面就讓我們來看一下關於物件的拷貝 淺拷貝和深拷貝。先看一下深拷貝和淺拷貝的區別 概念 js 中的淺拷貝與深拷貝,只是針對複雜資料型別 object,array 的複製問題。淺拷貝與深拷貝都可以實現在已有物件上再生出乙份的作用。但是物件的例...

js 物件深拷貝 深拷貝與淺拷貝

前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...