跑酷遊戲製作筆記
2014.9.5
學了unity有一段時間了。想想也是要多鍛鍊自己的編程功夫了。開始想做rpg的遊戲。不過感覺應該耗時會有點久。現在時間又有點緊,想想就還是先做跑酷的吧。之後有時間在做rpg的遊戲。
跑酷類的我沒有看過相關的教程什麼的。所以不太清楚別人的是怎麼開發的。我現在也有一些開發的思路。大神們如果看到我的有什麼錯誤歡迎提出來。不過就不要噴我了。。我畢竟也是一個新手。就打算寫點東西留着,以後在碰到相關的也可以有個資料查詢下。
說了半天了。都沒有一點有用的。好吧。現在開始正式進入話題!
這是我先創建的一個場景。下面的是兩個cube主要我是拿cube當路了。畢竟自己不是美工。。自己做路比較費勁的。就請原諒哈。。。
好的。我這個人物是從網上下來的。網上有很多可愛的模型的。基本都可以用的。
我把創建場景帶的主攝像機放到這個模型裏了。也就是讓這個模型當這個相機的父類。
這麼做的原因是可以讓這個主攝像機一直跟隨角色運動。至於那些攝像機相關的腳本我還真的不太會。可能以後碰到相關的我在研究吧。
我做人物的方式和別人的有些不同。我現在也不清楚到底哪個方式好。有些人是給模型添加剛體和碰撞器之後同過rigidbody.velocity 這個給物體一個方向的力。但是我有時候用不好。之後看到一個方式。是給模型添加角色控制器(CharacterController),
我的模型下面添加的東西:
如圖:
**當你給模型添加好characterController 後物體是不會受重力影響的。也就是說物體會在空中無法落到你添加的cube上的。這個時候就要開始寫代碼了。
我屬性方面的聲明上我就是以後用的什麼在添加什麼了。第一次打算寫一個完整的遊戲。思路不太清晰的。。請各位見諒
#region 屬性
Private float speed = 3;//速度
public int TabRun ;//切換跑,衝刺,跳
private Vector3 moveDirection = Vector3.zero;
private int jumpSpeed = 3;//跳躍
private float gravity = 10.0f;
private boolm_panduanjump = true;
public intdisplacement = 0;//左右位移
#endregion
Ps:#region ……#endregion這個可以把包圍在內的代碼縮小。看着也會整齊很多的。
#region 對象
public Transform m_transform; //自己的對象
private CharacterController m_controller;//角色控制器
private Animation m_animation;//動畫組件
#endregion
#region 動畫
private string m_run = "run";//跑
private string m_sprint ="sprint";//衝刺
private string m_jump = "jump";//跳
#endregion
動畫這裏我就先在最前面定義了。感覺這樣定義好了。以後用的時候看着也會很方便的。因爲感覺有時候網上下的資源,動畫的名字千奇百怪。。
Void Start(){
m_transform =this.transform;// 這裏先給transform賦值。聽說這樣會省資源
m_controller =GetComponent<CharacterController>();//獲取角色控制組件
m_animation =GetComponent<Animation>();//獲取動畫組件
}
下面就是這個角色腳本的最主要的了。移動腳本
#region //角色移動
/// <summary>
/// TabRun 是整數類型 通過這個類型的值判斷是跑,衝刺還是跳。
/// 這裏還會判斷左右位移
/// </summary>
void Move() {
Vector3 m_forward =m_transform.TransformDirection(Vector3.forward);
#region 判斷跑,衝刺,跳
//判斷跑,衝刺,跳
switch (TabRun) {
case 1:
m_animation.CrossFade(m_run);
m_controller.SimpleMove(m_forward * speed);
break;
case 2:
m_animation.CrossFade(m_sprint);
m_controller.SimpleMove(m_forward * speed);
break;
case 3:
if(m_controller.isGrounded)
{
if(m_panduanjump)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));
//moveDirection = transform.TransformDirection(moveDirection);
//moveDirection *= speed;
moveDirection = m_forward * speed;
m_animation.CrossFade(m_jump);
moveDirection.y = jumpSpeed;
//m_controller.SimpleMove(m_forward * speed);
m_panduanjump = false;
}
else {
TabRun= 1;
m_panduanjump = true;
}
}
moveDirection.y-= gravity * Time.deltaTime;
m_controller.Move(moveDirection * Time.deltaTime);
break;
}
#endregion
#region 判斷左右位移
//判斷左右位移
switch(displacement){
case -1:
if(displacement ==-1)
{
m_transform.position=new Vector3(-0.83f,m_transform.position.y, m_transform.position.z);
displacement = 2;
}
break;
case 0:
if(displacement == 0) {
m_transform.position=new Vector3(0,m_transform.position.y,m_transform.position.z);
displacement = 2;
}
break;
case 1:
if(displacement == 1) {
m_transform.position=
newVector3(0.67f,m_transform.position.y,m_transform.position.z);
}
break;
}
#endregion
}
#endregion
第一天的做好了。明天開始做跑到的無限循環。。打算都做好了後。在看看網上的跑酷教程。看看自己有什麼不足的要改進的。