點擊菜單中的windows->assert store,打開商店窗口,搜素想要的資源,下載添加到倉庫。
然後回到unity,點擊windows ->package manager,就能找到自己的資源,全部import
這裡是獲取場景後的結果:
簡單總結遊戲對象的使用遊戲對象的屬性從目前來看,我們最常使用的屬性是位置,尺寸等,可以通過:
Object.transform.position=new Vector(x,y,z);對象可能不止包含基本信息,還可以包含許多component(組件),可以通過按鈕來為對象添加組件,組件有自己的屬性,功能等。對於複雜的特殊組件,一般通過按鈕添加,如果想添加自定義的代碼,就是用:
object.AddComponent(typeof(class_name))其結果相當於把class打包進入一個cs文件,並添加到對象裡,這個類必須繼承MonoBehaviour
要獲取組件:
object.GetComponent<component_type>()返回值是組件,可以在獲取組件後通過組件內的函數,改變組件的一些值。
對象的加載簡單加載最簡單的加載方式,就是直接用滑鼠把對象拖到左上角的窗口中,然後手動設置屬性。
但是這樣會耗費大量的時間去加載。(如果有許多個對象是相同的,系統會重複加載,耗時)
而且有許多對象是在遊戲中途才生成的。為了遊戲流暢性,在開始就要加載,但是不顯示,這種簡單加載做不到。
用代碼加載首先對象必須放在Assert/Resources文件夾中,這個Resources文件夾是特殊的,如果沒有請自己建立,把需要用到的資源加載進去
source=Resources.Load<type>(location)返回一個對象(只加載,不顯示),這裡的location是一個地址,一個以Resources文件夾為根的相對地址。
但後把資源顯示在地圖中
object=Instantiate(source,Vector3,Quaternion)這樣對象就會顯示出來,由於之前加載了,這是會很快把對象顯示出來,避免卡頓
對象移動通過修改object.transform.position可以實現最直接的修改,此外還提供了函數,放在Update中:
Vector3.MoveTowards(Vector3 now,Vector3 target,float speed)
Vector3.Slerp(Vector3 start,Vector3 end,float 百分比)一般這兩個就很強大了。如果要移動拋物線等,可以通過物理引擎加入rigid body,也可以自己定義複雜的算法。
此外Rotate,RotateAround分別進行旋轉和自轉,兩個函數都在transform組件中,自查
對象操作在前面的屬性中已經提到了改變組件的方法改變對象,這裡還有:
點擊事件class ClickEvent :MonoBehaviour{
void OnMouseDown(){
}
}
碰撞檢查首先要給物體加入組件collider,定義碰撞體的形狀,體積等
class CollisionEvent :MonoBehaviour{
void OnCollisionEnter(Collision c){
}
void OnCollisionStay(Collision c){
}
void OnCollisionExit(Collision c){
}
}
遊戲玩法闖關遊戲,通關就行,總共有三個地圖,也就是序章,主題,終章。這只是個小demo,並沒有太長的流程。
所謂「麻雀雖小,五臟俱全」,如果加以時日,可以做大,做美
成果展示這只是一張截圖:
通關視頻https://www.bilibili.com/video/BV1hf4y1i7N8/幻影道路遊戲中有一個跳跳樂關卡,裡面的物體快只有離近了才能看見,而且踩上去很快就會消失,這是反應的比拼,如果不能反映過來下一個點的位置,就會死掉。
那麼物體透明度的調節如下:
Color c;
c=this.GetComponent<Renderer>().material.color;
c.a= X
this.GetComponent<Renderer>().material.color=c;
摩擦力?一起運動!遊戲中有很多移動的平臺,如果踩在這些移動的平臺上,會與平臺一起運動,這非常像是現實中的摩擦力。
這是通過一起運動做到的,如果主角碰撞到某些平臺,就會獲得和平臺當前速度一樣的額外速度
易錯點主角的額外位移必須與平臺放在同一個Update函數中,而不是分開。不同物體的Update不是一起執行的,如果位移函數分開,我們看到的物體會延遲一幀,具體情況是看到平臺在腳下抖動(鬼畜)
BOSS總是盯著我看?通過Quaternion提供的函數轉向
boss.transform.rotation =Quaternion.Slerp(boss.transform.rotation, Quaternion.LookRotation(me.transform.position - boss.transform.position), 10 * Time.deltaTime);
被打了屏幕閃紅光閃紅光的本質是一張純紅色的Texture2D貼圖,通過調節它的透明度漸變。
GUI.color.a就是透明度,取值為0-1,函數自定義
例如:
c=GUI.color;
c.a=(0.4f+0.2f*depth)-(Time.time-damtime)*(0.4f+0.2f*depth);GUI.color=c;
GUI.Label(new Rect(-10,-10,2112,1188),reds);
保存點如果多死幾次就發現,即使點擊重玩,遊戲也不會回到最開始的地方,而是從死亡的關卡開始。仿佛遊戲會自動保存一樣。
實際上由於存檔很簡單,我們直接使用一個static變量就搞定了:
public static int load=0;這個變量就記錄著你已經到達了第幾關,從而直接將主角傳送過去。
每次重玩是,用SceneManager.LoadScene(「XXX」)函數,重新加載當前場景,但是只有static變量不會重新加載,就仿佛是簡單的存檔一樣。
通關視頻展示請移步:通關視頻https://www.bilibili.com/video/BV1hf4y1i7N8/
項目代碼和資源連結:項目傳送門 (資源太多了,直接發的壓縮包)https://gitee.com/lhyyes/unity-game-homework/tree/master/dazhuzai
使用方法:
新建項目,在新項目中刪除所有Asserts中文件
解壓倉庫中的dazhuzai_Asserts.zip文件,裡面有我的資源庫,用我的Asserts覆蓋你的Asserts(粘貼過去),然後刷新等待
在unity中打開Asserts/Scenes文件夾,將裡面的五個文件全都加入File–>Build setting中,雙擊first,進入名叫「first」的scene中,點擊運行。