版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
廣東東軟學(xué)院本科畢業(yè)設(shè)計(jì)(論文)摘要隨著中國游戲以及互聯(lián)網(wǎng)科技的發(fā)展,游戲越來越受到人們的歡迎,不管是手機(jī)游戲,電腦游戲,還是主機(jī)游戲,都在中國市場中占有很大的份額,游戲的交互性不同,以及按玩家年齡分類,分層等特點(diǎn)使得它適合各種年齡層的人。在各種游戲中,角色扮演類游戲得到大多數(shù)人的青睞,在此之上衍生出的動(dòng)作角色扮演類游戲由于動(dòng)作元素的加入成為更多人的選擇。動(dòng)作角色扮演類游戲是一種融合了動(dòng)作類游戲以及角色扮演類游戲的一種游戲類型,玩家可以在體驗(yàn)游戲劇情的同時(shí)體驗(yàn)到游戲豐富的動(dòng)作系統(tǒng)。本次畢業(yè)設(shè)計(jì)制作的游戲便是一款角色扮演類游戲,但是求其風(fēng)格偏向做出了調(diào)整,與以往追求爽快簡單的動(dòng)作角色扮演類游戲不同的是,本游戲加入了市面上一種新的“魂式”玩法,即更多的操作要求以及更難的難度,更加強(qiáng)調(diào)玩家的生存感,而是否能將這兩者成功進(jìn)行結(jié)合,產(chǎn)生一個(gè)新的方向,則是本論文所需要探討解決的問題。此外,游戲?qū)⑹褂肬nity3D引擎進(jìn)行制作。關(guān)鍵詞:Unity3D;3D技術(shù);動(dòng)作角色扮演類游戲
AbstractWiththedevelopmentofChinesegamesandInternettechnology,gamesarebecomingmoreandmorepopularamongpeople.Whetheritismobilegames,computergamesorconsolegames,theyallhavetheirownpositionintheChinesemarket.ThegameitselfisalsointheChinesemarket.Withalargeshare,thegame'sinteractivity,classification,andstratificationmakeitsuitableforpeopleofallages.Amongthem,role-playinggamesarefavoredbymostpeopleinvariousgames,andtheaction-playinggamesderivedfromthemarethechoiceofmorepeoplebecauseoftheadditionofactionelements.Actionrole-playinggamesareatypeofgamecombiningaction-typegamesandrole-playinggames.Playerscanexperiencethegame'srichactionsystemwhileexperiencingtheplotofthegame.Thegamedesignedbythisgraduationisarole-playinggame,butitsstylehasbeenadjusted.Unlikethepreviouspursuitofrefreshingandsimpleactionrole-playinggames,thisgamehasaddedanewtypeonthemarket."Soul-style"gameplay,thatis,moreoperationalrequirementsandmoredifficultdifficulty,andmoreemphasisontheplayer'ssenseofsurvival,andwhetherthetwocanbesuccessfullycombinedtoproduceanewdirection,thispaperneedstoexploresolvedproblem.Inaddition,thegamewillbeproducedusingtheUnity3Dengine.Keywords:Unity3D3DtechnologyActionR
目錄第一章 緒論 [7]中詳細(xì)對該插件進(jìn)行了介紹以及該如利用它制作自動(dòng)尋路功能,在這里可以借用該組件,讓怪物對的主角導(dǎo)航,實(shí)現(xiàn)追逐玩家的功能。首先需要將地圖上的地面刷成可導(dǎo)航區(qū)域,點(diǎn)擊Unity窗口上的Window→AI→Navigation,出現(xiàn)功能窗口,需要設(shè)置以下自動(dòng)尋路區(qū)域的static,允許怪物自動(dòng)尋路的高度,上臺(tái)階的高度,以及半徑等,如圖3-18所示:圖3-18Navigation設(shè)置圖緊接著需要將地牢場景的static設(shè)置成Navigationstatic,按下Navigation面板的bake,然后場景將變成怪物的可尋路區(qū)域,然后回到怪物身上,需要給他加一個(gè)Nav組件,并設(shè)置尋路的速度,停止距離等參數(shù),如圖3-19所示:圖3-19怪物NavMeshAgent設(shè)置圖完成這一步后,最后需要給怪物新建一個(gè)腳本,用來調(diào)用navmesh組件以及給予怪物目標(biāo),完成動(dòng)畫的播放,關(guān)鍵代碼如下:
if
(CanSeeTarget()
&&
Vector3.Distance(transform.position,player.position)
<
15)
{
nav.SetDestination(player.transform.position);
patrolling
=
false;
if
(nav.remainingDistance
<
nav.stoppingDistance)
{
anim.SetBool("isAttack",
true);
}
else
{
anim.SetBool("isAttack",
false);
}
}
else
{
anim.SetBool("isAttack",
false);
if
(!patrolling)
{
nav.SetDestination(lastKnowPosition);
if
(nav.remainingDistance
<
nav.stoppingDistance)
{
patrolling
=
true;
StartCoroutine("GoToNextPoint");
}
}
}
anim.SetFloat("forward",
nav.velocity.sqrMagnitude);
這里給敵人設(shè)置了一個(gè)眼睛的對象,需要在Unity里新建一個(gè)空對象拖進(jìn)Prefab里眼睛的位置,敵人通過射線檢測自身與目標(biāo)的位置而進(jìn)行判斷要不要進(jìn)行追蹤,到達(dá)一定距離后,就會(huì)按照動(dòng)畫控制的設(shè)置攻擊玩家,假如不在范圍之內(nèi),敵人則會(huì)在設(shè)置的兩個(gè)點(diǎn)進(jìn)行巡邏,將目標(biāo)對象設(shè)置成public,在怪物Prefab下能夠見到,只需要將主角的Prefab拖進(jìn)去,這樣的主角就成為了目標(biāo),怪物也能夠識(shí)別到目標(biāo)了,最后將普通敵人的prefab復(fù)制多個(gè),分組放在場景不同區(qū)域,到這里,普通怪物的設(shè)置就完成了。接下來就是Boss怪物的設(shè)置,這里Boss與普通怪物使用同一個(gè)腳本,也就是AI基本是一致的,只需要做出模型差異,大小差異,數(shù)值差異以及動(dòng)畫差異,首先將Boss的Prefab拖進(jìn)場景最終區(qū)域,對其進(jìn)行與普通怪物一致的設(shè)置,并對其設(shè)置一套類似的動(dòng)畫控制器,需注意的一點(diǎn)就是Boss的基本數(shù)值比普通怪物高出不少,確保游戲難度以及體驗(yàn),設(shè)置完畢后發(fā)現(xiàn)Boss也能夠?qū)ν婕疫M(jìn)行追蹤以及做出攻擊動(dòng)畫,整個(gè)怪物以及Boss的設(shè)置就完成了。戰(zhàn)斗設(shè)計(jì)與實(shí)現(xiàn)在前面的章節(jié)中,玩家角色以及敵人的基本設(shè)置已經(jīng)完成,在這一章節(jié),將主要進(jìn)行具體玩法設(shè)置,也就是戰(zhàn)斗內(nèi)容的設(shè)計(jì),本游戲的戰(zhàn)斗采用經(jīng)典ARPG的戰(zhàn)斗方式,通過鍵盤控制玩家角色移動(dòng),鼠標(biāo)則作為攻擊鍵,選中敵人進(jìn)行攻擊。敵人則發(fā)現(xiàn)玩家,追蹤玩家,到達(dá)攻擊距離進(jìn)行攻擊。戰(zhàn)斗傷害實(shí)現(xiàn)首先需要在角色控制腳本申明一個(gè)GameObject對象,稱其為opponent,這個(gè)對象實(shí)際上就是的敵人,需要在敵人的腳本寫一個(gè)OnMouseOver的方法,當(dāng)鼠標(biāo)指向敵人的時(shí)候,敵人將會(huì)把自己作為opponent傳給角色腳本,具體代碼如下所示:void
OnMouseOver()
{
player.GetComponent<AtcorCon>().opponent
=
gameObject;
}
然后再角色控制腳本中,在控制攻擊的腳本那里,需要補(bǔ)上判斷opponent物件是否為空,也就是是否選中敵人,如果選中,則將角色方向朝向敵人,這樣攻擊的方向也就正確了,如下所示:if
(pm.attack)
{
anim.SetTrigger("attack");
if
(opponent
!=
null)
{
transform.LookAt(opponent.transform.position);
}
}
if
(pm.spAttack)
{
if
(opponent
!=
null)
{
transform.LookAt(opponent.transform.position);
}
}
然后需要編寫游戲的攻擊距離,先申明一個(gè)距離range,設(shè)置為public類型,方便再游戲中進(jìn)行調(diào)整,然后編寫一個(gè)bool函數(shù),判斷是否在攻擊距離內(nèi),判斷的依據(jù)是玩家與敵人的位置坐標(biāo)距離小于等于range,則返回true,否則返回false。最后是攻擊時(shí),攻擊數(shù)值的交換,首先需要在敵人控制腳本里編寫一個(gè)受擊方法,為了方便角色腳本調(diào)用,這個(gè)方法要申明成public,且需要傳入一個(gè)int類型的傷害值,這個(gè)方法的作用就是讓敵人受擊,生命值會(huì)等于當(dāng)前生命值減去傷害值?;氐浇巧_本,編寫一個(gè)攻擊的方法,當(dāng)目標(biāo)不為空時(shí)且在攻擊距離內(nèi),調(diào)用敵人的受擊方法,且傳入角色的傷害值,技能傷害的做法一樣,只是傳的值改為技能傷害值,關(guān)鍵腳本示例如下:bool
InRangeAttack()
{
if
(Vector3.Distance(opponent.transform.position,
transform.position)
<=
range)
{
return
true;
}
else
{
return
false;
}
}
void
IsAttack()
{
if
(opponent
!=
null
&&
InRangeAttack())
{
opponent.GetComponent<EnemyCon>().GetHit(damage);
}
}
敵人的攻擊和角色的一樣,只是反過來編寫,需要注意的時(shí),角色擁有防御的機(jī)制,因此在編寫敵人攻擊方法的時(shí)候需要判斷玩家是否處于防御狀態(tài),當(dāng)角色處于防御狀態(tài),敵人傷害會(huì)降低。關(guān)鍵代碼如下:
if
(player.GetComponent<PlayerMovemont>().isDefend)
{
damage
=
1;
}
最后,在選中敵人的時(shí)候,需要一個(gè)高亮邊框的效果,這里需要進(jìn)入AssetStore下載一個(gè)第三方插件——HighlightingSystem,這個(gè)插件的作用是能讓鼠標(biāo)選中物體產(chǎn)生高亮邊框效果,下載完畢后需要給敵人Prefab添加一個(gè)Highlighter的腳本,并設(shè)置邊框顏色,給MainCamera添加一個(gè)HighlightingRenderer的腳本叫可以實(shí)現(xiàn)邊框效果了,如圖3-20所示:圖3-20選中敵人高亮效果圖戰(zhàn)斗死亡實(shí)現(xiàn)在前面的動(dòng)畫設(shè)置中,角色和敵人都設(shè)置了自身的死亡動(dòng)畫,現(xiàn)在,只需要角色或者怪物的生命值減少到0的時(shí)候,判斷角色死亡,讓角色與敵人正常死亡。需要注意的一點(diǎn)是,當(dāng)怪物死亡的時(shí)候,必須在規(guī)定時(shí)間內(nèi)消除Prefab。關(guān)鍵代碼如下:角色腳本:bool
IsDeath()
{
if(playerHealth
==
0)
{
return
true;
}
else
{
return
false;
}
}
void
Dead()
{
anim.SetTrigger("isDeath");
pm.inputEnable
=
false;
pm.attack
=
false;
經(jīng)過測試,當(dāng)角色和敵人的生命值為0時(shí),能夠正常執(zhí)行死亡流程。戰(zhàn)斗交互實(shí)現(xiàn)在戰(zhàn)斗中,角色可以拾取分布在場景中的血瓶,在角色的生命值快要消耗完的時(shí)候,玩家可以通過按下Q鍵使用藥瓶恢復(fù)生命值。首先,需要先制作血瓶,在場景中創(chuàng)建一個(gè)Capsule,將其改成紅色,并且加上Capsulecollider組件,將IsTrigger屬性打勾,同時(shí)將Prefab的設(shè)置成potion,這樣就能讓角色使用碰撞檢測拾取藥瓶?;氐浇巧_本,先申明一個(gè)int類型的藥瓶數(shù)量,用于表示角色拾取的數(shù)量,還有就是申明一個(gè)bool類型的參數(shù),用于判斷藥瓶可交互的狀態(tài),最后編寫一個(gè)具體的恢復(fù)生命值的方法,以及OnTriggerEnter碰撞檢測方法,關(guān)鍵代碼如下:void
Heal()
{
if
(interactable
==
true)
{
potion
+=
1;
interactable
=
false;
}
if
(potion>0)
{
if
(Input.GetKeyDown(KeyCode.Q))
{
playerHP.value
+=
20;
playerHealth
+=
20;
potion
-=
1;
}
}
if
(playerHealth>100)
{
playerHealth
=
100;
}
}
void
OnTriggerEnter(Collider
other)
{
if
(other.gameObject.tag
==
"potion")
{
interactable
=
true;
Destroy(other.gameObject);
}
}
void
OnTriggerExit(Collider
other)
{
if
(other.gameObject.tag
==
"potion")
{
interactable
=
false;
}
}
經(jīng)過測試,發(fā)現(xiàn)角色碰撞到藥瓶prefab時(shí)藥瓶數(shù)量+1,按下Q鍵能正?;謴?fù)生命值,最后將prefab復(fù)制多個(gè),放在場景中的不同地方,藥瓶的設(shè)置就完成了。角色升級實(shí)現(xiàn)在前面進(jìn)行角色設(shè)置的時(shí)候,角色擁有經(jīng)驗(yàn)值這一參數(shù),在這里就需要用到這一參數(shù),經(jīng)驗(yàn)值隨著玩家擊殺的敵人數(shù)量增長,當(dāng)經(jīng)驗(yàn)值每積滿一次,角色就會(huì)升級,此時(shí)角色的攻擊力會(huì)上升,生命值也會(huì)恢復(fù),然后經(jīng)驗(yàn)值又重新歸零,等待下一次升級。關(guān)鍵代碼如下:
public
void
LevelUp()
{
if
(opponent
!=
null)
{
if
(opponent.GetComponent<EnemyCon>().enemyHealth
==
0
)
{
exp
=
exp
+
0.15f;
if
(exp
>=
100)
{
exp
=
0;
playerLevel
+=
1;
playerHealth
=
100;
damage
+=
10;
playerHP.value
=
playerHealth;
GameObject
instance
=
(GameObject)Instantiate(lvUp,
fx.transform.position,
fx.transform.rotation);
Destroy(instance,
0.5f);
}
}
}
經(jīng)過測試,發(fā)現(xiàn)玩家在經(jīng)驗(yàn)值達(dá)到100時(shí)能正常升級,這一步就完成了游戲音效管理游戲中存在背景音樂以及動(dòng)作音效,本節(jié)將會(huì)把音樂元素加入游戲當(dāng)中,首先需要在場maincamera中加入一個(gè)Audiosource組件,將游戲背景音樂拉進(jìn)去,并設(shè)置成循環(huán)播放,如圖3-21所示:圖3-21游戲背景音樂設(shè)置圖為了方便游戲中角色和敵人的聲音的管理,需分別創(chuàng)建一個(gè)角色以及敵人用的聲音管理腳本,這些聲音包括移動(dòng)的腳步聲,攻擊音效等,然后將腳本掛載再角色身上,將相應(yīng)的聲音文件加進(jìn)去。為了讓聲音準(zhǔn)確的在某些時(shí)刻發(fā)出,就需要用到動(dòng)畫的幀事件,舉個(gè)例子,在添加角色走路聲前,需要到角色走路動(dòng)畫下面,選中角色的腳接觸到地面的兩個(gè)時(shí)間點(diǎn),加入幀事件,再到聲音管理腳本中用方法實(shí)現(xiàn)事件,調(diào)用走路的聲音。圖3-22為幀事件設(shè)置示例圖。圖3-22幀事件設(shè)置示例圖調(diào)用幀事件代碼示例:public
AudioClip
footStep;
void
Start()
{
playerAudio
=
GetComponent<AudioSource>();
}
void
FootStep()
{
this.playerAudio.clip
=
this.footStep;
playerAudio.Play();
}
將游戲中角色以及敵人需要的音效都按照以上方法配置,保存,進(jìn)行測試,發(fā)現(xiàn)角色在進(jìn)行移動(dòng),攻擊,釋放技能,翻滾,死亡時(shí)都能播放正確的音效。敵人的所有動(dòng)作也能播放正確音效,到這里,游戲的音效效果就實(shí)現(xiàn)了。
游戲界面與視覺效果角色屬性以及圖標(biāo)顯示游戲中的一些關(guān)鍵屬性,需要通過UI的形式在游戲中展現(xiàn)出來,方便玩家更直觀地了解角色的狀態(tài),以及在游戲中可以進(jìn)行的一些操作。本節(jié)將會(huì)設(shè)計(jì)玩家在游戲中一些屬性界面,按鍵提示,以及游戲中的圖標(biāo)。在游戲中玩家的生命值,經(jīng)驗(yàn)值,目前都是沒有直觀的表現(xiàn),因此首先需要為角色制作血條,經(jīng)驗(yàn)條。在場景中新建一個(gè)Canvas,游戲中的UI物件都應(yīng)該放在這里面。首先創(chuàng)建一個(gè)Slider,將其底下的滑塊物件隱藏,將其FillArea設(shè)置成紅色,并將Slider的參數(shù)調(diào)整至如圖4-1所示:圖4-1血條slider屬性設(shè)置圖然后將該Slider進(jìn)行復(fù)制,將其FillArea改成藍(lán)色,設(shè)置錨點(diǎn),將兩個(gè)Slider并排放置在Canvas的左上角。接下來需要將其與角色的相關(guān)屬性進(jìn)行關(guān)聯(lián),來到角色腳本,申明兩個(gè)Slider,在Star方法里,將血條Slider的值等于角色的初始生命值,經(jīng)驗(yàn)條Slider的值等于0,并在角色受擊方法和升級方法里分別編寫Slider隨著屬性值的變化而變化。經(jīng)驗(yàn)值slider的設(shè)置與血條一致,只需要寫入升級的方法就可以,關(guān)鍵代碼如下:public
Slider
playerExp;
public
Slider
playerHP;
void
Start()
{
playerHP.value
=
playerHP.maxValue
=
playerHealth;
playerExp.value
=
playerExp.minValue
=
exp;
anim
=
GetComponent<Animator>();
pm
=
GetComponent<PlayerMovemont>();
}
public
void
PlayerGetHit(int
damage)
{
playerHealth
-=
damage;
playerHP.value
=
playerHealth;
if
(playerHealth
<=
0)
{
playerHealth
=
0;
}
}
最后需要給角色加入頭像以及等級顯示,在角色腳本中申明一個(gè)Text組件,用來顯示角色等級,當(dāng)用Tostring方法將角色等級等于Text顯示的內(nèi)容,將其放在血條的上方,再在Canvas下創(chuàng)建一個(gè)Image組件,將其背景圖設(shè)置為角色的頭像圖,全部設(shè)置完畢后,角色的屬性狀態(tài)顯示如圖4-2所示:圖4-2角色屬性狀態(tài)顯示圖接下來需要給游戲中的Boss添加一個(gè)血條,由于Boss在關(guān)卡的最后才會(huì)出現(xiàn),因此他的血條一開始必須是隱藏的,運(yùn)用與給角色添加血條的方法,給Boss制作一個(gè)類似的血條,置于游戲窗口下面,并一開始將他隱藏,接著在接近Boss的地方放置一個(gè)Cube,并將其MeshRenderer隱藏,添加剛體,并設(shè)置為Trigger,在腳本中加入碰撞檢測,當(dāng)玩家接觸碰撞體,則顯示Boss的血條,如圖4-3所示:圖4-3Boss血條圖游戲中還存在藥瓶以及技能的圖標(biāo),首先在Canvas下創(chuàng)建兩個(gè)Image組件,分別將代表技能以及藥瓶的圖片放入,并將其放在游戲場景中的左下方。其中藥瓶圖標(biāo)下需要能夠顯示目前所擁有的藥瓶數(shù)量以及按鍵提示,因此,創(chuàng)建兩個(gè)個(gè)Text組件,將其放在圖標(biāo)下,一個(gè)用于按鍵提示,一個(gè)用于與腳本中的藥瓶數(shù)量相關(guān)聯(lián),關(guān)鍵代碼如下:public
Text
potionQuantity;
potionQuantity.text
=
potion.ToString();
技能圖標(biāo)同樣需要一個(gè)按鍵提示,且需要在技能冷卻時(shí)做變灰的處理,這個(gè)只需要在技能圖標(biāo)上面蒙一層灰色透明的圖片,并在腳本中編寫代碼讓其技能冷卻時(shí)啟用就可以了。關(guān)鍵代碼如下:public
GameObject
skillIm;
float
timer;
bool
isSkill1;
void
Update()
{
timer
+=
Time.deltaTime;
if
(timer
>=
5)
{
timer
=
5;
isSkill1
=
true;
skillIm.SetActive(false);
}
else
{
skillIm.SetActive(true);
}
if
(Input.GetMouseButton(1)
&&
timer
==
5)
{
timer
=
0;
}
完成后經(jīng)過測試,發(fā)現(xiàn)兩個(gè)圖標(biāo)都能正常的顯示其功能,效果如圖4-4所示:圖4-4游戲中圖標(biāo)效果圖游戲菜單功能實(shí)現(xiàn)
開始場景界面與功能實(shí)現(xiàn)玩家打開游戲首先見到的是開始游戲的場景,以及其界面菜單,這里包含游戲的名稱,選擇開始游戲以及退出游戲。首先新建一個(gè)場景,將地牢場景中的最后區(qū)域復(fù)制進(jìn)去,當(dāng)成開始場景的背景,接著將游戲主角也放進(jìn)場景中,讓其循環(huán)播放Idle動(dòng)畫,營造動(dòng)態(tài)效果。然后開始制作菜單界面,首先創(chuàng)建一個(gè)Canvas,在其下面創(chuàng)建一個(gè)空Prefab,命名為主菜單,再創(chuàng)建一個(gè)Text,兩個(gè)Button,分別是游戲名稱,一個(gè)開始按鈕,一個(gè)退出按鈕。分別將字體調(diào)至滿意的效果。將主菜單放置在場景的右邊,調(diào)整攝像頭的位置,使得場景呈現(xiàn)如圖4-5所示:圖4-5游戲開始場景預(yù)覽圖點(diǎn)擊開始游戲后到游戲場景的過程中,包含一個(gè)Loading的過程,要實(shí)現(xiàn)這個(gè)效果,首先需要一張Loading用的背景圖,然后創(chuàng)建一個(gè)Slider,對其進(jìn)行類似血條的處理,只不過要將其初始值設(shè)置為0,將其與圖片放在一起,并隱藏。接下來腳本在點(diǎn)擊開始游戲后啟用。接著創(chuàng)建一個(gè)用于按鈕點(diǎn)擊事件的菜單控制腳本,綁定在主菜單Prefab中,在腳本中寫下對應(yīng)不同點(diǎn)擊事件的方法,包括開始游戲,結(jié)束游戲,Loading進(jìn)入游戲以及游戲中會(huì)用到的重啟游戲,暫停游戲,繼續(xù)游戲。同時(shí),關(guān)鍵代碼如下:
public
GameObject
loading;
public
Slider
lo;
public
void
PlayGame(int
sceneIndex)
{
StartCoroutine(LoadAsynchronously(sceneIndex));
Time.timeScale
=
1;
}
public
void
Quit()
{
Application.Quit();
}
IEnumerator
LoadAsynchronously(int
sceneIndex)
{
AsyncOperation
operation
=
SceneManager.LoadSceneAsync(sceneIndex);
loading.SetActive(true);
while
(!operation.isDone)
{
float
progress
=
Mathf.Clamp01(gress
/
.9f);
lo.value
=
progress;
yield
return
null;
}
}
public
void
ReStar()
{
SceneManager.LoadScene(2);
Time.timeScale
=
1;
}
public
void
Stop()
{
Time.timeScale
=
0;
}
public
void
Conttinue()
{
Time.timeScale
=
1;
}
最后就是對按鈕的點(diǎn)擊事件進(jìn)行設(shè)置,以及將開始場景以及游戲場景放入BuildSetting中設(shè)置好順序,如圖4-6所示和圖4-7所示:圖4-6按鈕點(diǎn)擊事件設(shè)置示例圖圖4-7Scenes順序設(shè)置圖保存以后,打開開始場景,點(diǎn)擊開始按鈕,正常進(jìn)入Loading狀態(tài)后進(jìn)入游戲場景中,這一部分就完成了
游戲中界面與功能實(shí)現(xiàn)在游戲中除了戰(zhàn)斗功能部分,還需要實(shí)現(xiàn)菜單以及交互,在死亡或者游戲通過時(shí)彈出對應(yīng)的菜單以及選項(xiàng)。首先在Canvas下新建兩個(gè)Panel,分別命名為Win以及Lose,代表通關(guān)以及失敗彈出菜單。在兩個(gè)菜單下,分別創(chuàng)建一個(gè)Text提示以及兩個(gè)Button,分別代表重新開始游戲和返回開始菜單。Lose菜單下則調(diào)整其字體效果,以及運(yùn)用上一小節(jié)編寫的菜單腳本,給兩個(gè)按鈕添加點(diǎn)擊事件。需要注意的是,點(diǎn)擊返回開始菜單并執(zhí)行的過程中仍然需要一個(gè)載入的效果,這里直接把開始場景的載入Prefab復(fù)制過來并設(shè)計(jì)點(diǎn)擊事件就可以了。最后將兩個(gè)菜單隱藏,為了讓其能夠在游戲完成或者游戲失敗時(shí)準(zhǔn)確彈出,需要運(yùn)用動(dòng)畫的幀事件,分別在Boss死亡動(dòng)畫以及角色死亡動(dòng)畫添加動(dòng)畫的幀事件,然后編輯腳本,幀事件發(fā)生時(shí)分別調(diào)用不同菜單,并暫停時(shí)間,關(guān)鍵代碼分別如下:public
void
Win()
{
winMenu.SetActive(true);
Time.timeScale
=
0;
}
void
DeadMenu()
{
deadMenu.SetActive(true);
Time.timeScale
=
0;
}
完成后,勝利菜單以及失敗菜單如圖4-8和圖4-9所示:圖4-8游戲勝利菜單圖4-9游戲死亡菜單同時(shí),在游戲中,也可以通過菜單鍵暫停游戲,打開菜單,進(jìn)行返回開始菜單,重新開始游戲等操作。首先在Canvas下創(chuàng)建一個(gè)Button作為打開暫停菜單的接口,通過添加點(diǎn)擊事件彈出菜單。仿照通關(guān)菜單以及死亡菜單做一個(gè)暫停菜單,菜單里包含一個(gè)按鍵幫助的Tips。完成后如圖4-10所示:圖4-10游戲暫停菜單經(jīng)過測試所有菜單功能都能正常運(yùn)行,這一部分功能就完成了。游戲中的視覺效果為了讓游戲的整體視覺效果看起來更好,需要給游戲添加一些游戲特效以及后處理效果,比如抗鋸齒,環(huán)境光遮蔽,景深效果等。這里需要借助一個(gè)Unity3D的官方插件——PostProcessing。先去Unity3D的AssetStore下載并導(dǎo)入這個(gè)插件,然后給Camera加入一個(gè)PostProcessingBehavior的組件,且新建一個(gè)Behavior組件,并調(diào)整效果強(qiáng)度,如圖4-11所示,并拖入Camera的PostProcessingBehavior中,游戲的視覺效果便能獲得較大提升。圖4-11PostProcessingBehavior游戲特效設(shè)置圖然后需要給場景加上一些光源,新建一些點(diǎn)光源,將其放置在場景中的不同位置,設(shè)置強(qiáng)度,模擬場景中蠟燭的光影投射,這樣整個(gè)場景看起來就變得十分真實(shí),視覺效果這一部分設(shè)置完成。
游戲劇情制作在游戲中有劇情動(dòng)畫的存在,交代游戲的背景,玩家將在進(jìn)入游戲后看到劇情動(dòng)畫,在Unity中,動(dòng)畫的制作涉及的東西很多,在本游戲中,制作的劇情動(dòng)畫比較淺顯易懂,屬于長鏡頭動(dòng)畫。首先需要?jiǎng)?chuàng)建一個(gè)新的場景,選取游戲場景中的一部分區(qū)域,復(fù)制到劇情場景中,作為動(dòng)畫背景。接著將主角以及NPC的模型放入場景中,在動(dòng)畫中將交代主角接受一個(gè)委托,進(jìn)入地牢里面救人的劇情。劇情動(dòng)畫的制作需要用到Unity3D的TimeLine插件進(jìn)行,首先需要先設(shè)計(jì)一下大概的動(dòng)畫走向,并下載相關(guān)的動(dòng)作動(dòng)畫,然后打開Unity3D的TimeLine窗口,并在角色身上新建一個(gè)TimeLine文件。首先需要讓角色走到NPC的跟前,在TimeLine下添加一條AnimationTrack,并將角色拖進(jìn)去,然后將動(dòng)畫拖進(jìn)去,設(shè)置動(dòng)畫長度以及位移,如圖5-1所示:圖5-1角色AnimationTrack設(shè)置示例圖接下來將結(jié)合NPC的動(dòng)作以及劇情走向,將接下來所需的動(dòng)作都設(shè)置完成,拖動(dòng)TimeLine的進(jìn)度滑塊,能看到角色以及NPC的動(dòng)作符合劇情的走向。接著需要加上不同角度的攝像頭,且需要在劇情播放的時(shí)候能夠流暢地進(jìn)行切換,首先需要給TimeLine添加一條CinemachineTrack,將MainCamera拖進(jìn)去,接著創(chuàng)建5個(gè)不同的VirtualCamera用于劇情中不同視角的使用,設(shè)置好每個(gè)VirtualCamera的位置,并設(shè)置其對準(zhǔn)或者跟隨的目標(biāo),將其拖進(jìn)TimeLine中與劇情中相應(yīng)的時(shí)間節(jié)點(diǎn)對應(yīng),如圖5-2和圖5-3所示:圖5-2CinemachineTrack設(shè)置圖圖5-3VirtualCamera設(shè)置示例圖這里基本的動(dòng)畫劇情走向就完成了,接下來就需要給劇情動(dòng)畫加入對話字幕,由于劇情是安排好的,因此對話也只是在設(shè)計(jì)好的地方出現(xiàn),因此只要編寫一個(gè)腳本,利用碰撞檢測,判斷角色到達(dá)某個(gè)地點(diǎn)就使用那個(gè)對話,以及利用計(jì)時(shí)器控制多段對話就可以了,關(guān)鍵代碼示例如下:
public
GameObject[]
text;
int
textTime;
float
timer;
void
Update()
{
if
(textTime
==
1)
{
text[0].SetActive(true);
Destroy(text[0],
2);
}
Conversation();
}
void
Conversation()
{
if
(textTime==2)
{
timer
+=
UnityEngine.Time.deltaTime;
if
(timer
<
4)
{
text[1].SetActive(true);
Destroy(text[1],
4);
}
else
if
(timer>4
&&
timer<8)
{
text[2].SetActive(true);
Destroy(text[2],
4);
}
}
只需創(chuàng)建幾個(gè)碰撞體放在相應(yīng)的區(qū)域,然后創(chuàng)建幾個(gè)Text文件,寫入對話內(nèi)容,拖入角色就可以了,如圖5-4所示:圖5-4劇情文本設(shè)置圖最后就是將劇情場景加入游戲中,這里需要將場景拉入BuildSetting中,將其順序設(shè)置為2,更改一下前面的場景順序,從開始菜單點(diǎn)擊開始游戲后將會(huì)進(jìn)入到游戲的劇情中,播放劇情后將自動(dòng)進(jìn)入游戲,劇情示例如圖5-5所示:圖5-5劇情動(dòng)畫示例圖當(dāng)然這里為了方便玩家,也加入了一個(gè)按鈕可以選擇跳過,按鈕的點(diǎn)擊事件、背景音樂以及劇情進(jìn)入游戲的Loading界面都與前面的設(shè)置相同,這里不再進(jìn)行詳細(xì)描述,到這里,整個(gè)游戲的開發(fā)就完成了。
游戲測試以及打包游戲開發(fā)完成后需進(jìn)行多次測試,這里打開游戲開始場景,從開始測試,經(jīng)過測試,所有場景切換正常,且游戲中玩家控制,戰(zhàn)斗體驗(yàn),游戲功能都能正常運(yùn)行,游戲也能夠流暢運(yùn)行,基本符合一開始的設(shè)計(jì)預(yù)期,UI菜單等都能夠正常顯示,音頻,動(dòng)畫也能正常播放,因此通過多次測試之后,游戲可以開始打包。在工具欄選擇File->BuildSetting,在左下角的導(dǎo)出模式中可選擇導(dǎo)出平臺(tái),選擇好導(dǎo)出模式之后,點(diǎn)擊Build就可以實(shí)現(xiàn)打包發(fā)布了,此時(shí)會(huì)在選定文件夾中生成一個(gè)exe可執(zhí)行文件,一個(gè)Data數(shù)據(jù)文件夾。如圖6-1所示:圖6-1游戲打包示例圖圖6-2打包后文件圖
總結(jié)隨著這個(gè)游戲的制作完成,也意味著畢業(yè)設(shè)計(jì)進(jìn)入了尾聲,兩年的游戲設(shè)計(jì)的學(xué)習(xí)讓我收獲很多,通過這次的游戲制作也讓我對動(dòng)作冒險(xiǎn)類游戲的認(rèn)識(shí)更加的深刻。在這次畢業(yè)設(shè)計(jì)進(jìn)行的過程中,我同時(shí)在進(jìn)行著與游戲相關(guān)的實(shí)習(xí)工作,正巧,實(shí)習(xí)工作的內(nèi)容也與此次畢業(yè)設(shè)計(jì)的選題有著不少的關(guān)系,我從中分析了許多關(guān)鍵的要素,包括動(dòng)作冒險(xiǎn)游戲的重要組成,以及有關(guān)戰(zhàn)斗設(shè)計(jì)的關(guān)鍵,動(dòng)作冒險(xiǎn)游戲如何與劇情進(jìn)行結(jié)合等。設(shè)計(jì)之初也想過許多大膽的想法,但是因?yàn)闀r(shí)間以及成本的關(guān)系不能全部實(shí)現(xiàn)??傮w來說,這一次的游戲制作對于是十分具有實(shí)驗(yàn)性的,首先,傳統(tǒng)的動(dòng)作冒險(xiǎn)類游戲,其核心都偏向于追求爽快,難度一般不會(huì)太大,這次的畢業(yè)設(shè)計(jì)則是結(jié)合了現(xiàn)在市面上一些難度較大的游戲玩法,諸如《黑暗之魂》系列中更為緩慢的動(dòng)作以及閃避等要素,令人感到意外的是,這種結(jié)合反而令這類游戲有了新的體驗(yàn),這是具有突破性的。Unity3D作為一款游戲開發(fā)引擎,在制作游戲的過程中一次又一次的讓我感覺到他的便捷以及強(qiáng)大。其各種服務(wù)于現(xiàn)代游戲開發(fā)的工具以及插件可以讓開發(fā)者節(jié)省很多時(shí)間。Unity3D引擎的日漸成熟將能為游戲行業(yè)帶來更多更好的游戲,而我本人也將繼續(xù)深入學(xué)習(xí),以開發(fā)出更好的國產(chǎn)游戲作為目標(biāo),繼續(xù)前行。
參考文獻(xiàn)解構(gòu)Unity的腳本物件模型MiloYip2010-02-2600:11Unity.Unity3D參考手冊.Unity,2010:94-121郗銳-淺談電子游戲運(yùn)營模式與機(jī)制設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2017,(03)20-221何敏-從游戲之外到游戲之中[D].湖南師范大學(xué),2014.郭睿靜,張帥-基于Unity3D游戲動(dòng)作的控制和設(shè)計(jì)陳健松,徐從富,潘云鶴.基于地形的三維場景繪制方法[J].計(jì)算機(jī)工程與應(yīng)用,2006,(08):31-33劉方周-基于Unity3D的第三人稱游戲設(shè)計(jì)與實(shí)現(xiàn),2016李兵川-基于Unity3D引擎角色扮演類游戲設(shè)計(jì)及開發(fā)。2018丘熹-角色扮演類游戲中非玩家角色人工智能的實(shí)現(xiàn)方式CNKI:CDMD:2.1017.856686于瀟翔,彭月橙,黃心淵-基于Unity3D的道具系統(tǒng)研究與開發(fā)2014王樹斌-淺析Unity3D開發(fā)游戲流程及常用技術(shù)2012謝韜
-基于Unity3D粒子系統(tǒng)的游戲特效實(shí)現(xiàn)\o"《現(xiàn)代計(jì)算機(jī)》"《現(xiàn)代計(jì)算機(jī)》
,
2015
(16)
:30-32ChamberlainFong-AnalyticalMethodsforSquaringtheDiscSeoulICM2014Jackson,Simon-MasteringUnity2DgamedevelopmentbecomeanexpertinUnity3D'snew2Dsystem,andthenjoinintheadventuretobuildafullRPGgameframework2014
致謝隨著游戲的完成,畢業(yè)設(shè)計(jì)就告一段落了,這也意味著我的大學(xué)生涯就快要結(jié)束了,四年真的很快,在這里我很想感謝吳志達(dá)老師,在這兩年的游戲設(shè)計(jì)這門課上教會(huì)了我許多東西,同時(shí)作為指導(dǎo)老師,從論文開題之初到游戲制作完成的這段時(shí)間,為我提供了很多幫助,讓我的畢業(yè)設(shè)計(jì)能夠順利完成。同時(shí)感謝學(xué)校這四年來為我提供了良好的學(xué)習(xí)環(huán)境和多方向的課程學(xué)習(xí),讓我能夠選擇自己的方向,進(jìn)行深入的學(xué)習(xí)。還有在畢業(yè)設(shè)計(jì)期間那些所有幫助過我的老師以及同學(xué),沒有你們的幫助,我對游戲就不會(huì)完整,在此,我向你們誠摯的感謝
ExcelXP的八則快速輸入技巧如果我們在用ExcelXP處理龐大的數(shù)據(jù)信息時(shí),不注意講究技巧和方法的話,很可能會(huì)花費(fèi)很大的精力。因此如何巧用ExcelXP,來快速輸入信息就成為各個(gè)ExcelXP用戶非常關(guān)心的話題,筆者向大家介紹幾則這方面的小技巧。1、快速輸入大量含小數(shù)點(diǎn)的數(shù)字如果我們需要在ExcelXP工作表中輸入大量的帶有小數(shù)位的數(shù)字時(shí),按照普通的輸入方法,我們可能按照數(shù)字原樣大小直接輸入,例如現(xiàn)在要在單元格中輸入0.05這個(gè)數(shù)字時(shí),我們會(huì)把“0.05”原樣輸入到表格中。不過如果需要輸入若干個(gè)帶有小數(shù)點(diǎn)的數(shù)字時(shí),我們再按照上面的方法輸入的話,每次輸入數(shù)字時(shí)都需要重復(fù)輸入小數(shù)點(diǎn),這樣工作量會(huì)變大,輸入效率會(huì)降低。其實(shí),我們可以使用ExcelXP中的小數(shù)點(diǎn)自動(dòng)定位功能,讓所有數(shù)字的小數(shù)點(diǎn)自動(dòng)定位,從而快速提高輸入速度。在使用小數(shù)點(diǎn)自動(dòng)定位功能時(shí),我們可以先在ExcelXP的編輯界面中,用鼠標(biāo)依次單擊“工具”/“選項(xiàng)”/“編輯”標(biāo)簽,在彈出的對話框中選中“自動(dòng)設(shè)置小數(shù)點(diǎn)”復(fù)選框,然后在“位數(shù)”微調(diào)編輯框中鍵入需要顯示在小數(shù)點(diǎn)右面的位數(shù)就可以了。以后我們再輸入帶有小數(shù)點(diǎn)的數(shù)字時(shí),直接輸入數(shù)字,而小數(shù)點(diǎn)將在回車鍵后自動(dòng)進(jìn)行定位。例如,我們要在某單元格中鍵入0.06的話,可以在上面的設(shè)置中,讓“位數(shù)”選項(xiàng)為2,然后直接在指定單元格中輸入6,回車以后,該單元格的數(shù)字自動(dòng)變?yōu)椤?.06”,怎么樣簡單吧?2、快速錄入文本文件中的內(nèi)容現(xiàn)在您手邊假如有一些以純文本格式儲(chǔ)存的文件,如果此時(shí)您需要將這些數(shù)據(jù)制作成ExcelXP的工作表,那該怎么辦呢?重新輸入一遍,大概只有頭腦有毛病的人才會(huì)這樣做;將菜單上的數(shù)據(jù)一個(gè)個(gè)復(fù)制/粘貼到工作表中,也需花很多時(shí)間。沒關(guān)系!您只要在ExcelXP中巧妙使用其中的文本文件導(dǎo)入功能,就可以大大減輕需要重新輸入或者需要不斷復(fù)制、粘貼的巨大工作量了。使用該功能時(shí),您只要在ExcelXP編輯區(qū)中,依次用鼠標(biāo)單擊菜單欄中的“數(shù)據(jù)/獲取外部數(shù)據(jù)/導(dǎo)入文本文件”命令,然后在導(dǎo)入文本會(huì)話窗口選擇要導(dǎo)入的文本文件,再按下“導(dǎo)入”鈕以后,程序會(huì)彈出一個(gè)文本導(dǎo)入向?qū)υ捒?,您只要按照向?qū)У奶崾具M(jìn)行操作,就可以把以文本格式的數(shù)據(jù)轉(zhuǎn)換成工作表的格式了。3、快速輸入大量相同數(shù)據(jù)如果你希望在不同的單元格中輸入大量相同的數(shù)據(jù)信息,那么你不必逐個(gè)單元格一個(gè)一個(gè)地輸入,那樣需要花費(fèi)好長時(shí)間,而且還比較容易出錯(cuò)。你可以通過下面的操作方法在多個(gè)相鄰或不相鄰的單元格中快速填充同一個(gè)數(shù)據(jù),具體方法為:首先同時(shí)選中需要填充數(shù)據(jù)的單元格。若某些單元格不相鄰,可在按住Ctrl鍵的同時(shí),點(diǎn)擊鼠標(biāo)左鍵,逐個(gè)選中;其次輸入要填充的某個(gè)數(shù)據(jù)。按住Ctrl鍵的同時(shí),按回車鍵,則剛才選中的所有單元格同時(shí)填入該數(shù)據(jù)。4、快速進(jìn)行中英文輸入法切換一張工作表常常會(huì)既包含有數(shù)字信息,又包含有文字信息,要錄入這樣一種工作表就需要我們不斷地在中英文之間反復(fù)切換輸入法,非常麻煩,為了方便操作,我們可以用以下方法實(shí)現(xiàn)自動(dòng)切換:首先用鼠標(biāo)選中需要輸入中文的單元格區(qū)域,然后在輸入法菜單中選擇一個(gè)合適的中文輸入法;接著打開“有效數(shù)據(jù)”對話框,選中“IME模式”標(biāo)簽,在“模式”框中選擇打開,單擊“確定”按鈕;然后再選中輸入數(shù)字的單元格區(qū)域,在“有效數(shù)據(jù)”對話框中,單擊“IME模式”選項(xiàng)卡,在“模式”框中選擇關(guān)閉(英文模式);最后單擊“確定”按鈕,這樣用鼠標(biāo)分別在剛才設(shè)定的兩列中選中單元格,五筆和英文輸入方式就可以相互切換了。5、快速刪除工作表中空行刪除ExcelXP工作表中的空行,一般的方法是需要將空行都找出來,然后逐行刪除,但這樣做操作量非常大,很不方便。那么如何才能減輕刪除工作表中空行的工作量呢?您可以使用下面的操作方法來進(jìn)行刪除:首先打開要?jiǎng)h除空行的工作表,在打開的工作表中用鼠標(biāo)單擊菜單欄中的“插入”菜單項(xiàng),并從下拉菜單中選擇“列”,從而插入一新的列X,在X列中順序填入整數(shù);然后根據(jù)其他任何一列將表中的行排序,使所有空行都集中到表的底部。刪去所有空行中X列的數(shù)據(jù),以X列重新排序,然后刪去X列。按照這樣的刪除方法,無論工作表中包含多少空行,您就可以很快地刪除了。6、快速對不同單元格中字號進(jìn)行調(diào)整在使用ExcelXP編輯文件時(shí),常常需要將某一列的寬度固定,但由于該列各單元格中的字符數(shù)目不等,致使有的單元格中的內(nèi)容不能完全顯示在屏幕上,為了讓這些單元格中的數(shù)據(jù)都顯示在屏幕上,就不得不對這些單元格重新定義較小的字號。如果依次對這些單元格中的字號調(diào)整的話,工作量將會(huì)變得很大。其實(shí),您可以采用下面的方法來減輕字號調(diào)整的工作量:首先新建或打開一個(gè)工作簿,并選中需要ExcelXP根據(jù)單元格的寬度調(diào)整字號的單元格區(qū)域;其次單擊用鼠標(biāo)依次單擊菜單欄中的“格式”/“單元格”/“對齊”標(biāo)簽,在“文本控制”下選中“縮小字體填充”復(fù)選框,并單擊“確定”按鈕;此后,當(dāng)你在這些單元格中輸入數(shù)據(jù)時(shí),如果輸入的數(shù)據(jù)長度超過了單元格的寬度,ExcelXP能夠自動(dòng)縮小字符的大小把數(shù)據(jù)調(diào)整到與列寬一致,以使數(shù)據(jù)全部顯示在單元格中。如果你對這些單元格的列寬進(jìn)行了更改,則字符可自動(dòng)增大或縮小字號,以適應(yīng)新的單元格列寬,但是對這些單元格原設(shè)置的字體字號大小則保持不變。7、快速輸入多個(gè)重復(fù)數(shù)據(jù)在使用ExcelXP工作表的過程中,我們經(jīng)常要輸入大量重復(fù)的數(shù)據(jù),如果依次輸入,無疑工作量是巨大的?,F(xiàn)在我們可以借助ExcelXP的“宏”功能,來記錄首次輸入需要重復(fù)輸入的數(shù)據(jù)的命令和過程,然后將這些命令和過程賦值到一個(gè)組合鍵或工具欄的按鈕上,當(dāng)按下組合鍵時(shí),計(jì)算機(jī)就會(huì)重復(fù)所記錄的操作。使用宏功能時(shí),我們可以按照以下步驟進(jìn)行操作:首先打開工作表,在工作表中選中要進(jìn)行操作的單元格;接著再用鼠標(biāo)單擊菜單欄中的“工具”菜單項(xiàng),并從彈出的下拉菜單中選擇“宏”子菜單項(xiàng),并從隨后彈出的下級菜單中選擇“錄制新宏”命令;設(shè)定好宏后,我們就可以對指定的單元格,進(jìn)行各種操作,程序?qū)⒆詣?dòng)對所進(jìn)行的各方面操作記錄復(fù)制。8、快速處理多個(gè)工作表有時(shí)我們需要在ExcelXP中打開多個(gè)工作表來進(jìn)行編輯,但無論打開多少工作表,在某一時(shí)刻我們只能對一個(gè)工作表進(jìn)行編輯,編輯好了以后再依次編輯下一個(gè)工作表,如果真是這樣操作的話,我們倒沒有這個(gè)必要同時(shí)打開多個(gè)工作表了,因?yàn)槲覀兺瑫r(shí)打開多個(gè)工作表的目的就是要減輕處理多個(gè)工作表的工作量的,那么我們該如何實(shí)現(xiàn)這樣的操作呢?您可采用以下方法:首先按住“Shift"鍵或“Ctrl"鍵并配以鼠標(biāo)操作,在工作簿底部選擇多個(gè)彼此相鄰或不相鄰的工作表標(biāo)簽,然后就可以對其實(shí)行多方面的批量處理;接著在選中的工作表標(biāo)簽上按右鍵彈出快捷菜單,進(jìn)行插入和刪除多個(gè)工作表的操作;然后在“文件”菜單中選擇“頁面設(shè)置……”,將選中的多個(gè)工作表設(shè)成相同的頁面模式;再通過“編輯”菜單中的有關(guān)選項(xiàng),在多個(gè)工作表范圍內(nèi)進(jìn)行查找、替換、定位操作;通過“格式”菜單中的有關(guān)選項(xiàng),將選中的多個(gè)工作表的行、列、單元格設(shè)成相同的樣式以及進(jìn)行一次性全部隱藏操作;接著在“工具”菜單中選擇“選項(xiàng)……”,在彈出的菜單中選擇“視窗”和“編輯”按鈕,將選中的工作表設(shè)成相同的視窗樣式和單元格編輯屬性;最后選中上述工作表集合中任何一個(gè)工作表,并在其上完成我們所需要的表格,則其它工作表在相同的位置也同時(shí)生成了格式完全相同的表格。高效辦公Excel排序方法"集中營"排序是數(shù)據(jù)處理中的經(jīng)常性工作,Excel排序有序數(shù)計(jì)算(類似成績統(tǒng)計(jì)中的名次)和數(shù)據(jù)重排兩類。本文以幾個(gè)車間的產(chǎn)值和名稱為例,介紹Excel2000/XP的數(shù)據(jù)排序方法。一、數(shù)值排序1.RANK函數(shù)RANK函數(shù)是Excel計(jì)算序數(shù)的主要工具,它的語法為:RANK(number,ref,order),其中number為參與計(jì)算的數(shù)字或含有數(shù)字的單元格,ref是對參與計(jì)算的數(shù)字單元格區(qū)域的絕對引用,order是用來說明排序方式的數(shù)字(如果order為零或省略,則以降序方式給出結(jié)果,反之按升序方式)。例如圖1中E2、E3、E4單元格存放一季度的總產(chǎn)值,計(jì)算各車間產(chǎn)值排名的方法是:在F2單元格內(nèi)輸入公式“=RANK(E2,$E$2:$E$4)”,敲回車即可計(jì)算出鑄造車間的產(chǎn)值排名是2。再將F2中的公式復(fù)制到剪貼板,選中F3、F4單元格按Ctrl+V,就能計(jì)算出其余兩個(gè)車間的產(chǎn)值排名為3和1。如果B1單元格中輸入的公式為“=RANK(E2,$E$2:$E$4,1)”,則計(jì)算出的序數(shù)按升序方式排列,即2、1和3。需要注意的是:相同數(shù)值用RANK函數(shù)計(jì)算得到的序數(shù)(名次)相同,但會(huì)導(dǎo)致后續(xù)數(shù)字的序數(shù)空缺。假如上例中F2單元格存放的數(shù)值與F3相同,則按本法計(jì)算出的排名分別是3、3和1(降序時(shí))。2.COUNTIF函數(shù)COUNTIF函數(shù)可以統(tǒng)計(jì)某一區(qū)域中符合條件的單元格數(shù)目,它的語法為COUNTIF(range,criteria)。其中range為參與統(tǒng)計(jì)的單元格區(qū)域,criteria是以數(shù)字、表達(dá)式或文本形式定義的條件。其中數(shù)字可以直接寫入,表達(dá)式和文本必須加引號。仍以圖1為例,F(xiàn)2單元格內(nèi)輸入的公式為“=COUNTIF($E$2:$E$4,">"&E2)+1”。計(jì)算各車間產(chǎn)值排名的方法同上,結(jié)果也完全相同,2、1和3。此公式的計(jì)算過程是這樣的:首先根據(jù)E2單元格內(nèi)的數(shù)值,在連接符&的作用下產(chǎn)生一個(gè)邏輯表達(dá)式,即“>176.7”、“>167.3”等。COUNTIF函數(shù)計(jì)算出引用區(qū)域內(nèi)符合條件的單元格數(shù)量,該結(jié)果加一即可得到該數(shù)值的名次。很顯然,利用上述方法得到的是降序排列的名次,對重復(fù)數(shù)據(jù)計(jì)算得到的結(jié)果與RANK3.IF函數(shù)Excel自身帶有排序功能,可使數(shù)據(jù)以降序或升序方式重新排列。如果將它與IF函數(shù)結(jié)合,可以計(jì)算出沒有空缺的排名。以圖1中E2、E3、E4單元格的產(chǎn)值排序?yàn)槔?,具體做法是:選中E2單元格,根據(jù)排序需要,單擊Excel工具欄中的“降序排序”或“升序排序”按鈕,即可使工作表中的所有數(shù)據(jù)按要求重新排列。假如數(shù)據(jù)是按產(chǎn)值由大到?。ń敌颍┡帕械?,而您又想賦予每個(gè)車間從1到n(n為自然數(shù))的排名。可以在G2單元格中輸入1,然后在G3單元格中輸入公式“=IF(E3=E2,G3,G3+1)”,只要將公式復(fù)制到G4等單元格,就可以計(jì)算出其他車間的產(chǎn)值排名。二、文本排序選舉等場合需要按姓氏筆劃為文本排序,Excel提供了比較好的解決辦法。如果您要將圖1數(shù)據(jù)表按車間名稱的筆劃排序,可以使用以下方法:選中排序關(guān)鍵字所在列(或行)的首個(gè)單元格(如圖1中的A1),單擊Excel“數(shù)據(jù)”菜單下的“排序”命令,再單擊其中的“選項(xiàng)”按鈕。選中“排序選項(xiàng)”對話框“方法”下的“筆畫排序”,再根據(jù)數(shù)據(jù)排列方向選擇“按行排序”或“按列排序”,“確定”后回到“排序”對話框(圖2)。如果您的數(shù)據(jù)帶有標(biāo)題行(如圖1中的“單位”之類),則應(yīng)選中“有標(biāo)題行”(反之不選),然后打開“主要關(guān)鍵字”下拉列表,選擇其中的“單位”,選中排序方式(“升序”或“降序”)后“確定”,表中的所有數(shù)據(jù)就會(huì)據(jù)此重新排列。此法稍加變通即可用于“第一名”、“第二名”等文本排序,請讀者自行摸索。三、自定義排序如果您要求Excel按照“金工車間”、“鑄造車間”和“維修車間”的特定順序重排工作表數(shù)據(jù),前面介紹的幾種方法就無能為力了。這類問題可以用定義排序規(guī)則的方法解決:首先單擊Excel“工具”菜單下的“選項(xiàng)”命令,打開“選項(xiàng)”對話框中的“自定義序列”選項(xiàng)卡(圖3)。選中左邊“自定義序列”下的“新序列”,光標(biāo)就會(huì)在右邊的“輸入序列”框內(nèi)閃動(dòng),您就可以輸入“金工車間”、“鑄造車間”等自定義序列了,輸入的每個(gè)序列之間要用英文逗號分隔,或者每輸入一個(gè)序列就敲回車。如果序列已經(jīng)存在于工作表中,可以選中序列所在的單元格區(qū)域單擊“導(dǎo)入”,這些序列就會(huì)被自動(dòng)加入“輸入序列”框。無論采用以上哪種方法,單擊“添加”按鈕即可將序列放入“自定義序列”中備用(圖3)。使用排序規(guī)則排序的具體方法與筆劃排序很相似,只是您要打開“排序選項(xiàng)”對話框中的“自定義排序次序”下拉列表,選中前面定義的排序規(guī)則,其他選項(xiàng)保持不動(dòng)。回到“排序”對話框后根據(jù)需要選擇“升序”或“降序”,“確定”后即可完成數(shù)據(jù)的自定義排序。需要說明的是:顯示在“自定義序列”選項(xiàng)卡中的序列(如一、二、三等),均可按以上方法參與排序,請讀者注意Excel提供的自定義序列類型。談?wù)凟xcel輸入的技巧在Excel工作表的單元格中,可以使用兩種最基本的數(shù)據(jù)格式:常數(shù)和公式。常數(shù)是指文字、數(shù)字、日期和時(shí)間等數(shù)據(jù),還可以包括邏輯值和錯(cuò)誤值,每種數(shù)據(jù)都有它特定的格式和輸入方法,為了使用戶對輸入數(shù)據(jù)有一個(gè)明確的認(rèn)識(shí),有必要來介紹一下在Excel中輸入各種類型數(shù)據(jù)的方法和技巧。一、輸入文本Excel單元格中的文本包括任何中西文文字或字母以及數(shù)字、空格和非數(shù)字字符的組合,每個(gè)單元格中最多可容納32000個(gè)字符數(shù)。雖然在Excel中輸入文本和在其它應(yīng)用程序中沒有什么本質(zhì)區(qū)別,但是還是有一些差異,比如我們在Word、PowerPoint的表格中,當(dāng)在單元格中輸入文本后,按回車鍵表示一個(gè)段落的結(jié)束,光標(biāo)會(huì)自動(dòng)移到本單元格中下一段落的開頭,在Excel的單元格中輸入文本時(shí),按一下回車鍵卻表示結(jié)束當(dāng)前單元格的輸入,光標(biāo)會(huì)自動(dòng)移到當(dāng)前單元格的下一個(gè)單元格,出現(xiàn)這種情況時(shí),如果你是想在單元格中分行,則必須在單元格中輸入硬回車,即按住Alt鍵的同時(shí)按回車鍵。二、輸入分?jǐn)?shù)幾乎在所有的文檔中,分?jǐn)?shù)格式通常用一道斜杠來分界分子與分母,其格式為“分子/分母”,在Excel中日期的輸入方法也是用斜杠來區(qū)分年月日的,比如在單元格中輸入“1/2”,按回車鍵則顯示“1月2日”,為了避免將輸入的分?jǐn)?shù)與日期混淆,我們在單元格中輸入分?jǐn)?shù)時(shí),要在分?jǐn)?shù)前輸入“0”(零)以示區(qū)別,并且在“0”和分子之間要有一個(gè)空格隔開,比如我們在輸入1/2時(shí),則應(yīng)該輸入“01/2”。如果在單元格中輸入“81/2”,則在單元格中顯示“81/2”,而在編輯欄中顯示“三、輸入負(fù)數(shù)在單元格中輸入負(fù)數(shù)時(shí),可在負(fù)數(shù)前輸入“-”作標(biāo)識(shí),也可將數(shù)字置在()括號內(nèi)來標(biāo)識(shí),比如在單元格中輸入“(88)”,按一下回車鍵,則會(huì)自動(dòng)顯示為“-88”。四、輸入小數(shù)在輸入小數(shù)時(shí),用戶可以向平常一樣使用小數(shù)點(diǎn),還可以利用逗號分隔千位、百萬位等,當(dāng)輸入帶有逗號的數(shù)字時(shí),在編輯欄并不顯示出來,而只在單元格中顯示。當(dāng)你需要輸入大量帶有固定小數(shù)位的數(shù)字或帶有固定位數(shù)的以“0”字符串結(jié)尾的數(shù)字時(shí),可以采用下面的方法:選擇“工具”、“選項(xiàng)”命令,打開“選項(xiàng)”對話框,單擊“編輯”標(biāo)簽,選中“自動(dòng)設(shè)置小數(shù)點(diǎn)”復(fù)選框,并在“位數(shù)”微調(diào)框中輸入或選擇要顯示在小數(shù)點(diǎn)右面的位數(shù),如果要在輸入比較大的數(shù)字后自動(dòng)添零,可指定一個(gè)負(fù)數(shù)值作為要添加的零的個(gè)數(shù),比如要在單元格中輸入“88”后自動(dòng)添加3個(gè)零,變成“88000”,就在“位數(shù)”微調(diào)框中輸入“-3”,相反,如果要在輸入“88”后自動(dòng)添加3位小數(shù),變成“0.088”,則要在“位數(shù)”微調(diào)框中輸入“3”。另外,在完成輸入帶有小數(shù)位或結(jié)尾零字符串的數(shù)字后,應(yīng)清除對“自動(dòng)設(shè)置小數(shù)點(diǎn)”符選框的選定,以免影響后邊的輸入;如果只是要暫時(shí)取消在“自動(dòng)設(shè)置小數(shù)點(diǎn)”中設(shè)置的選項(xiàng),可以在輸入數(shù)據(jù)時(shí)自帶小數(shù)點(diǎn)。五、輸入貨幣值Excel幾乎支持所有的貨幣值,如人民幣(¥)、英鎊(£)等。歐元出臺(tái)以后,Excel2000完全支持顯示、輸入和打印歐元貨幣符號。用戶可以很方便地在單元格中輸入各種貨幣值,Excel會(huì)自動(dòng)套用貨幣格式,在單元格中顯示出來,如果用要輸入人民幣符號,可以按住Alt鍵,然后再數(shù)字小鍵盤上按“0165”即可。六、輸入日期Excel是將日期和時(shí)間視為數(shù)字處理的,它能夠識(shí)別出大部分用普通表示方法輸入的日期和時(shí)間格式。用戶可以用多種格式來輸入一個(gè)日期,可以用斜杠“/”或者“-”來分隔日期中的年、月、日部分。比如要輸入“2001年12月1日”,可以在單元各種輸入“2001/12/1”或者“2001-12-1七、輸入時(shí)間在Excel中輸入時(shí)間時(shí),用戶可以按24小時(shí)制輸入,也可以按12小時(shí)制輸入,這兩種輸入的表示方法是不同的,比如要輸入下午2時(shí)30分38秒,用24小時(shí)制輸入格式為:2:30:38,而用12小時(shí)制輸入時(shí)間格式為:2:30:38p,注意字母“p”和時(shí)間之間有一個(gè)空格。如果要在單元格中插入當(dāng)前時(shí)間,則按Ctrl+Shift+;鍵。了解Excel公式的錯(cuò)誤值經(jīng)常用Excel的朋友可能都會(huì)遇到一些莫名奇妙的錯(cuò)誤值信息:#N/A!、#VALUE!、#DIV/O!等等,出現(xiàn)這些錯(cuò)誤的原因有很多種,如果公式不能計(jì)算正確結(jié)果,Excel將顯示一個(gè)錯(cuò)誤值,例如,在需要數(shù)字的公式中使用文本、刪除了被公式引用的單元格,或者使用了寬度不足以顯示結(jié)果的單元格。以下是幾種常見的錯(cuò)誤及其解決方法。1.#####!原因:如果單元格所含的數(shù)字、日期或時(shí)間比單元格寬,或者單元格的日期時(shí)間公式產(chǎn)生了一個(gè)負(fù)值,就會(huì)產(chǎn)生#####!錯(cuò)誤。解決方法:如果單元格所含的數(shù)字、日期或時(shí)間比單元格寬,可以通過拖動(dòng)列表之間的寬度來修改列寬。如果使用的是1900年的日期系統(tǒng),那么Excel中的日期和時(shí)間必須為正值,用較早的日期或者時(shí)間值減去較晚的日期或者時(shí)間值就會(huì)導(dǎo)致#####!錯(cuò)誤。如果公式正確,也可以將單元格的格式改為非日期和時(shí)間型來顯示該值。2.#VALUE!當(dāng)使用錯(cuò)誤的參數(shù)或運(yùn)算對象類型時(shí),或者當(dāng)公式自動(dòng)更正功能不能更正公式時(shí),將產(chǎn)生錯(cuò)誤值#VALUE!。原因一:在需要數(shù)字或邏輯值時(shí)輸入了文本,Excel不能將文本轉(zhuǎn)換為正確的數(shù)據(jù)類型。解決方法:確認(rèn)公式或函數(shù)所需的運(yùn)算符或參數(shù)正確,并且公式引用的單元格中包含有效的數(shù)值。例如:如果單元格A1包含一個(gè)數(shù)字,單元格A2包含文本"學(xué)籍",則公式"=A1+A2"將返回錯(cuò)誤值#VALUE!??梢杂肧UM工作表函數(shù)將這兩個(gè)值相加(SUM函數(shù)忽略文本):=SUM(A1:A2)。原因二:將單元格引用、公式或函數(shù)作為數(shù)組常量輸入。解決方法:確認(rèn)數(shù)組常量不是單元格引用、公式或函數(shù)。原因三:賦予需要單一數(shù)值的運(yùn)算符或函數(shù)一個(gè)數(shù)值區(qū)域。解決方法:將數(shù)值區(qū)域改為單一數(shù)值。修改數(shù)值區(qū)域,使其包含公式所在的數(shù)據(jù)行或列。3.#DIV/O!當(dāng)公式被零除時(shí),將會(huì)產(chǎn)生錯(cuò)誤值#DIV/O!。原因一:在公式中,除數(shù)使用了指向空單元格或包含零值單元格的單元格引用(在Excel中如果運(yùn)算對象是空白單元格,Excel將此空值當(dāng)作零值)。解決方法:修改單元格引用,或者在用作除數(shù)的單元格中輸入不為零的值。原因二:輸入的公式中包含明顯的除數(shù)零,例如:=5/0。解決方法:將零改為非零值。4.#NAME?在公式中使用了Excel不能識(shí)別的文本時(shí)將產(chǎn)生錯(cuò)誤值#NAME?。原因一:刪除了公式中使用的名稱,或者使用了不存在的名稱。解決方法:確認(rèn)使用的名稱確實(shí)存在。選擇菜單"插入"|"名稱"|"定義"命令,如果所需名稱沒有被列出,請使用"定義"命令添加相應(yīng)的名稱。原因二:名稱的拼寫錯(cuò)誤。解決方法:修改拼寫錯(cuò)誤的名稱。原因三:在公式中使用標(biāo)志。解決方法:選擇菜單中"工具"|"選項(xiàng)"命令,打開"選項(xiàng)"對話框,然后單擊"重新計(jì)算"標(biāo)簽,在"工作薄選項(xiàng)"下,選中"接受公式標(biāo)志"復(fù)選框。原因四:在公式中輸入文本時(shí)沒有使用雙引號。解決方法:Excel將其解釋為名稱,而不理會(huì)用戶準(zhǔn)備將其用作文本的想法,將公式中的文本括在雙引號中。例如:下面的公式將一段文本"總計(jì):"和單元格B50中的數(shù)值合并在一起:="總計(jì):"&B50原因五:在區(qū)域的引用中缺少冒號。解決方法:確認(rèn)公式中,使用的所有區(qū)域引用都使用冒號。例如:SUM(A2:B34)。5.#N/A原因:當(dāng)在函數(shù)或公式中沒有可用數(shù)值時(shí),將產(chǎn)生錯(cuò)誤值#N/A。解決方法:如果工作表中某些單元格暫時(shí)沒有數(shù)值,請?jiān)谶@些單元格中輸入"#N/A",公式在引用這些單元格時(shí),將不進(jìn)行數(shù)值計(jì)算,而是返回#N/A。6.#REF!當(dāng)單元格引用無效時(shí)將產(chǎn)生錯(cuò)誤值#REF!。原因:刪除了由其他公式引用的單元格,或?qū)⒁苿?dòng)單元格粘貼到由其他公式引用的單元格中。解決方法:更改公式或者在刪除或粘貼單元格之后,立即單擊"撤消"按鈕,以恢復(fù)工作表中的單元格。7.#NUM!當(dāng)公式或函數(shù)中某個(gè)數(shù)字有問題時(shí)將產(chǎn)生錯(cuò)誤值#NUM!。原因一:在需要數(shù)字參數(shù)的函數(shù)中使用了不能接受的參數(shù)。解決方法:確認(rèn)函數(shù)中使用的參數(shù)類型正確無誤。原因二:使用了迭代計(jì)算的工作表函數(shù),例如:IRR或RATE,并且函數(shù)不能產(chǎn)生有效的結(jié)果。解決方法:為工作表函數(shù)使用不同的初始值。原因三:由公式產(chǎn)生的數(shù)字太大或太小,Excel不能表示。解決方法:修改公式,使其結(jié)果在有效數(shù)字范圍之間。8.#NULL!當(dāng)試圖為兩個(gè)并不相交的區(qū)域指定交叉點(diǎn)時(shí)將產(chǎn)生錯(cuò)誤值#NULL!。原因:使用了不正確的區(qū)域運(yùn)算符或不正確的單元格引用。解決方法:如果要引用兩個(gè)不相交的區(qū)域,請使用聯(lián)合運(yùn)算符逗號(,)。公式要對兩個(gè)區(qū)域求和,請確認(rèn)在引用這兩個(gè)區(qū)域時(shí),使用逗號。如:SUM(A1:A13,D12:D23)。如果沒有使用逗號,Excel將試圖對同時(shí)屬于兩個(gè)區(qū)域的單元格求和,但是由于A1:A13和D12:D23并不相交,所以他們沒有共同的單元格。在Excel中快速查看所有工作表公式只需一次簡單的鍵盤點(diǎn)擊,即可可以顯示出工作表中的所有公式,包括Excel用來存放日期的序列值。要想在顯示單元格值或單元格公式之間來回切換,只需按下CTRL+`(位于TAB鍵上方)。EXCEL2000使用技巧十招1、Excel文件的加密與隱藏如果你不愿意自己的Excel文件被別人查看,那么你可以給它設(shè)置密碼保護(hù),采用在保存文件時(shí)用加密的方法就可以實(shí)現(xiàn)保護(hù)目的,在這里要特別注意的是,自己設(shè)定的密碼一定要記住,否則自己也將被視為非法入侵者而遭拒絕進(jìn)入。給文件加密的具體方法為:A、單擊“文件”菜單欄中的“保存或者(另存為)”命令后,在彈出的“保存或者(另存為)”的對話框中輸入文件名;B、再單擊這個(gè)對話框中“工具”欄下的“常規(guī)選項(xiàng)”按鈕,在彈出的“保存選項(xiàng)”的對話框中輸入自己的密碼;這里要注意,它提供了兩層保護(hù),如果你也設(shè)置了修改權(quán)限密碼的話,那么即使文件被打開也還需要輸入修改權(quán)限的密碼才能修改。C、單擊“確定”按鈕,在彈出的密碼確認(rèn)窗口中重新輸入一遍密碼,再點(diǎn)擊“確認(rèn)”,最后點(diǎn)“保存”完成文件的加密工作。當(dāng)重新打開文件時(shí)就要求輸入密碼,如果密碼不正確,文件將不能打開。2、對單元格進(jìn)行讀寫保護(hù)單元格是Excel執(zhí)行其強(qiáng)大的計(jì)算功能最基本的元素,對單元格的讀寫保護(hù)是Excel對數(shù)據(jù)進(jìn)行安全管理的基礎(chǔ)。對單元格的保護(hù)分為寫保護(hù)和讀保護(hù)兩類,所謂寫保護(hù)就是對單元格中輸入信息加以限制,讀保護(hù)是對單元格中已經(jīng)存有信息的瀏覽和查看加以限制。對單元格的寫保護(hù)有兩種方法:A、對單元格的輸入信息進(jìn)行有效性檢測。首先選定要進(jìn)行有效性檢測的單元格或單元格集合,然后從數(shù)據(jù)菜單中選擇“有效數(shù)據(jù)”選項(xiàng),通過設(shè)定有效條件、顯示信息和錯(cuò)誤警告,控制輸入單元格的信息要符合給定的條件。B、設(shè)定單元格的鎖定屬性,以保護(hù)存入單元格的內(nèi)容不能被改寫。可分為以下步驟:(1)選定需要鎖定的單元格或單元格集合;(2)從格式菜單中選擇“單元格”選項(xiàng);(3)在設(shè)置單元格格式的彈出菜單中選擇“保護(hù)”標(biāo)簽,在彈出的窗口中,選中“鎖定”;(4)從工具菜單中選擇“保護(hù)”選項(xiàng),設(shè)置保護(hù)密碼,即完成了對單元格的鎖定設(shè)置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專屬2024法務(wù)服務(wù)協(xié)議模板版B版
- 2025年度健康養(yǎng)老產(chǎn)業(yè)地產(chǎn)合作投資協(xié)議書模板4篇
- 科技賦能社團(tuán)管理
- 專業(yè)能源管理服務(wù)協(xié)議標(biāo)準(zhǔn)格式書版
- 業(yè)務(wù)員與公司的合作協(xié)議書
- 專業(yè)美甲教學(xué)合作協(xié)議書(2024年版)
- 專業(yè)油漆施工協(xié)議2024年版詳則版B版
- 2025年度茶葉行業(yè)培訓(xùn)與職業(yè)資格認(rèn)證合同4篇
- 2024知識(shí)產(chǎn)權(quán)保護(hù)及保密協(xié)議范本下載
- 海南省安全員C證理論考試試題
- GB/T 33629-2024風(fēng)能發(fā)電系統(tǒng)雷電防護(hù)
- 國際森林日森林防火教育宣傳主題班會(huì)PPT模板
- 藥廠質(zhì)量管理部QA人員崗位設(shè)置表
- 劍橋國際少兒英語“第三級”單詞默寫表
- (精心整理)高中生物必修二非選擇題專題訓(xùn)練
- 小學(xué)二年級100以內(nèi)進(jìn)退位加減法混合運(yùn)算
- 福建省流動(dòng)人口信息登記表
- 市委組織部副部長任職表態(tài)發(fā)言
- HXD1D客運(yùn)電力機(jī)車轉(zhuǎn)向架培訓(xùn)教材
- 超星爾雅學(xué)習(xí)通【西方文論原典導(dǎo)讀(吉林大學(xué))】章節(jié)測試附答案
- 【培訓(xùn)教材】外貿(mào)會(huì)計(jì)PPT
評論
0/150
提交評論