记录一下今天,自己的第一个小游戏完成了,心情很舒爽。非常非常简单的小游戏,下面梳理一下过程。
首先创建跑道,使用cube,拉长等等。然后创建小球sphere,小球即为玩家(player,积累单词)。再添加障碍物,在分别为其上色。
紧接着给小球添加脚本,让其能够受玩家控制
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using UnityEngine.SceneManagement;
5
6 public class Player : MonoBehaviour
7 {
8 //初始速度
9 public float speed = 10;
10 //初始转弯速度
11 public float turnSpeed = 4;
12
13 // Start is called before the first frame update
14 void Start()
15 {
16
17 }
18
19 // Update is called once per frame
20 void Update()
21 {
22 //按R键重玩,场景重置
23 if (Input.GetKeyDown(KeyCode.R)){
24 SceneManager.LoadScene(0);
25 Time.timeScale = 1;
26 //结束当前方法,防止一直掉下去
27 return;
28 }
29
30 //获取坐标
31 float x = Input.GetAxis("Horizontal");
32 //给物体一个变化,即x轴会有一个转弯速度,y轴不变,z轴也有一个速度
33 transform.Translate(x * turnSpeed * Time.deltaTime, 0, speed * Time.deltaTime);
34
35 //判断位置,如果在范围之外,则让它有其他的运转动作
36 if (transform.position.x < -4 || transform.position.x > 4)
37 transform.Translate(0, -10 * Time.deltaTime, 0);
38
39 //如果y轴小于-20,则停止
40 if (transform.position.y < -20)
41 Time.timeScale = 0;
42
43
44 }
45 }
给小球添加刚体组件rigidbody,使其与障碍物barrier发生碰撞,也要给障碍物添加触发器trigger,创建barrier脚本
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Barrier : MonoBehaviour
6 {
7 // Start is called before the first frame update
8 void Start()
9 {
10
11 }
12
13 private void OnTriggerEnter(Collider other)
14 {
15 //debug测试是否发生碰撞
16 Debug.Log(other.name + "碰到了我");
17 //如果和自己碰撞的物体名称是player就停止
18 if(other.name == "Player")
19 Time.timeScale = 0;
20
21 }
22 }
此时功能已经基本完成,在创建游戏通关完成UI,游戏开始时隐藏UI,触发是显示UI,创建一个物体将该脚本挂在上面,此物体放在小球跑道上。此物体也是触发器。
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Finish : MonoBehaviour
6 {
7 // Start is called before the first frame update
8 void Start()
9 {
10 GameObject canvas = GameObject.Find("Canvas");
11 canvas.transform.Find("Panel").gameObject.SetActive(false);
12 }
13
14 private void OnTriggerEnter(Collider other)
15 {
16 GameObject canvas = GameObject.Find("Canvas");
17 canvas.transform.Find("Panel").gameObject.SetActive(true);
18 }
19
20 }