前言
其實用Unity制作游戲并不難,如果你想學(xué)習(xí),那我就建議你想從制作一個簡單的跑酷游戲來找到興趣,因為如果你一開始就一直學(xué)習(xí)一些沒什么必要的語法,這樣就會讓你一開始就失去了信心,失去了學(xué)習(xí)Unity的動力,所以如果你先學(xué)習(xí)如何制作一個簡單的跑酷地圖,然后你就會知道Unity是多么簡單,這樣你就會擁有學(xué)習(xí)的動力,并且這樣也可以方便你記住代碼是如何寫的
正片
準(zhǔn)備材料
Unity(什么版本都行)
電腦(能抗住就行)
先創(chuàng)建一個項目,隨便怎么命名都可以
我就命名為簡單跑酷游戲
這一次竟然要制作一個簡單的跑酷游戲,所有我們就只需要實現(xiàn)
主角的移動、攝像頭的跟隨、自行搭建跑酷地面這些最主要的功能
打開項目,在左邊的Hierarchy欄中創(chuàng)建一個Cube
右鍵->3D Object->Cube
可以隨便命名,我直接命名為chushen_dot
之后再命名幾個Cube命名為other_dot_數(shù)字命名的時候一定要使用英文,不要使用中文,否則會報錯
我這里就創(chuàng)建了5個
之后我們就再創(chuàng)建一個Cube命名為zhong_dot這個方塊是用來作為終點的方塊
最后就創(chuàng)建一個Cube命名為player這個方塊用來作為我們的玩家方塊
場景搭建
將跑酷是的場景按照自己的喜好搭建一下,也可以像我這樣
那些方塊的顏色其實是你要創(chuàng)建幾個Material
右鍵->Create->Material
然后將對應(yīng)你自己喜好的顏色處理一下,最后將這些材質(zhì)拖到場景中的對應(yīng)方塊上
注意,這里的攝像頭一定要作為一個第三人稱的視角面對著名為player的方塊,否則等會寫完代碼運行效果符合真正的結(jié)果
可以使用移動工具和旋轉(zhuǎn)工具來實現(xiàn)
賦予方塊屬性
由于主角名為player的方塊需要擁有物理中的重力自然下降的屬性,所以我們給它添加一個Rigidbody組件,讓它能夠自然下落
點擊player->右邊的Inspector欄中劃到最下面->Add Component->搜索Rigidbody->Rigidbody這樣我們就給player方塊添加了剛體組件(Rigidbody)
編寫代碼
在Assets文件夾中創(chuàng)建一個名為Camera_move.cs和Player_move.cs的C#代碼文件
先打開Carmera_move.cs的代碼文件
如文件名所知,這個代碼文件里面寫的是關(guān)于攝像頭跟隨文件的代碼
public GameObject Target; //用來接收跟隨攝像頭跟隨的方塊
public float s = 2f; //速度
Vector3 distance; //用來處理坐標(biāo)之類的數(shù)據(jù)
在**void Start(){}**函數(shù)里面寫上
distance = transform.position - Target.transform.position;
用來處理相機所在相對于player方塊的位置
接下來,刪除原有的
void Update(){}
改為
void LateUpdate(){}
在里面加上
transform.position = Vector3.Lerp(Target.transform.position + distance, transform.position, Time.deltaTime * s); //此代碼可以計算出攝像機在移動時保證撒絲滑坐標(biāo)
transform.LookAt(Target.transform.position); //攝像頭面對玩家
LateUpdate函數(shù)是在所有Update函數(shù)執(zhí)行完畢后被調(diào)用的,它通常用于處理相機的跟隨邏輯。由于相機的跟隨操作需要在游戲物體的移動之后進(jìn)行,所以將相機的跟隨邏輯放在LateUpdate函數(shù)中可以確保相機始終能夠跟隨游戲物體
總結(jié)所有代碼就是如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera_move : MonoBehaviour
{
public GameObject Target;
public float s = 2f;
Vector3 distance;
// Start is called before the first frame update
void Start()
{
distance = transform.position - Target.transform.position;
}
// Update is called once per frame
void LateUpdate()
{
transform.position = Vector3.Lerp(Target.transform.position + distance, transform.position, Time.deltaTime * s);
transform.LookAt(Target.transform.position);
}
}
保存好,關(guān)閉代碼回到Unity編譯一下
我們繼續(xù)寫
接下來我們打開Player_move.cs
public float moveSpeed = 10f; //移動速度
public float turnSpeed = 100f; //旋轉(zhuǎn)速度
public float jumpSpeed = 10f; //跳躍速度
刪除
void Start(){}
在
void Update(){}
里面添加
if (Input.GetKey(KeyCode.W)) //判斷按下的按鍵是否是W
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S)) //判斷按下的按鍵是否是S
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))//判斷按下的按鍵是否是A
{
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))//判斷按下的按鍵是否是D
{
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.Space))//判斷按下的按鍵是否是空格
{
transform.Translate(Vector3.up * jumpSpeed * Time.deltaTime);
}
保存,回到Unity,運行程序,此時你就會發(fā)現(xiàn)
成功啦
結(jié)語
此文章我們介紹了如何制作一款簡單的跑酷游戲,但是有人此時會問
甲:你這個游戲怎么沒有結(jié)束啊
回答:其實并不是我不想介紹,只是我是真的不會怎么寫代碼,所以才沒有制作游戲結(jié)束文章來源:http://www.zghlxwxcb.cn/news/detail-833738.html
如果有哪位大佬知道怎么碰撞,并且可以讓游戲結(jié)束進(jìn)程,請在評論區(qū)告訴我,我們一起學(xué)習(xí)!文章來源地址http://www.zghlxwxcb.cn/news/detail-833738.html
到了這里,關(guān)于【Unity】教你如何使用Unity制作一個簡單的跑酷游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!