Unity实现见缝插针小游戏

 更新时间:2020年04月16日 17:05:51   作者:菠萝小笨笨  
这篇文章主要为大家详细介绍了Unity实现见缝插针小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Unity实现见缝插针游戏的具体代码,供大家参考,具体内容如下

控制小球旋转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateSelf : MonoBehaviour {
  //每秒旋转90度
  public float speed = 90;

  // Update is called once per frame
  void Update () {
   //绕Z轴顺针旋转
    transform.Rotate(new Vector3(0, 0, -speed * Time.deltaTime));
  }
}

针头碰撞检测

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PinHead : MonoBehaviour {

  private void OnTriggerEnter2D(Collider2D collision)
  {
    if (collision.tag == "PinHead")
    {
      GameObject.Find("GameManager").GetComponent<GameManager>().GameOver();
    }
  }
}

控制针的运动位置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pin : MonoBehaviour {

  public float speed = 5;
  private bool isFly = false;
  private bool isReach = false;
  private Transform startPoint;
  private Vector3 targetCirclePos;
  private Transform circle;

  // Use this for initialization
  void Start () {
    startPoint = GameObject.Find("StartPoint").transform;
    circle = GameObject.FindGameObjectWithTag("Circle").transform;
    targetCirclePos = circle.position;
    targetCirclePos.y -= 1.55f;
  }

  // Update is called once per frame
  void Update () {
    if (isFly == false)
    {
      if (isReach == false)
      {
        transform.position = Vector3.MoveTowards(transform.position, startPoint.position, speed * Time.deltaTime);
        if (Vector3.Distance(transform.position, startPoint.position) < 0.05f)
        {
          isReach = true;
        }
      }
    }
    else
    {
      transform.position = Vector3.MoveTowards(transform.position, targetCirclePos, speed * Time.deltaTime);
      if(Vector3.Distance( transform.position,targetCirclePos) < 0.05f)
      {
        transform.position = targetCirclePos;
        transform.parent = circle;
        isFly = false;
      }
    }
  }

  public void StartFly()
  {
    isFly = true;
    isReach = true;
  }
}

游戏管理

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {

  private Transform startPoint;
  private Transform spawnPoint;
  private Pin currentPin;
  private bool isGameOver = false;
  private int score = 0;
  private Camera mainCamera;
  public Text scoreText;
  public GameObject pinPrefab;
  public float speed = 3;

  // Use this for initialization
  void Start () {
    startPoint = GameObject.Find("StartPoint").transform;
    spawnPoint = GameObject.Find("SpawnPoint").transform;
    mainCamera = Camera.main;
    SpawnPin();
  }

  private void Update()
  {
    if (isGameOver) return;
    if (Input.GetMouseButtonDown(0))
    {
      score++;
      scoreText.text = score.ToString();
      currentPin.StartFly();
      SpawnPin();
    }
  }

  void SpawnPin()
  {
     //针的实例化
    currentPin = GameObject.Instantiate(pinPrefab, spawnPoint.position, pinPrefab.transform.rotation).GetComponent<Pin>();
  }

  public void GameOver()
  {
    if (isGameOver) return;
    GameObject.Find("Circle").GetComponent<RotateSelf>().enabled = false;
    StartCoroutine(GameOverAnimation());
    isGameOver = true;
  }

  IEnumerator GameOverAnimation()
  {
    while (true)
    {
      mainCamera.backgroundColor = Color.Lerp(mainCamera.backgroundColor, Color.red, speed * Time.deltaTime);
      mainCamera.orthographicSize = Mathf.Lerp(mainCamera.orthographicSize, 4, speed * Time.deltaTime);
      if( Mathf.Abs( mainCamera.orthographicSize-4 )<0.01f)
      {
        break;
      }
      yield return 0;
    }
    yield return new WaitForSeconds(0.2f);
    //重新加载场景
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
  }
}

游戏初始状态和运行结果

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • c#实现网站监控查看是否正常示例

    c#实现网站监控查看是否正常示例

    这篇文章主要介绍了使用c#监控网站是否正常的功能示例,大家参考使用吧
    2014-01-01
  • WPF中引入WindowsForms控件的方法

    WPF中引入WindowsForms控件的方法

    这篇文章主要介绍了WPF中引入WindowsForms控件的方法,结合实例形式分析了在WPF中调用Windows Forms控件的具体步骤与相关实现技巧,需要的朋友可以参考下
    2016-07-07
  • C#操作非持久化内存映射文件详解

    C#操作非持久化内存映射文件详解

    多个进程之间,通过操作未映射到磁盘上现有文件的内存映射文件,可以实现数据共享和类似进程间通讯的功能,下面我们就来学习一下C#如何操作非持久化内存映射文件的吧
    2023-12-12
  • Unity实现大转盘的简单笔记

    Unity实现大转盘的简单笔记

    这篇文章主要为大家分享了Unity实现大转盘的简单笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#操作SQLite数据库方法小结

    C#操作SQLite数据库方法小结

    这篇文章介绍了C#操作SQLite数据库的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#手动操作DataGridView使用各种数据源填充表格实例

    C#手动操作DataGridView使用各种数据源填充表格实例

    本文主要介绍了C#手动操作DataGridView使用各种数据源填充表格实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 基于C#实现简单的二维码和条形码的生成工具

    基于C#实现简单的二维码和条形码的生成工具

    这篇文章主要为大家详细介绍了如何基于C#实现简单的二维码和条形码工具,用于二维码条形码的生成与识别,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C#获取视频某一帧的缩略图的方法

    C#获取视频某一帧的缩略图的方法

    这篇文章主要介绍了C#获取视频某一帧的缩略图的方法,涉及执行CMD命令及针对视频文件操作的技巧,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • C# WinForm实现自动更新程序的方法详解

    C# WinForm实现自动更新程序的方法详解

    这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Winform实现调用asp.net数据接口实例

    Winform实现调用asp.net数据接口实例

    这篇文章主要介绍了Winform实现调用asp.net数据接口的方法,以实例的形式讲述了数据接口及反射辨别响应的实现方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10

最新评论