赞
踩
小知识按住 Ctrl 键拖曳物体的作用按住 Ctrl 键拖曳物体会让其以一个固定值移动(可以在Edit→Snap Settings 中修改这个固定值),调整物体的旋转和缩放时也是同理。这个功能在搭建场景时可以很方便地对齐物体的位置,特别是当物体为同一规格大小时。 Unity 中还有很多类似的很方便的快捷键,在用到时会介绍。
- public class Player : MonoBehaviour
- {
- public float speed;
- public float turnSpeed;
-
- void Update()
- {
- float x = Input.GetAxis("Horizontal");
- transform.Translate(x * turnSpeed * Time.deltaTime, 0, speed * Time.deltaTime);
- }
- }
小提示Unity 中的父子关系父子关系是 Unity 中相当重要的一个概念,此处可以不用深究,在第 2 章会详细说明。
- public class Barrier : MonoBehaviour
- {
- private void OnTriggerEnter(Collider other)
- {
- // 防止其他物体与障碍物的碰撞被检测,我们只需要障碍物与小球的碰撞被检测到
- if (other.name == "Player")
- {
- Time.timeScale = 0;
- }
- }
- }
小知识什么是预制体? Time.timeScale 是什么?预制体简单来说就是一个事先定义好的游戏物体,之后可以在游戏中反复使用。最简单的创建预制体的方法是直接将场景内的物体拖曳到 Project 窗口中,这时在 Hierarchy (层级)窗口中所有与预制体关联的物体名称都会以蓝色显示(普通物体的名称是黑色)。关于预制体的内容会在第 2 章详细说明。Time.timeScale 表示游戏的运行时间倍率,设置为 0 即表示游戏里的时间停滞, 1 即正常的时间流逝速度, 2 即两倍于正常的时间流逝速度,以此类推。
- void Update()
- {
- // 省略的代码部分用省略号表示……
-
- // 一旦小球位置超出了跑道的范围则直接下落
- if (transform.position.x < -4 || transform.position.x > 4)
- {
- transform.Translate(0, -10 * Time.deltaTime, 0);
- }
-
- // 下落一定距离之后游戏结束
- if (transform.position.y < -20)
- {
- Time.timeScale = 0;
- }
- }
- using UnityEngine.SceneManagement;
-
- public class Player : MonoBehaviour
- {
- // 省略的代码部分用省略号表示……
-
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.R))
- {
- SceneManager.LoadScene(0); // 重新加载场景
- Time.timeScale = 1; // 恢复正常的时间流速
- return;
- }
-
- // 省略的代码部分用省略号表示……
- }
- }
小提示注意添加头部引用SceneManager 这个类型是属于UnityEngine.SceneManagement 的,因此要添加头部引用后才能调用 SceneManager.LoadScene(0) 方法。这里参数 0 表示场景的序号,由于游戏现在只有一个场景,因此表示加载当前场景。
- public class End : MonoBehaviour
- {
- private void OnTriggerEnter(Collider other)
- {
- if (other.name == "Player")
- {
- Debug.Log("过关");
- Time.timeScale = 0; // 暂停游戏
- }
- }
- }
小提示场景摄像机不会影响实际游戏画面场景摄像机指的是在 Scene (场景视窗)里的、仅在编辑模式可用的摄像机。 Hierarchy 窗口中的摄像机决定在Game 窗口里看到的实际游戏画面。注意不要将两者混淆。
小知识只是创建了 Panel ,为什么自动添加了其他东西?当直接创建任何 UI 下的组件时都会自动生成 Canvas 与EventSystem 组件,这两个组件分别与 UI 的布局和交互相关,暂时不做深究。完整的 UI 系统会在后续章节介绍。
- public class End : MonoBehaviour
- {
- // 声明一个物体变量
- GameObject endUI;
-
- private void Start()
- {
- // 通过物体在场景中的名字来找到这个物体
- endUI = GameObject.Find("EndUI");
- // 在场景中隐藏这个物体
- endUI.SetActive(false);
- }
-
- private void OnTriggerEnter(Collider other)
- {
- if (other.name == "Player")
- {
- Debug.Log("过关");
- // 在场景中显示这个物体
- endUI.SetActive(true);
- Time.timeScale = 0; // 暂停游戏
- }
- }
- }
- void Update()
- {
- // 省略的代码部分用省略号表示……
-
- Transform c = Camera.main.transform;
- Quaternion cur = c.rotation;
- Quaternion target = cur * Quaternion.Euler(0, 0, x * 1.5f);
- Camera.main.transform.rotation = Quaternion.Slerp(cur, target, 0.5f);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。