1.(位置大小信息)在U3D新建一個簡單的項目,默認有主攝像機和燈光,然後我們新增,一個Cube,然後調整大小,將其命名成地板,下面是地板的參數,Position是位置,Rotation是旋轉的信息,Scale是縮放信息,所以Z是長度,X和Y分別是平面上的寬和高
2.(剛體)然後在新建一個Cube,將其命名爲Player,將其調整大小,放到地板上,默認Player是沒有碰撞體積的,我們需要在Player上增加一個剛體(具有物理體積特性),點擊Player然後在屬性上最下面點擊add Component,然後搜索rigidbody,添加上去後,將其Mass(質量)修改爲2
3.(TAG)然後我們在新建一個Cube,將其命名爲障礙物,然後將障礙物調整好寬高後,給它新增一個Tag(在批量操作某羣實例的時候,Tag可以作爲識別標識),點擊障礙物,然後在屬性上點擊Tag,下拉菜單選擇Add Tag,然後輸入tag名稱爲障礙物,在將障礙物的Tag選擇爲新增的內容
4.(Prefab)因爲我們會有N個障礙物,我們將障礙物從Hierarchy拖入到Assets,這裏我們稱之爲Prefab,Prefab是一個關聯性可複製的實例,然後我們在Assets中可以將剛纔新加的prefab實例,拖入到場景中,用來佈局障礙
5.(Script)然後我們點擊Player,在屬性上點擊add component,搜索script,然後在Assets中找到腳本,雙擊就可以編輯了,這裏推薦使用Visual Studio,我用的是Visual Studio 2019,然後裏面默認會有一個Start和Update方法,我們將下面我已經寫好的代碼copy進去
using UnityEngine;
using UnityEngine.UI;
public class PlayerController : MonoBehaviour
{
//剛體實例
public Rigidbody rg;
//移動速度
public int speed = 200;
//方向速度
public int direction_speed = 500;
//文本實例
public Text text;
//音頻實例
public AudioSource Audio;
//背景音頻實例
public AudioSource Audio_BG;
//是否結束
bool isover = false;
//是否開始
bool start = false;
//運行時長
float m_timer = 0;
/// <summary>
/// 碰撞事件
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
//判斷碰撞的實例tag內容
switch (collision.collider.tag)
{
case "障礙物":
text.text = "失敗:" + transform.position.z.ToString("f2");
isover = true;
start = false;
Play("音樂/lows");
Audio_BG.volume = 40;
break;
case "終點":
text.text = "勝利!";
start = false;
isover = true;
Play("音樂/win");
Audio_BG.volume = 40;
break;
}
}
/// <summary>
/// 初始化事件
/// </summary>
void Awake()
{
Audio.playOnAwake = false;
}
/// <summary>
/// 遊戲開始事件
/// </summary>
void Start()
{
text.text = "點擊回車開始\r\nA/D移動";
Audio_BG.volume = 40;
}
/// <summary>
/// 物理引擎更新事件
/// </summary>
private void Update()
{
}
/// <summary>
/// 重新開始
/// </summary>
void Gostart()
{
isover = false;
start = false;
transform.position = new Vector3(0, 1, 0);
text.text = "點擊回車開始\r\nA/D移動";
}
/// <summary>
/// 播放音頻
/// </summary>
/// <param name="str"></param>
/// <param name="isloop"></param>
public void Play(string str,bool isloop = false)
{
if (Audio.isPlaying)
{
Audio.Stop();
}
AudioClip clip = Resources.Load<AudioClip>(str);
Audio.loop = isloop;
Audio.clip = clip;
Audio.Play();
}
/// <summary>
/// 非物理更新
/// </summary>
void FixedUpdate()
{
//判斷是否按下esc
if (Input.GetKeyDown(KeyCode.Escape))
{
start = false;
//退出遊戲
Application.Quit();
return;
}
if (Input.GetKeyDown(KeyCode.Return))
{
if (!isover)
{
start = true;
text.text = "GAME START";
Play("音樂/start");
Audio_BG.volume = 80;
}
else
{
Gostart();
}
}
if (start)
{
//給剛體施加力,Time.deltaTime爲運行的幀數時長,每幀0.1
rg.AddForce(0, 0, speed * Time.deltaTime);
if (Input.GetKey(KeyCode.D))
{
rg.AddForce(direction_speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.A))
{
rg.AddForce(-direction_speed * Time.deltaTime, 0, 0);
}
//修改文本實例屬性
text.text = "距離:" + transform.position.z.ToString("f2");
if (transform.position.y < 0)
{
text.text = "失敗:" + transform.position.z.ToString("f2");
isover = true;
start = false;
Play("音樂/lows");
//調整音頻實例聲音大小
Audio_BG.volume = 40;
}
}
if (isover)
{
m_timer += Time.time;
if (m_timer >= 800)
{
Gostart();
m_timer = 0;
}
}
}
}
然後點擊Main Camera查看屬性,最下面也新增 一個component爲script,置入以下代碼:
using UnityEngine;
public class ForwordCamera : MonoBehaviour
{
public GameObject Cameras;
public GameObject Player;
public Vector3 vector;
// Update is called once per frame
void Update()
{
//相機位置等於player的位置加上間距偏移
Cameras.transform.position = Player.transform.position + vector;
}
}
內容有點多,剩下的以後說吧。。
遊戲本頁下載