步驟一:創(chuàng)建游戲界面
首先將資源導入并且將圖片類型設置成2DandUI
隨后我們將攝像機設置成正交模式
材質(zhì)的類型我們都設置成Transparent類型
步驟二:制作咔噠鴨序列幀動畫并且讓咔噠鴨飛起來
搭建好背景后我們現(xiàn)在開始制作咔噠鴨的序列幀動畫了润梯,首先我們先在游戲?qū)ο筮菄}鴨上先掛載一個腳本并且命名為PlayerAnimator,然后我們開始寫我們的腳本。
public class PlayerAnimator : MonoBehaviour
{
public float timer = 0;
//顯示1秒15幀
public int frameNumber=10;
//當前是第0幀
public int frameCount = 0;
void Start () {
//給一個恒定力來讓游戲?qū)ο笠恢蓖白? GetComponent<Rigidbody>().velocity = new Vector3(2, 0, 0);
}
// Update is called once per frame
void Update ()
{
Vector3 v3 = GetComponent<Rigidbody>().velocity;
GetComponent<Rigidbody>().velocity = new Vector3(5, v3.y, v3.z);
timer += Time.deltaTime;//計數(shù)器增長
if (timer >= 1.0f / frameNumber)//當這個時間大于一幀的時間
{
frameCount++;//當前的幀率增加
timer -= 1.0f / frameNumber;//這個時間減去一幀的時間
int frameIndex = frameCount % 3;//計算當前需要顯示第幾幀畫面
//更新小鳥的offset屬性
//拿到Player上面的材質(zhì)球 對于材質(zhì)里面有貼圖的羊赵,只要使用_MainTex就能拿到主要的貼圖
GetComponent<Renderer>().material.SetTextureOffset("_MainTex", new Vector2(0.33333f * frameIndex, 0));
}
if (Input.GetMouseButton(0))
{
Vector3 v2 = GetComponent<Rigidbody>().velocity;
GetComponent<Rigidbody>().velocity = new Vector3(v2.x + 1, 5, v2.z);
Debug.Log(GetComponent<Rigidbody>().velocity.y);
}
}
}
然后我們設置游戲?qū)ο筮菄}鴨的Tag值為‘Player’
然后我們在給我們的游戲?qū)ο筮菄}鴨添加剛體讓其擁有重力
隨后我們運行查看下效果吧
步驟三:讓我們的仙人掌隨機位置生成
首先我們先在仙人長的父空游戲?qū)ο笊蟿?chuàng)建腳本并且將其命名為cactusRamdom耐朴。
下面我們打開腳本寫入腳本
public class cactusRamdom : MonoBehaviour {
void Start () {
RangerRandom();
}
public void RangerRandom()
{
float Ranger = Random.Range(-0.302f,0.03f);//設置仙人掌隨機Y軸的值。
this.transform.localPosition=new Vector3(this.transform.localPosition.x,Ranger,this.transform.localPosition.z);
}
}
運行后發(fā)現(xiàn)仙人掌的Y軸位置都隨機了
步驟四:游戲界面的跳轉(zhuǎn)
首先我們得先添加一個空游戲?qū)ο蟛⑶医o其添加觸碰器并勾選其觸發(fā)器,然后我們設置碰撞器的size給其Z軸厚度女轿,并見其位置放在第二個界面的中間巧婶。
然后我們添加其腳本并命名為scenceManager乾颁,然后我們打開腳本,寫入腳本如下
public class scenceManager : MonoBehaviour
{
public Transform currentBg;
public cactusRamdom pipe;
public cactusRamdom pipe1;
void OnTriggerEnter(Collider collider)
{
if (collider.tag=="Player")
{
//當期面板的位置=第一個面板的位置+自身的大小*3
currentBg.position=new Vector3(currentBg.position.x+33,currentBg.position.y,currentBg.position.z);
pipe.RangerRandom();//給其仙人掌1號隨機值
pipe1.RangerRandom();//給其仙人掌2號隨機值
}
}
}
然后我們將該賦值的給其賦值最后別忘記Apply哦艺栈!
最后我們運行后可以看到當我們走過觸發(fā)器后前一個界面就移至最后去了英岭,并且其仙人掌也是隨機的
步驟五:設置攝像機跟隨游戲?qū)ο笠苿?/h4>
我們直接給攝像機上創(chuàng)建一腳本并且命名為:GameMover,我們?nèi)绾巫寯z像跟隨我們的游戲?qū)ο笞卟⑶襓軸不超出固定范圍呢湿右,下面我們來寫入腳本诅妹。
public class GameMover : MonoBehaviour
{
public GameObject dog;
private Transform dogTrangsform;
private float indexY;
//攝像機照射Y軸最高高度
private float a=0.823f;
//攝像機照射Y軸最低高度
private float b=0.193f;
void Start()
{
dog = GameObject.FindGameObjectWithTag("Player");
dogTrangsform = dog.transform;
}
void Update()
{
indexY = dogTrangsform.position.y;
if (indexY==a||indexY>a)//如果需要的Y值等于或者大于最高值
{
indexY = a;//那么需要的值就等于最高的高度值
}
else if (indexY == b || indexY < b)//如果需要的Y值等于或者小于最低值
{
indexY = b;//那么需要的值就等于最低的高度值
}else
{
indexY = dogTrangsform.position.y;//否則就將需要的值隨著攝像機的高度變換而變換
}
dogpos = dogTrangsform.position;
this.transform.position = new Vector3(dogpos.x + 1.91f,indexY, -5f);
}
}
運行測試下,效果還是不錯的哦
步驟六:記錄積分
首先我們先在每個關(guān)卡上添加一個空游戲?qū)ο蟛⒔o其添加Box碰撞器并且勾選器觸發(fā)器,并且設置其位置和Z軸的厚度吭狡。
隨后我們添加UGUI的Image和Text并將其位置和圖片設置好位置和大小
然后我們在我們的每個關(guān)卡的觸發(fā)器上添加腳本并且命名為Integral
首先我們先在攝像機上的腳本GameMover上添加腳本設置其積分的值
public class GameMover : MonoBehaviour
{
public int score = 0;//記錄積分
public static GameMover Instances;
void Awake()
{
Instances = this;
}
}
隨后我們打開我們腳本Integral寫入腳本如下
using UnityEngine.UI;
public class Integral : MonoBehaviour
{
public Text integral;
void OnTriggerExit(Collider other)
{
if (other.transform.tag=="Player")
{
GameMover.Instances.score += 1;
integral.text = "分數(shù):" + GameMover.Instances.score;
}
}
}
寫完后我們將Text值賦值到腳本尖殃,最后我們運行程序測試
步驟七:設置游戲狀態(tài)
最開始我們的游戲?qū)ο筮菄}鴨是不受重力影響,所以將游戲?qū)ο蟮氖种亓τ绊懭コ⑶覍⑺倪\動學勾選划煮,讓其最開始的時候不做任何運動送丰,
隨后我們在攝像機上的腳本上GameMover加入代碼如下
public class GameMover : MonoBehaviour
{
//游戲菜單狀態(tài),游戲中弛秋,游戲結(jié)束
public static int GameState_Menu = 0;
public static int GameState_Playing = 1;
public static int GameState_Paser = 2;
public static int GameState_End= 3;
public int GameState = GameState_Menu;
void Update()
{
if (GameState==GameState_Menu)
{
if (Input.GetMouseButtonDown(0))
{
GameState = GameState_Playing;
dog.SendMessage("DogStart");
}
}
}
}
隨后我們在游戲?qū)ο筮菄}鴨上PlayerAnimator加入代碼代碼如下
public class PlayerAnimator : MonoBehaviour
{
public void DogStart()
{
//給dog施加重力
GetComponent<Rigidbody>().useGravity = true;
GetComponent<Rigidbody>().isKinematic = false;
//給一個恒定力來讓游戲?qū)ο笠恢蓖白? GetComponent<Rigidbody>().velocity=new Vector3(2,0,0);
}
}
最后我們測試器躏,最開始我們游戲?qū)ο笫遣皇苤亓Ξ斘覀凕c擊的時候就會受重力影響也就是游戲正式開始
步驟八:觸碰障礙物死亡
首先我們先給所有的障礙物都添加碰撞器,然后我們在障礙物上添加腳本并且給其命名為Daying蟹略,然后我們打開腳本開始寫碰撞方法
public class Daying : MonoBehaviour {
void OnCollisionEnter(Collision other)
{
if (other.transform.tag=="Player")
{
GameMover.Instances.GameState = GameMover.GameState_End;
}
}
}
隨后我們在游戲?qū)ο蟮哪_本上PlayerAnimator添加代碼
最后在攝像機上的腳本GameMover添加代碼
這樣我們游戲?qū)ο笤谂鲎驳秸系K物后就會死亡登失,并受重力掉下去.
步驟九:分數(shù)保存
首先我們添加UI并設置位置
然后我們再在panel上添加腳本并且命名為UiSetActier,然后我們在里面寫入腳本如下
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class UiSetActier : MonoBehaviour
{
public static UiSetActier _instance;
public Text highScore;
public Text nowScore;
void Awake()
{
_instance = this;
this.gameObject.SetActive(false);//一開始不顯示
}
//保存分數(shù)
public void SaveScore(int NowScore)
{
//第一次玩 科乎,給一個默認值分數(shù)
int HighScore = PlayerPrefs.GetInt("Score", 0);
if (NowScore > HighScore)
{
HighScore = NowScore;
}
PlayerPrefs.SetInt("Score",HighScore);
nowScore.text = NowScore.ToString();
highScore.text = HighScore.ToString();
}
public void Onbtnclick()
{
if (GameMover.Instances.GameState ==GameMover.GameState_End)
{
SceneManager.LoadScene(0);
}
else if (GameMover.Instances.GameState == GameMover.GameState_Paser)
{
}
}
}
然后我們在攝像機腳本上GameMover加入以下代碼
//假如游戲狀態(tài)==結(jié)束
if (GameState == GameState_End)
{
UiSetActier._instance.gameObject.SetActive(true);
UiSetActier._instance.SaveScore(score);//調(diào)用面板管理者壁畸,保存分數(shù)
}
然后我們在將點擊繼續(xù)的按鈕添加上其事件Onbtnclick就大功告成了,
這樣我們就完成了茅茂,最后我們再來看下其結(jié)果吧
我們可以看到完美的運行并且其分數(shù)也保存了下來