版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Unity3D腳本中文教程 Parti 一、 腳本概覽 這是一個(gè)關(guān) 于Unity部腳本如何工作的簡(jiǎn)單概覽。Unity 部的腳本是通過(guò)附加自定義腳本對(duì)象到游戲物體組成的。在腳本對(duì)象部不 同志的函數(shù)被特定的事件調(diào)用。最常用的列在下面Update這個(gè)函數(shù)在渲染一幀之前被調(diào)用這里是大部分游戲行為代 碼被執(zhí)行的地方除了物理代碼。FixedUpdate 這個(gè)函數(shù)在每個(gè)物理時(shí)間步被調(diào)用一次這是處理基于物理游戲的地方。 在任何函數(shù)之外的代碼在任何函數(shù)之外的代碼在物體被加載的時(shí)候運(yùn)行這個(gè)可以用來(lái)初始化腳本狀態(tài)。注意文檔的這個(gè)部份假設(shè)你是用Javascript 參考用C編寫(xiě)獲取如何使用C和Boo編寫(xiě)腳本的信息。你
2、也能定義事件句柄它們的名稱都以O(shè)n開(kāi)始例如OnCollisionEnter為了查看完整的預(yù)定義事件的列表參考 MonoBehaviour文檔。概覽常用操作 大多數(shù)游戲物體的操作是通過(guò)游戲物體的Transform或Rigidbody來(lái)做的在行為腳本部它們可以分別通過(guò) transform 和rigidbody 訪問(wèn)因此如果你想繞著 丫軸每幀旋 轉(zhuǎn)5度你可以如下寫(xiě) function Updatetransform.Rotate050如果你想向前移動(dòng)一個(gè)物體你應(yīng)該如下寫(xiě) function Update transform.Translate002概覽跟蹤時(shí)間Time類包含了一個(gè)非常重要的類變量稱為 d
3、eltaTime這個(gè)變量包含從上一次調(diào)用Update或FixedUpdate根據(jù)你是在 Update函數(shù)還是在 FixedUpdate函數(shù)中到現(xiàn)在的時(shí)間量。所以對(duì)于上面的例子修改它使這個(gè)物體以一個(gè)恒定的速度旋轉(zhuǎn)而不依賴于幀率functionUpdate transform.Rotate05Time.deltaTime0移動(dòng)物體function Update transform. Translate 002Time.deltaTime如果你加或是減一個(gè)每幀改變的值你應(yīng)該將它與Time.deltaTime 相乘。當(dāng)你乘以 Time.deltaTime 時(shí)你實(shí)際的表達(dá)我想以10米/秒移動(dòng)這個(gè)物體不是
4、10米/幀。這不僅僅是因?yàn)槟愕挠螒驅(qū)ⅹ?dú)立于幀而運(yùn)行同時(shí)也是因 為運(yùn)動(dòng)的單位容易理解。米/秒 另一個(gè)例子如果你想隨著時(shí)間增加光照的圍。下面的表達(dá)式以2單位/秒改變半 徑。function Update light.range 2.0 Time.deltaTime當(dāng)通過(guò)力處理剛體的時(shí)候你通常不必用Time.deltaTime 因?yàn)橐嬉呀?jīng)為你考慮到了這一點(diǎn)。概覽訪問(wèn)其他組件組件被附加到游戲物體附加 Renderer到游戲物體使它在場(chǎng)景中渲染 附加一個(gè)Camera使它變?yōu)橄鄼C(jī)物體所有的腳本都是組件因 為它們能被附加到游戲物體。最常用的組件可以作為簡(jiǎn)單成員變量訪問(wèn) Component可如下訪問(wèn) Tra
5、nsformtransform Rigidbody rigidbody Renderer renderer Camera camera only on camera objects Light light only on light objects Animation animation Collider collider等等。對(duì)于完整的預(yù)定義成員變量的列表。查看 ComponentBehaviour 和 MonnoBehaviour 類文檔。如果游戲物體沒(méi)有你想取的相同類型的組件上面的變量將被設(shè)置為null。任何附加到一個(gè)游戲物體的組件或腳本都可以通過(guò)GetComponent 訪問(wèn)。 tra
6、nsform.Translate030 / 等同于 GetComponentTransform.TranslateO 1 0 注意 transfom 和 Transform之間大小寫(xiě)的區(qū)別前者是變量小寫(xiě)后者是類或腳 本名稱大寫(xiě)。大小寫(xiě)不同使你能夠從類和腳本名中區(qū)分變 量。應(yīng)用我們所學(xué)你可以使用GetComponent找到任何附加在同一游戲物體上的腳本和組件請(qǐng)注意要使用下面的例子 能夠工作你需要有一個(gè)名為OtherScript的腳本其中包含一個(gè)DoSomething函數(shù)。OtherScript腳本必須與下面的腳本附加到相同的物體上。這個(gè)在同一游戲物體桑找到名為 OtherScript 的腳本/并
7、調(diào)用它上加的 DoSomething function Update otherScript GetComponentOtherScript otherScript.DoSomething概覽訪問(wèn)其它游戲物體大多數(shù)高級(jí)的代碼不僅需要操作一個(gè)物體Unity腳本接口有各種方法來(lái)找到并訪問(wèn)其他游戲物體和組件。在下面我們假定有個(gè) 一名為OtherScriptjs的腳本附加到場(chǎng)景的游戲物體上。var foo 5 function DoSomething param : String printparam quot with foo: quot foo 1.通過(guò)檢視面板賦值引用你可以通過(guò)檢視面板賦值變量到
8、任何物體/變換拖動(dòng)至U target 的物體 var target : Transform function Update target.TranslateO 1 0你也可以在檢視面板中公開(kāi)到其他物體的引用下面你可以拖動(dòng)一個(gè)包含的游戲物體 到檢視面板中的target槽。/設(shè)置在檢視面板中賦值的 target 變量上的 foo 調(diào)用 DoSomething var target : OtherScript function Update /設(shè)置 target 物體的 foo變量 target.foo 2 / 調(diào)用 target 上的 DoSomething target.DoSomethingq
9、uotHelloquot 2.通過(guò)物體層次定位對(duì)于一個(gè)已經(jīng)存在的物體可以通過(guò)游戲物體的Transform組件來(lái)找到子和父物體找到腳本所附加的游戲物體的 子一Handll transform.FindquotHandquot.TranslateO 1 0 一旦 在層次視圖中找到這個(gè)變換你可以使用GetComponent來(lái)獲取其他腳本/找到名為一Handll的子/在附加到它上面 的OtherScript 中設(shè)置foo為2 transform.FindquotHandquot.TranslateO 1 0 /找到名為一Handll的子/然后應(yīng)用一個(gè)力到附加在hand上的剛體transform.Fin
10、dquotHandquot.GetComponentOtherScript. DoSomethingquotHelloquot / 找到名為一Handll 的了 / 然后應(yīng)用一個(gè)力到附加在hand上的剛體transform.FindquotHandquot.rigidbody.AddForceO 10 0 你可以循環(huán)所有的子/變換的所有子向上移動(dòng)10個(gè)單位for var child : Transform in transform child.TranslateO1 0參考Transform 類文檔獲取更多信息。Part 2 3. 根據(jù)名稱或標(biāo)簽定位.你可以使用GameObject.FindW
11、ithTag 和GameObject.FindGameObjectsWithTag 搜索具有特定標(biāo)簽的 游戲物體使用GameObject.Find根據(jù)名稱查找物體。 function Start /按照名稱 var goGameObject.FindquotSomeGuyquot go.transform.TranslateO 1 0 /按照標(biāo)簽 var playerGameObject.FindWithTagquotPlayerquot player.transform.TranslateO 1 0你可以在結(jié)果上使用GetComponent在找到的游戲物體上得到任何腳本或組件。 functi
12、on Start / 按名稱 var goGameObject.FindquotSomeGuyquot go.GetComponentOtherScript.DoSomething / 按標(biāo)簽 var player GameObject.FindWithTagquotPlayerquot player.GetComponentOtherScript.DoSomething 些特殊 的物體有快捷方式如主相機(jī)使用Camera.main。4.作為參數(shù)傳遞一些事件消息在事件包含詳細(xì)信息。例如觸發(fā)器事件 傳遞碰撞物體的 Collider 組件到處理函數(shù)。OnTriggerStay 給我們一個(gè)到碰撞器的引
13、用。從這個(gè)碰撞器我們可以獲取附 加到其上的剛體。function OnTriggerStay other :Collider /如果另一個(gè)碰撞器也有一個(gè)剛體/ 應(yīng)用一個(gè)力到它上面 if other.rigidbodyother.rigidbody.AddForceO 2 0或者我們可以通過(guò)碰撞器獲取附加在同一個(gè)物體上的任何組件。functionOnTriggerStay other : Collider /如果另一個(gè)碰撞器附加了 OtherScript /調(diào)用它上面的 DoSomething / 大多數(shù)時(shí)候碰撞器不會(huì)附加腳本/所以我們需要首先檢查以避免 null 引用異常 if other.G
14、etComponentOtherScript other.GetComponentOtherScript.DoSomething注意通過(guò)上述例子中的other變量你可以訪問(wèn)碰撞物體中的任何組 件。5. 一種類型的所有腳本使用Object.FindObjectsOfType找到所有具有相同類或腳本名稱的物體或者使用 Object.FindObjectOfType. 找到這個(gè)類 型的第一個(gè)物體。function Start /找到場(chǎng)景中附加了OtherScript的任意一個(gè)游戲物體 var other : OtherScriptFindObjectOfTypeOtherScript other.D
15、oSomething概覽向量Unity 使用Vector3類同一表示全體 3D向量3D向量的不 同組件可以通過(guò)想 xy和z成員變量訪問(wèn)。var aPosition :Vector3 aPosition.x 1 aPosition.y 1 aPosition.z 1你也能夠使用Vector3構(gòu)造函數(shù)來(lái)同時(shí)初始化所有組件。 var aPosition Vector31 1 1 Vector3也定義了一些常用的變量值。var direction Vector3.up /與 Vector30 1 0 相同單個(gè)向量上的操作可以使用下面的方式訪問(wèn) someVector.Normalize使用多個(gè)向量的操作
16、可以使用Vector3 類的數(shù) theDistance Vector3.DistanceoneVector otherVector注意你必須在函數(shù)名之前寫(xiě)Vector3來(lái)告訴可以使用普通數(shù)學(xué)操作來(lái)操縱向量。combined vectorlvector2 查看Vector3類文檔獲取完整操縱和可用屬性的列 表。概覽成員變量amp全局變量變量 定義在任何函數(shù)之 外的變量是一個(gè)成員變量。在Unity中這個(gè)變量可以通過(guò)檢視面板來(lái)訪問(wèn)任何保存在成員變量中的值也可以自動(dòng)隨工程保存。var memberVariable 0.0 上面的變量將在檢視面 板中顯示為名為 quotMember Variablequ
17、ot 的數(shù)值屬性。如 果你設(shè)置變量的類型為一個(gè)組件類型例如 Transform Rigidbody Collider 任何腳本名稱等等然后你可以在檢視面 板過(guò)拖動(dòng)一個(gè)游戲物體來(lái)設(shè)置它們。var enemy: Transformfunction Update if Vector3.Distance enemy.position transform.position lt 10 printquotI sense the enemy is nearquot你也可以創(chuàng)建私有成員變量。私有成員變量可以 用來(lái)存儲(chǔ)那些在該腳本之外不可見(jiàn)的狀態(tài)。私有成員變量不 會(huì)被保存到磁盤(pán)并且在檢視面板中不能編輯。當(dāng)它被設(shè)
18、置為 調(diào)試模式時(shí)它們?cè)跈z視面板中可見(jiàn)。這允許你就像一個(gè)實(shí)時(shí) 更新的調(diào)試器一樣使用私有變量。private varlastCollider : Collider function OnCollisionEntercollisionInfo : Collision lastCollider collisionInfo.other全局變量你也可以使用 static 關(guān)鍵字創(chuàng)建全局變量這創(chuàng)造了一個(gè)全局變量名為someGlobal /TheScriptName.js中的一個(gè)靜態(tài)變量 static varsomeGlobal 5 /你可以在腳本部像普通變量一樣訪問(wèn)它printsomeGlobal some
19、Global 1為了從另一個(gè)腳本訪問(wèn)它你需要使用這個(gè)腳本的名稱加上一個(gè)點(diǎn)和全局變量名。printTheScriptName.someGlobalTheScriptName.someGlobal 10 Part3 概覽實(shí)例化 實(shí)例化 復(fù)制一個(gè)物體。包含所有附加的腳本和整個(gè)層次。它以你期 望的方式保持引用。至U外部物體引用的克隆層次將保持完好在克隆層次上到物體的引用映射到克隆物體。實(shí)例化是難以置信的快和非常有用的。因?yàn)樽畲蠡厥褂盟潜匾?。例?這里是一個(gè)小的腳本當(dāng)附加到一個(gè)帶有碰撞器的剛體 上時(shí)將銷毀它自己并實(shí)例化一個(gè)爆炸物體。var explosionTransform /當(dāng)碰撞發(fā)生時(shí)銷毀我
20、們自己/ 并生成給一個(gè)爆炸預(yù)設(shè) function OnCollisionEnter DestroygameObject var theClonedExplosion : Transform theClonedExplosion Instantiateexplosiontransform.position transform.rotation實(shí)例化通常與預(yù)設(shè)一起使用概覽Coroutines amp Yield 在編寫(xiě)游戲代碼的 時(shí)候常常需要處理一系列事件。這可能導(dǎo)致像下面的代碼。private var state 0 function Update if state 0 /做步驟 0 state
21、 1 return if state 1 /做步驟 1 state 2return / 更方便的是使用yield 語(yǔ)句。yield 語(yǔ)句是一 個(gè)特殊類型的返回這個(gè)確保在下次調(diào)用時(shí)該函數(shù)繼續(xù)從該yield 語(yǔ)句之后執(zhí)行。whiletrue / 做步驟0 yield / 等待一幀/ 做步驟1 yield /等待一幀/ 你也可以傳遞特定值給yield語(yǔ)句來(lái)延遲Update函數(shù)的執(zhí)行直到一個(gè) 特定的事件發(fā)生。/ 做一些事情yield WaitForSeconds5.0 / 等待5秒/做更多事情可以疊加 和連接coroutines 。這個(gè)例子執(zhí)行Do在調(diào)用之后立即繼續(xù)。Do print quotThis
22、 is printed immediatelyquot functionDo printquotDo nowquot yield WaitForSeconds 2 printquotDo 2 seconds laterquot這個(gè)例子將執(zhí)行 Do 并等待直到它完成才繼續(xù)執(zhí)行自己。/coroutine yieldStartCoroutinequotDoquot printquotAlso after 2 secondsquot print quotThis is after the Do coroutine has finished executionquot function Do print
23、quotDo nowquot yield WaitForSeconds 2 printquotDo 2 seconds laterquot任何事件處理句柄都可以是一個(gè)coroutine 注意你不能在 Update或FixedUpdate使用yield 但是你可以 使用StartCoroutine來(lái)開(kāi)始一個(gè)函數(shù)。參考YieldInstruction WaitForSeconds WaitForFixedUpdate Coroutine and MonoBehaviour.StartCoroutine 獲取更多使 用yield的信息。概覽用C編寫(xiě)腳本 除了語(yǔ)法使用C或者Boo編寫(xiě)腳本還有一些不同。
24、最需要注意的是1.從MonoBehaviour繼承所有的行為腳本必須從 MonoBehaviour 繼承直接或間接。在Javascript中這自動(dòng)完成但是必須在C或Boo腳本中顯示申明。如果你在Unity部使用Asset -gtCreate -gt C Sharp/Boo Script菜單創(chuàng)建腳本創(chuàng)建模板已經(jīng)包含了必需的定義。public class NewBehaviourScript : MonoBehaviour . / C class NewBehaviourScript MonoBehaviour: . Boo 2. 使用 Awake或 Start 函數(shù)來(lái)初 始化Javascript
25、中放置在函數(shù)之外的代碼在C或Boo中要放置在Awake或Start中。Awake和Start的不同是Awake 在場(chǎng)景被加載時(shí)候運(yùn)行而Start在第一次調(diào)用Update或FixedUpdate函數(shù)之前被調(diào)用所有 Awake函數(shù)在任何Start 函數(shù)調(diào)用之前被調(diào)用。3.類名必須與文件名相同Javascript中類名被隱式地設(shè)置為腳本的文件名不包含文 件擴(kuò)展名。在c和Boo中必須手工做。4.在C中Coroutines 有不同語(yǔ)法。 Coroutines 必有一個(gè)IEnumerator返回類型 并且 yield 使用 yield return 而不是 yield using System.Colle
26、ctions using UnityEngine public class NewBehaviourScript : MonoBehaviour / C coroutine IEnumerator SomeCoroutine / 等一幀 yield return 0 / 等兩秒 yield return new WaitForSeconds 2 5不要使用命名空間 目前Unity還不支持將代碼放置在一個(gè)命名空間中 這個(gè)需要將會(huì)出在未來(lái)的版本中。6.只有序列化的成員變中顯示屬性不被序列化或顯示在檢視面板中。7避免使用構(gòu)造函數(shù) 不要在構(gòu)造函數(shù)中初始化任何變量使用Awake或Start實(shí)現(xiàn)這個(gè)目的。
27、即使是在編輯模式中Unity也自動(dòng)調(diào)用構(gòu)造函數(shù)這通常發(fā)生在一個(gè)腳本被編譯之后因?yàn)樾枰{(diào) 用構(gòu)造函數(shù)來(lái)取向一個(gè)腳本的默認(rèn)值。構(gòu)造函數(shù)不僅會(huì)在無(wú) 法預(yù)料的時(shí)刻被調(diào)用它也會(huì)為預(yù)設(shè)或未激活的游戲物體調(diào) 用。單件模式使用構(gòu)造函數(shù)可能會(huì)導(dǎo)致嚴(yán)重的后果帶來(lái)類 似隨機(jī)null引用異常。因此如果你想實(shí)現(xiàn)如一個(gè)單件模式不要使用構(gòu)造函數(shù)而是使用Awakeo其實(shí)上沒(méi)有理由一定要在繼續(xù)自MononBehaviour類的構(gòu)造函數(shù)中寫(xiě)任何代碼。 概 覽最重要的類Javascript 中可訪問(wèn)的全局函數(shù)或 C中的基 類移動(dòng)/旋轉(zhuǎn)物體動(dòng)畫(huà)系統(tǒng)剛體FPS或第二人稱角色控 制器概覽性能優(yōu)化1使用靜態(tài)類型 在使用Javascript
28、 時(shí) 最重要的優(yōu)化是使用靜態(tài)類型而不是動(dòng)態(tài)類型Unity使用一種叫做類型推理的技術(shù)來(lái)自自動(dòng)轉(zhuǎn)換Javascript為靜態(tài)類型編碼而不需要你做任何工作。var foo5在上面的例子里foo會(huì)自動(dòng)被推斷為一個(gè)整型值。因此Unity可能使用大量的編譯時(shí)間來(lái)優(yōu)化。而不使用耗時(shí)的動(dòng)態(tài)名稱變量查找等。這就是為什么Unity比其他在JavaScript的實(shí)現(xiàn)平均快20 倍的原因之一。唯一的問(wèn)題是有時(shí)并非一切都可以做類型推斷。Unity將會(huì)為這些變量重新使用動(dòng)態(tài)類型。通過(guò)回到動(dòng)態(tài)類型編寫(xiě)JavaScript代碼很簡(jiǎn)單。但是這也使得代碼運(yùn)行速度較慢。讓我們看一些例子 function Start var foo
29、 GetComponentMyScript foo.DoSomething 這里 foo 將是動(dòng) 態(tài)類型因此調(diào)用 DoSomething函數(shù)將使用較長(zhǎng)時(shí)間因?yàn)閒oo的類型是未知的它必須找出它是否支持DoSomething函數(shù)如果支持調(diào)用它。function Start var foo : MyScriptGetComponentMyScript foo.DoSomething 這里我們強(qiáng)制 foo 為指定類型你將獲得更好的性能。2使用pragma strict 當(dāng)然現(xiàn)在問(wèn)題是你通常沒(méi)有意識(shí)到你在使用動(dòng)態(tài)類型。pragmastrict解決了這個(gè)簡(jiǎn)單的在腳本頂部添加pragma strict 。然
30、后unity將在腳本中禁用動(dòng)態(tài)類型強(qiáng)制使用靜態(tài)類型如果 一個(gè)類型未知。Unity將報(bào)告編譯錯(cuò)誤。那么在這種情況下 foo 將在編譯時(shí)產(chǎn)生一個(gè)錯(cuò)誤pragma strict functionStart var foo GetComponentMyScript foo.DoSomething 3.緩存組件查找 另一個(gè)優(yōu)化是組件緩存。不幸的是該優(yōu)化需 要一點(diǎn)編碼并且不一定是值得的但是如果你的腳本是真的用了很長(zhǎng)時(shí)間了你需要把最后一點(diǎn)表現(xiàn)出來(lái)這是一個(gè)很好 的優(yōu)化。當(dāng)你訪問(wèn)一個(gè)組件通過(guò)GetComponent或訪問(wèn)變量Unity會(huì)通過(guò)游戲?qū)ο笳业秸_的組件。這一次可以很容易 地通過(guò)緩存保存在一個(gè)私有變量里
31、引用該組件。簡(jiǎn)單地把這個(gè) function Update transform.TranslateO 0 5變成private var myTransform : Transform function AwakemyTransform transform function Update myTransform.TranslateO 0 5后者的代碼將運(yùn)行快得多因?yàn)閁nity沒(méi)有找到變換在每一幀游戲組件中的對(duì)象。這同樣 適用于腳本組件在你使用GetComponent代替變換或者其它的東西。4.使用置數(shù)組 置數(shù)組的速度非??焖哉?qǐng)使用它 們。而整列或者數(shù)組類更容易使用因?yàn)槟憧梢院苋菀椎靥?加元素他們幾乎沒(méi)有相同的速度。置數(shù)組有一個(gè)固定的尺寸 但大多數(shù)時(shí)候你事先知道了最大的大小在可以只填寫(xiě)了以 后。關(guān)于置數(shù)組最好的事情是他們直接嵌入在一個(gè)結(jié)構(gòu)緊湊 的緩沖區(qū)的數(shù)據(jù)類型沒(méi)有任何額外的類型信息或其他開(kāi)銷。 因此遍歷是非常容易的作為一切緩存在存中的線性關(guān)系。private var positions : Vector3 function Awake positions new Vector3100 for var i0ilt100i positionsi Vector3.zero 5.如果你不需要就不要調(diào)用函數(shù)最簡(jiǎn)單的和所有優(yōu)化最好的是少工作量的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)電腦程控跑步機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)風(fēng)冷渦旋式冷水機(jī)組市場(chǎng)調(diào)查研究報(bào)告
- 連鎖店裝修項(xiàng)目班組協(xié)議
- 2025年中國(guó)百草枯母藥市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)民用蠟燭市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)時(shí)裝鞋市場(chǎng)調(diào)查研究報(bào)告
- 城市綠化鏈家居間服務(wù)合同
- 2025至2031年中國(guó)退火鋼帶行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)窗簾花邊配件行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)焊接保護(hù)混合氣行業(yè)投資前景及策略咨詢研究報(bào)告
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲(chǔ)罐設(shè)計(jì)規(guī)范(正式版)
- 2024年??谑羞x調(diào)生考試(行政職業(yè)能力測(cè)驗(yàn))綜合能力測(cè)試題及答案1套
- 六年級(jí)數(shù)學(xué)質(zhì)量分析及改進(jìn)措施
- 一年級(jí)下冊(cè)數(shù)學(xué)口算題卡打印
- 真人cs基于信號(hào)發(fā)射的激光武器設(shè)計(jì)
- 【閱讀提升】部編版語(yǔ)文五年級(jí)下冊(cè)第三單元閱讀要素解析 類文閱讀課外閱讀過(guò)關(guān)(含答案)
- 四年級(jí)上冊(cè)遞等式計(jì)算練習(xí)200題及答案
- 法院后勤部門(mén)述職報(bào)告
- 2024年國(guó)信證券招聘筆試參考題庫(kù)附帶答案詳解
- 道醫(yī)館可行性報(bào)告
- 仙家送錢(qián)表文-文字打印版
評(píng)論
0/150
提交評(píng)論