今天上课随手做了一个打字消除字母的游戏,自己试着用单例模式来控制分数的增长。
内容其实十分简单。
1.使用一个Card脚本控制字母的生成和销毁,同时使用场景控制脚本GameMannger提供的单例来更改得分。
2.场景控制脚本GameMannger动态控制字母的生成。
3.将搭载了Card脚本的字母做成预制体,然后提供给GameMannger即可。
首先是两个脚本:
Card脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Card : MonoBehaviour {
private float speed;
public string alphabet;
// Use this for initialization
void Start () {
speed = Random.Range(1F, 1.5F);
}
// Update is called once per frame
void Update () {
transform.Translate(Vector3.down * Time.deltaTime * speed);
//之前的基础练习有说过,乘上deltaTime可以让移动更平滑
//因为Update是按照帧速率更新的
if(Input.GetKeyDown(alphabet))
{
GameMange.Insatance.updateUI();//单例模式调用
Destroy(this.gameObject);
}
}
}
GameManager脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameMange : MonoBehaviour {
private static GameMange _instance;//单例模式访问
public static GameMange Insatance
{
get
{
return _instance;
}
}
public Text Point;
public GameObject[] card;
private float timer = 0;
int score;
// Use this for initialization
private void Awake()
{
_instance = this;
}
void Start () {
}
// Update is called once per frame
void Update () {
timer += Time.deltaTime;
if(timer>1.5f)
{
CreateCard(Random.Range(0,card.Length));
timer = 0;
}
}
private void CreateCard(int index)
{
float x = Random.Range(-8.65f, 8.65f);
float y = Random.Range(0, 8);
Instantiate(card[index], new Vector3(x, y, 0), Quaternion.identity);//使用Instantiate创建预制体
}
public void updateUI()
{
score += 1;
Point.text = "得分"+score;
}
}
场景搭建和层级关系如下:(素材随便找即可)
制作预制体:先将每个字母图片改为Sprite,然后挂载Card脚本
Alphabet记得赋值,因为是按照输入的值来消除字母的。
然后把GameManager挂载给场景中的空物体GameManager(该物体专门用于游戏节奏控制)
最后记得把Point挂给GameManager的Point,然后给Card数组赋上26个字母的值(预制体)
最后就可以玩了~十分简单的游戏,只是随便做做,顺便复习一点以前学过的东西。
运行结果如下: