使用Unity3D做一個偽3D遊戲吧!(1)
本篇小型例項是為像本渣渣一樣剛剛入門U3D的童鞋們製作的,當然理論上包括了設計一部完整遊戲的主要內容,而不是單純的講某些函式怎麼使用
——也就是說,大部分API裡面使用頻率高的內容並不會詳細解釋,並且對於遊戲不會進行比較高效的優化
那麼開始吧!
在某個遙遠的二維世界裡,有一個正方形——我們姑且叫它“方塊君”,方塊君的宿敵是五邊形君,因為——
啊~~~五邊~~~你比四邊多一邊~~~
什麼鬼,emmmmm,你只需要記住這個事實就可以辣
但是方塊君沒有能夠擊敗五邊形君的力量,於是它向卡密撒嘛求助,卡密撒嘛告訴它,它可以許下一個願望,獲得某種能力,但是五邊形君們也能獲得同樣的能力,於是方塊君考慮再三,決定向神所要移動和攻擊的能力什麼原來方塊君是不會動的嗎 什麼你不寫指令碼方塊君能動嗎
於是,這部腦子一熱突發奇想的垃圾遊戲就誕生了(由於壓根沒有什麼美術資源又懶得去AssetsStore找,所有的東西都是幾何圖形拼成的):
你沒有看錯就是這麼簡單
於是乎,方塊君怒了:你不就是把我放在一個梯形裡面嗎!
卡密撒嘛:別急嘛,之後你就能享受到“民主自由”的感覺了,等我敲個程式碼……將這些扔進FixedUpdate()裡面就行辣
if (Input.GetKey(KeyCode.LeftArrow)&&transform.position.x>=-8f)//按住左方向鍵並限制範圍 { transform.Translate(Vector2.left* Time.deltaTime*5f); } if (Input.GetKey(KeyCode.RightArrow)&&transform.position.x<=8f)//右方向鍵 { transform.Translate(Vector2.right* Time.deltaTime*5f); }
這樣也就實現了方塊君的左右移動
但是方塊君還不知足:光扭扭腰怎麼行,我還得會飛,會時空折躍……教練我想學
卡密:滾犢子,我也想學,那就隨便給你做一個“跳躍”吧!
懶惰是第一生產力,計算機圖形學第一大定律——只要他看起來是對的,那麼他就是對的,方塊君的跳躍也可以用transform.Translate()進行模擬:
我們先定義兩個狀態:
public bool canJump = true, jumping;//是否可以起跳,是否正在跳躍
再定義一個浮空時間:可以根據個人喜好修改,如果是正無窮……恭喜方塊君你會飛啦(當然原理其實不是這樣的)
public float jumptime = 0.5f;
之後我們寫一個跳躍函式!?怎麼看起來這麼辣雞
void jump()
{
if (canJump)//如果能跳
{
canJump = false;//那麼不能跳
jumping = true;//那麼正在跳
jumptime = 0.5f;//那麼重新設定跳躍時間
}
}
別急,真正的大頭是要放在FixedUpdate()裡面的:
if (transform.position.y <= -2f)//如果方塊君在“地面”
{
canJump = true;//那麼它可以再次起跳
}
if(Input.GetKey(KeyCode.UpArrow)){//如果按下上方向鍵
jump();
}
if(jumping){//如果正在跳
if(jumptime>0.375f){將時間分為三部分:上升,滯空,下降,比例理論上是1:2:1(當然你也可以按自己的喜好來)
transform.Translate(Vector2.up * Time.deltaTime * 8f);
}else if(jumptime<=0.15f&&jumptime>=0f){//這裡是一個玄學的地方,本來應該是jumptime<=0.125f,但是這樣會導致方塊君回不到原來高度
transform.Translate(Vector2.down * Time.deltaTime * 8f);
}
jumptime -= Time.deltaTime;//計時器
}
if(jumptime<=0){//跳完啦
canJump = true;//恢復原來的設定
jumping = false;
}
那麼我們還是對裡面相關的東西進行解釋:
·常數們:
由於我們做的只是一個單場景小遊戲,所以很多功能還是使用常數效率更高,比如對移動距離的判定:
所以橫座標絕對值不超過8
·對於“跳躍”:
可以發現,如果一直按住上方向鍵,方塊君的跳躍是有周期的,也就是說,一直按住該按鍵,呈現的是這樣的一個函式影象
其中,y軸表示方塊君跳起的高度,x軸表示時間,各位可以看一下方塊君起跳的速度應該是8個單位每秒,在落地之後又可以再次起跳
我們通過計時器來進行這樣的設計:
簡單來說:一旦時間達到設定值,就可以執行一次操作,並且重設時間
所以,方塊君的第一個願望終於滿足辣,接下來我們還會設計新操作讓方塊君可以射出子彈,拭目以待吧——當然對於大佬們根本不是什麼問題吧……自己也要繼續努力啊(懶得優化是病得治——雖然認真做專案的時候肯定會優化的辣)
啊啊啊不行寫得好爛啊,求各位大佬可以指正一下啊啊啊
畢竟第一次寫比較(專業?)的blog咩