教程相關(guān)資源 | Unity 3D游戲開(kāi)發(fā)+腳本編程完整指南(工程文件+PPT).zip |

1.3.1 游戲設(shè)計(jì)



小知識(shí)按住 Ctrl 鍵拖曳物體的作用按住 Ctrl 鍵拖曳物體會(huì)讓其以一個(gè)固定值移動(dòng)(可以在Edit→Snap Settings 中修改這個(gè)固定值),調(diào)整物體的旋轉(zhuǎn)和縮放時(shí)也是同理。這個(gè)功能在搭建場(chǎng)景時(shí)可以很方便地對(duì)齊物體的位置,特別是當(dāng)物體為同一規(guī)格大小時(shí)。 Unity 中還有很多類(lèi)似的很方便的快捷鍵,在用到時(shí)會(huì)介紹。
1.3.2 功能實(shí)現(xiàn)
public class Player : MonoBehaviour
{
public float speed;
public float turnSpeed;
void Update()
{
float x = Input.GetAxis("Horizontal");
transform.Translate(x * turnSpeed * Time.deltaTime, 0, speed * Time.deltaTime);
}
}

小提示Unity 中的父子關(guān)系父子關(guān)系是 Unity 中相當(dāng)重要的一個(gè)概念,此處可以不用深究,在第 2 章會(huì)詳細(xì)說(shuō)明。
1.3.3 游戲機(jī)制
public class Barrier : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
// 防止其他物體與障礙物的碰撞被檢測(cè),我們只需要障礙物與小球的碰撞被檢測(cè)到
if (other.name == "Player")
{
Time.timeScale = 0;
}
}
}
小知識(shí)什么是預(yù)制體? Time.timeScale 是什么?預(yù)制體簡(jiǎn)單來(lái)說(shuō)就是一個(gè)事先定義好的游戲物體,之后可以在游戲中反復(fù)使用。最簡(jiǎn)單的創(chuàng)建預(yù)制體的方法是直接將場(chǎng)景內(nèi)的物體拖曳到 Project 窗口中,這時(shí)在 Hierarchy (層級(jí))窗口中所有與預(yù)制體關(guān)聯(lián)的物體名稱(chēng)都會(huì)以藍(lán)色顯示(普通物體的名稱(chēng)是黑色)。關(guān)于預(yù)制體的內(nèi)容會(huì)在第 2 章詳細(xì)說(shuō)明。Time.timeScale 表示游戲的運(yùn)行時(shí)間倍率,設(shè)置為 0 即表示游戲里的時(shí)間停滯, 1 即正常的時(shí)間流逝速度, 2 即兩倍于正常的時(shí)間流逝速度,以此類(lèi)推。
void Update()
{
// 省略的代碼部分用省略號(hào)表示……
// 一旦小球位置超出了跑道的范圍則直接下落
if (transform.position.x < -4 || transform.position.x > 4)
{
transform.Translate(0, -10 * Time.deltaTime, 0);
}
// 下落一定距離之后游戲結(jié)束
if (transform.position.y < -20)
{
Time.timeScale = 0;
}
}
using UnityEngine.SceneManagement;
public class Player : MonoBehaviour
{
// 省略的代碼部分用省略號(hào)表示……
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
SceneManager.LoadScene(0); // 重新加載場(chǎng)景
Time.timeScale = 1; // 恢復(fù)正常的時(shí)間流速
return;
}
// 省略的代碼部分用省略號(hào)表示……
}
}
小提示注意添加頭部引用SceneManager 這個(gè)類(lèi)型是屬于UnityEngine.SceneManagement 的,因此要添加頭部引用后才能調(diào)用 SceneManager.LoadScene(0) 方法。這里參數(shù) 0 表示場(chǎng)景的序號(hào),由于游戲現(xiàn)在只有一個(gè)場(chǎng)景,因此表示加載當(dāng)前場(chǎng)景。

public class End : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
if (other.name == "Player")
{
Debug.Log("過(guò)關(guān)");
Time.timeScale = 0; // 暫停游戲
}
}
}
1.3.4 完成和完善游戲

小提示場(chǎng)景攝像機(jī)不會(huì)影響實(shí)際游戲畫(huà)面場(chǎng)景攝像機(jī)指的是在 Scene (場(chǎng)景視窗)里的、僅在編輯模式可用的攝像機(jī)。 Hierarchy 窗口中的攝像機(jī)決定在Game 窗口里看到的實(shí)際游戲畫(huà)面。注意不要將兩者混淆。


小知識(shí)只是創(chuàng)建了 Panel ,為什么自動(dòng)添加了其他東西?當(dāng)直接創(chuàng)建任何 UI 下的組件時(shí)都會(huì)自動(dòng)生成 Canvas 與EventSystem 組件,這兩個(gè)組件分別與 UI 的布局和交互相關(guān),暫時(shí)不做深究。完整的 UI 系統(tǒng)會(huì)在后續(xù)章節(jié)介紹。
public class End : MonoBehaviour
{
// 聲明一個(gè)物體變量
GameObject endUI;
private void Start()
{
// 通過(guò)物體在場(chǎng)景中的名字來(lái)找到這個(gè)物體
endUI = GameObject.Find("EndUI");
// 在場(chǎng)景中隱藏這個(gè)物體
endUI.SetActive(false);
}
private void OnTriggerEnter(Collider other)
{
if (other.name == "Player")
{
Debug.Log("過(guò)關(guān)");
// 在場(chǎng)景中顯示這個(gè)物體
endUI.SetActive(true);
Time.timeScale = 0; // 暫停游戲
}
}
}


void Update()
{
// 省略的代碼部分用省略號(hào)表示……
Transform c = Camera.main.transform;
Quaternion cur = c.rotation;
Quaternion target = cur * Quaternion.Euler(0, 0, x * 1.5f);
Camera.main.transform.rotation = Quaternion.Slerp(cur, target, 0.5f);
}
教程相關(guān)資源 | Unity 3D游戲開(kāi)發(fā)+腳本編程完整指南(工程文件+PPT).zip |
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-831614.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-831614.html
到了這里,關(guān)于Unity 3D游戲開(kāi)發(fā)+腳本編程完整指南:制作第一個(gè)游戲:3D滾球跑酷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!