教程相关资源 | Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip |
1.3.1 游戏设计
小知识按住 Ctrl 键拖曳物体的作用按住 Ctrl 键拖曳物体会让其以一个固定值移动(可以在Edit→Snap Settings 中修改这个固定值),调整物体的旋转和缩放时也是同理。这个功能在搭建场景时可以很方便地对齐物体的位置,特别是当物体为同一规格大小时。 Unity 中还有很多类似的很方便的快捷键,在用到时会介绍。
1.3.2 功能实现
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 章会详细说明。
1.3.3 游戏机制
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; // 暂停游戏
}
}
}
1.3.4 完成和完善游戏
小提示场景摄像机不会影响实际游戏画面场景摄像机指的是在 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);
}
教程相关资源 | Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip |
文章来源地址https://www.toymoban.com/news/detail-831614.html
文章来源:https://www.toymoban.com/news/detail-831614.html
到了这里,关于Unity 3D游戏开发+脚本编程完整指南:制作第一个游戏:3D滚球跑酷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!