- 这个游戏是重A计划上看来的,全部看完根据自己思路写的(有3D版如果需要也可以发)
- 最后有素材 ,APK文件,以及项目
- 然后先发下效果图
- 代码依然比较简单
- 转盘旋转
-
public class CicleRotate : MonoBehaviour {
/// 旋转角度
public int RotateAngle = 90;
void Start () {
}
void FixedUpdate () {
if (!GameManger.isOver)
{
//进行旋转
transform.Rotate(new Vector3(0, 0, -RotateAngle * Time.deltaTime));
}
}
} - 游戏管理
-
public class GameManger : MonoBehaviour {
///创建位置
private Transform creatPos;
///针
private GameObject pin;
//是否游戏结束
public static bool isOver = false;
void Start () {creatPos = GameObject.Find("CreatPos").transform;
//获取针
pin = Resources.Load<GameObject>("Pin");
CreatPin();
}void Update () {
//点击进行创建针
if (Input.GetMouseButtonDown(0))
{
CreatPin();
}
}
///创建针
void CreatPin()
{
Instantiate(pin, creatPos.position, pin.transform.rotation);
}
} - 控制针的移动
-
public class PinMove : MonoBehaviour {
private bool isFly = false;
///速度
public int speed = 3;
///准备发射位置
private Transform startPos;
//移动到的位置
private Transform Circle;
//确切移动的位置
private Vector3 sureTarget;
//分数
private Text ScoreText;void Start () {
//获取位置
startPos = GameObject.Find("StartPos").transform;
Circle = GameObject.Find("Circle").transform;
//确切移动到的位置
sureTarget = new Vector3(Circle.position.x, Circle.position.y - 1.55f, Circle.position.z);
ScoreText = GameObject.Find("Canvas").transform.Find("Score").GetComponent<Text>();
}
void FixedUpdate()
{
GamePinMove();
}
//针的移动
private void GamePinMove()
{
//如果游戏在进行中
if (!GameManger.isOver)
{
if (!isFly)
{
///移动到目标位置
transform.position = Vector3.MoveTowards(transform.position, startPos.position, speed * Time.deltaTime);
//因为差值 让其判断一下移动
if (Vector3.Distance(transform.position, startPos.position) < 0.05f)
{
//将其归位到移动位置
transform.position = startPos.position;}
//当点击后切换状态
if (Input.GetMouseButtonDown(0))
{
isFly = true;
}
}
else
{
//第二段移动
transform.position = Vector3.MoveTowards(transform.position, sureTarget, speed * Time.deltaTime);
//同上
if (Vector3.Distance(transform.position, sureTarget) < 0.05f)
{
//将位置放好
transform.position = sureTarget;
//将其重置为转盘的子物体
transform.SetParent(Circle);
//分数增加
ScoreText.text = (int.Parse(ScoreText.text) + 1).ToString();
//将脚本关闭
this.enabled = false;
}
}
}
}
} - 处理游戏结束
-
public class PinHandle : MonoBehaviour {
//控制动画结束的速度
public float speed = 0.5f;//对分数与移动进行控制
///用触发检测来判断游戏是否结束
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "PinHandle")
{
GameManger.isOver = true;
StartCoroutine("GameOver");
}
}
//使用协程执行当游戏结束时的逻辑
IEnumerator GameOver()
{
while(true)
{
//通过控制主相机的背景颜色与视角缩放来进行游戏的结束动画
Camera.main.backgroundColor = Color.Lerp(Camera.main.backgroundColor, Color.red, speed * Time.deltaTime);
Camera.main.orthographicSize = Mathf.Lerp(Camera.main.orthographicSize, 4, speed * Time.deltaTime);
//判断动画是否结束
if (Mathf.Abs(Camera.main.orthographicSize - 4) < 0.05f)
{
break;
}
yield return 0;
}
//等待动画结束重新开始游戏
yield return new WaitForSeconds(0.2f);
SceneManager.LoadScene("Main");
GameManger.isOver = false;
}
} - 最后说一下这只是用来熟悉一下的项目 代码写的感觉很差,等到4月多会有一个大型的RPG项目更新,用来做自己的毕业设计
- 这里是贴工程的地方链接:https://pan.baidu.com/s/1ifwobzgQ0eqHKDyAeMIxZQ
提取码:i7vo
相关文章: