请选择 进入手机版 | 继续访问电脑版

【全栈游戏开发】时间、分数和其他

[复制链接]
查看: 166|回复: 0
  • TA的每日心情
    擦汗
    2019-6-2 01:56
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    1002

    主题

    1103

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    65281

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-4-20 13:13:41 | 显示全部楼层 |阅读模式
    最新动态:
    һ һ
    【全栈游戏开发】时间、分数和其他



    1.创建文本框。在Hierachy面板内创建两个3DText,其中一个重命名为“Time”,使其成为MainCamera的子物体,另一个重名为“Score”,我们将用他们现实游戏的时间,


    2.时间管理,游戏结束。在GameControl脚本中定义TimeLabel,共有变量时间和分数。在update函数里不断改变Text显示的时间值,当游戏时间小于0,调用游戏结束函数。
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;

    4. public class GameControl : MonoBehaviour {

    5.     public GameObject Gophers;
    6.     public int PosX, PosY;


    7.     public TextMesh timeLabel;
    8.     public float time = 30.0f;
    9.     public int score = 0;



    10.     /// <summary>
    11.     /// 设定一个地洞类,存储地洞的坐标以及是否出现的布尔值
    12.     /// </summary>
    13.     public class Hole
    14.     {

    15.         public bool isAppear;
    16.         public int HoleX;
    17.         public int HoleY;

    18.     }

    19.     public Hole[] holes;


    20.     /// <summary>
    21.     /// Awake函数实际上比Start函数调用的更早
    22.     /// 在场景初始化的时候,将每个洞口的坐标值存入一维数组中,并将每一个洞口的isAppear值设定为false
    23.     /// (-2,0) (0,0) (2,0)
    24.     /// (-2,-1)(0,-1)(2,-1)
    25.     /// (-2,-2)(0,-2)(2,-2)
    26.     /// </summary>
    27.     void Awake()
    28.     {

    29.         PosX = -2;
    30.         PosY = -2;
    31.         holes = new Hole[9];
    32.         for (int i = 0; i < 3; i++)
    33.         {
    34.             for (int j = 0; j < 3; j++)
    35.             {
    36.                 holes[i * 3 + j] = new Hole();
    37.                 holes[i * 3 + j].HoleX = PosX;
    38.                 holes[i * 3 + j].HoleY = PosY;
    39.                 holes[i * 3 + j].isAppear = false;

    40.                 PosY++;
    41.             }
    42.             PosY = -2;
    43.             PosX = PosX + 2;
    44.         }
    45.     }
    46.     /// <summary>
    47.     /// 在游戏场景开始后延时调用canAppear函数,从第0秒开始,每隔十秒调用一次
    48.     /// </summary>
    49.     void Start()
    50.     {

    51.         InvokeRepeating("CanAppear", 0, 10);

    52.     }

    53.     /// <summary>
    54.     /// 游戏时间控制
    55.     /// </summary>
    56.     void Update()
    57.     {

    58.         //时间以秒的速度减少,并在timeLabel里显示当前剩余时间(一位小数)
    59.         time -= Time.deltaTime;
    60.         //timeLabel.text = "Time: " + time.ToString("F1");

    61.         //当时间耗尽,调用GameOver函数
    62.         if (time < 0)
    63.         {
    64.             GameOver();
    65.         }

    66.     }

    67.     /// <summary>
    68.     /// 从第0秒开始调用函数,每隔1秒调用一次
    69.     /// </summary>
    70.     public void CanAppear()
    71.     {

    72.         InvokeRepeating("Appear", 0, 1);

    73.     }

    74.     /// <summary>
    75.     /// 地鼠生成函数
    76.     /// </summary>
    77.     public void Appear()
    78.     {
    79.         //当前地洞可以生成地鼠的条件: isAppear = false         
    80.         //随机生成i值选择洞口,直到符合条件的洞口被选中
    81.         int i = Random.Range(0, 9);
    82.         while (holes[i].isAppear == true)
    83.         {
    84.             i = Random.Range(0, 9);
    85.         }
    86.         //debug只是用来打印当前的坐标,便于观察,并不会影响游戏运行(可写可不写)
    87.         Debug.Log(holes[i].HoleX + "," + holes[i].HoleY);

    88.         //选定洞口以后,在洞口的坐标上生成地鼠,传递洞口id,将当前洞口的isAppear值改为true
    89.         Instantiate(Gophers, new Vector3(holes[i].HoleX, holes[i].HoleY + 0.4F, -0.1F), Quaternion.identity);
    90.        // Gophers.GetComponent<Done_Gophers>().id = i;
    91.         holes[i].isAppear = true;


    92.     }

    93.     /// <summary>
    94.     /// 游戏结束函数
    95.     /// </summary>
    96.     void GameOver()
    97.     {
    98.         time = 0;
    99.         timeLabel.text = "Time: 0";

    100.         //将所有延时调用函数全部取消
    101.         CancelInvoke();

    102.         Debug.Log("game over");
    103.     }
    104. }
    复制代码


    3. 在unity界面添加  如图:time text


    4. 设置分数:
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;

    4. public class Gophers : MonoBehaviour {

    5.     public GameObject beaten;

    6.     public int id;

    7.     /// <summary>
    8.     /// 地鼠出现后,如果未被点击,将在三秒后自动销毁,将相应洞口的isAppear值设置为false
    9.     /// </summary>
    10.         void Update()
    11.     {

    12.         Destroy(this.gameObject, 3.0f);
    13.        FindObjectOfType<Done_GameControl>().holes[id].isAppear = false;
    14.     }

    15.     /// <summary>
    16.     /// 鼠标点击
    17.     /// </summary>
    18.     void OnMouseDown()
    19.     {
    20.         Debug.Log("点击");

    21.         //在相同的位置生成一个被击打图像的地鼠
    22.         GameObject g;
    23.         g = Instantiate(beaten, gameObject.transform.position, Quaternion.identity);
    24.         g.GetComponent<Done_Beaten>().id = id;

    25.         //增加分数
    26.         FindObjectOfType<Done_GameControl>().score += 1;
    27.        int scores = FindObjectOfType<Done_GameControl>().score;
    28.         GameObject.Find("Score").gameObject.GetComponent<TextMesh>().text = "Score: " + scores.ToString();

    29.         FindObjectOfType<>().text = score.ToString();
    30.         GetComponentInChildren<TextMesh>().text = score.ToString();
    31.         scoreLabel.text = "Score: " + score;

    32.         //在0.1s后摧毁当前生成的地鼠
    33.         Destroy(this.gameObject, 0.1f);

    34.     }
    35. }
    复制代码


    5. 重新开始按钮,创建一个按钮,将按钮上的Text值改为Restart,坐标和大小修改 如图:


    6. 按钮脚本。给Button绑定一个Restart脚本。
    1. using UnityEngine;
    2. using UnityEditor.SceneManagement;

    3. /// <summary>
    4. /// 重新开始函数
    5. /// </summary>
    6. public class Restart : MonoBehaviour {
    7.     /// <summary>
    8.     /// 按钮被点击以后,重新调用游戏场景
    9.     /// </summary>
    10.     public void OnMouseDown() {
    11.         Debug.Log("restart");
    12.         EditorSceneManager.LoadScene("Done_mole");
    13.     }
    14. }
    复制代码
    7.添加方法。脚本添加完成后,选择Button,在Inspector面板Button下找到On Click()部分,点击“+”号,选择对象为“Button”,

    至此我们单机打地鼠就完成,剩下的就是联机操作了。



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    帖子的最近访客


    ByteEdu声明 1、欢迎大家加入ByteEdu交流群: 群①:221273219 群②:816865824 群③:552042911 群④:713828896
    2、本站所有主题由该帖子作者发表,该帖子作者与 ByteEdu 享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
    4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    5、ByteEdu -服务您的独立游戏开发专家!
    6、联系人Email:admin@ByteEdu.com 网址:www.ByteEdu.Com

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩推荐

    专业教育平台

    • 反馈建议:service@ByteEdu.com
    • 工作时间:周一到周五 10:00-19:00
    028-8555 6107

    关注我们

    Copyright   ©2018-2020  www.ByteEdu.Com  Powered by©ByteEdu!  技术支持:成都贝游特教育科技有限公司    ( 蜀ICP备18026143号 )