using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;//dotween動(dòng)畫
public class FruitSpawn : MonoBehaviour
{
//定義一個(gè)生成水果的數(shù)組;
public GameObject[] FruitPrefabs;
//定義分?jǐn)?shù)
public int totalScore;
//分?jǐn)?shù)文本框
public Text scoreText;
//時(shí)間文本框
public Text timeText;
//剩余時(shí)間
private float remainTime;
//倒計(jì)時(shí)間
private float countTime=90f;
//開始時(shí)間捆毫;
private float startTime;
//游戲重置UI
public GameObject reStartUI;
//游戲重新開始UI位置闪湾;
public Transform ReStartUIpos;
//判斷游戲是否結(jié)束標(biāo)志位;
public bool isGameOver;
//單例模式 公開的 靜態(tài)的 為了別的類可以直接調(diào)用它 并且節(jié)省內(nèi)存
public static FruitSpawn instance;
private void Awake()
{
instance = this;
}
void Start () {
//分?jǐn)?shù)開始?xì)w零
// totalScore = 0;
//獲取當(dāng)前時(shí)間绩卤;
// startTime = Time.time;
//調(diào)用開始的方法
Init();
}
void Update () {
}
//物理時(shí)間相關(guān)
private void FixedUpdate()
{
//判斷游戲是否結(jié)束 是的話即返回途样;
if (isGameOver)
{
return;
}
//剩余時(shí)間=倒計(jì)時(shí)間-已經(jīng)過去的時(shí)間 已經(jīng)過去時(shí)間=當(dāng)前時(shí)間減去開始時(shí)間
remainTime = countTime - (Time.time-startTime);
//顯示時(shí)間
timeText.text = Formate(remainTime);
//判斷時(shí)間小于等于0江醇;游戲結(jié)束;
if (remainTime<=0)
{
GameOver();
}
}
//格式化時(shí)間
private string Formate(float time) {
string timeStr;
int timeFormate = (int)time;
//三目運(yùn)算符
timeStr = time > 10 ? "00:" + timeFormate.ToString() : "00:0" + timeFormate.ToString();
return timeStr;
}
/// <summary>
/// 開始生成水果
/// </summary>
private void StartSpawnFruit() {
//開啟協(xié)程方法
StartCoroutine(SpawnFruit());
}
//開啟協(xié)程 隔時(shí)間段生成水果何暇;
IEnumerator SpawnFruit() {
//生成水果
while (true)
{
//隨機(jī)生成水果
GameObject Fruit = Instantiate(FruitPrefabs[Random.Range(0,FruitPrefabs.Length-1)]);
//給水果隨機(jī)位置
Fruit.transform.position=transform.position+transform.right*(Random.Range(-1.0f,1.0f));
//獲取水果剛體組件陶夜;
Rigidbody rigi= Fruit.GetComponent<Rigidbody>();
//給一個(gè)向上的速度;
rigi.velocity = new Vector3(0,5f,0);
//給水果添加隨機(jī)角速度 有翻滾效果裆站;
rigi.angularVelocity = new Vector3(0, 0, Random.Range(-5.0f, 5.0f));
//重力生效
rigi.useGravity = true;
//每隔3秒就生成水果
yield return new WaitForSeconds(3f);
}
}
//定義一個(gè)公開的加分方法 被切割時(shí)調(diào)用
public void AddScore(int score) {
totalScore += score;
scoreText.text = totalScore.ToString();
}
//游戲結(jié)束方法
private void GameOver() {
//判斷游戲未結(jié)束条辟;
if (!isGameOver)
{
//實(shí)例化結(jié)束UI;
GameObject Restart = Instantiate(reStartUI);
//確定位置
Restart.transform.position = ReStartUIpos.position;
//動(dòng)畫效果 設(shè)置初始值為0宏胯;
Restart.transform.localScale = Vector3.zero;
//實(shí)現(xiàn)動(dòng)畫關(guān)鍵語句
Restart.transform.DOScale(Vector3.one*20,0.5f);
//游戲結(jié)束
isGameOver = true;
//關(guān)閉所有協(xié)程 不能實(shí)例化水果
StopAllCoroutines();
}
}
//游戲重新開始
public void ReStartGames() {
//重新開始的時(shí)候延遲調(diào)用
Invoke ("Init",2f);
}
//初始化游戲
private void Init() {
//分?jǐn)?shù)開始?xì)w零
totalScore = 0;
//獲取當(dāng)前時(shí)間羽嫡;
startTime = Time.time;
//開始界面初始化
StartSpawnFruit();
//分?jǐn)?shù)初始化 歸零
scoreText.text = "0";
//時(shí)間初始化
timeText.text = "00:00";
//標(biāo)志位也初始化
isGameOver = false;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Fruit : MonoBehaviour {
void Start () {
}
//提高性能,銷毀水果
void Update () {
//判斷水果Y位置小于-10時(shí)肩袍,銷毀杭棵;
if (this.transform.position.y<-10.0f)
{
Destroy(this.gameObject);
}
}
}
四、給玩家添加武器
五了牛、添加武器特效
六颜屠、核心機(jī)制-切
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwrodCutter : MonoBehaviour {
//定義一個(gè)公開的持有引用 被切割后的材質(zhì) 切面 材質(zhì)
public Material capMaterial;
void Start () {
}
// Update is called once per frame
void Update () {
}
//刀與水果發(fā)生碰撞后處理的函數(shù)
public void OnCollisionEnter(Collision coll) {
//獲取被到碰撞后的物體
GameObject victim = coll.collider.gameObject;
//切面處理
GameObject[] pieces = BLINDED_AM_ME.MeshCut.Cut(victim, transform.position, transform.right, capMaterial);//參數(shù)1:切割對象 參數(shù)2:發(fā)生碰撞的位置 參數(shù)3:切割方向 水平方向坐標(biāo) 參數(shù)4:被切割后顯示的材質(zhì);
//去掉水果碰撞體鹰祸,避免重復(fù)切割甫窟;
// pieces[1].GetComponent<MeshCollider>().enabled = false;
//添加剛體 有下落的效果
if (!pieces[1].GetComponent<Rigidbody>())
pieces[1].AddComponent<Rigidbody>();
//一秒過后 銷毀對象
Destroy(pieces[1], 1);
//判斷特定UI重新開始游戲
if (victim.tag == "GameOverUI")
{
//游戲重新開始 調(diào)用單利模式 重新開始方法;
FruitSpawn.instance.ReStartGames();
//獲取剛體
Rigidbody rigi = GetComponent<Rigidbody>();
//使用重力
rigi.useGravity = true;
//一秒后銷毀
Destroy(pieces[0], 1);
}
else {//切的不是游戲結(jié)束界面
//被切割后 加分 調(diào)用單例
FruitSpawn.instance.AddScore(10);
}
}
}