[Unity 学习] Unity 入门学习及第一个游戏

跟着教程做的一个小游戏,基本上说就算我这样的零基础,两个小时就能实现。

主要就是熟悉一下 C#和 Unity,做一个能跑的东西。

简单的 Demo 如下:

Unity 学习记录 01 - Delivery Driver

Unity 相关

Unity 理论知识

Unity 实现的是组件化开发,所有的东西概念上来说都是组件,这个教程里面学到的 功能/组件 有:

  • Sprite

    Sprite 是 Unity 中“起作用”的物体,新建方式如下:

    在 Hierarchy 上空白页面右键,选择新建 2D Object > Sprites 就能够新建一个 Sprite。

  • Main Camera

    视角在的地方。

  • Assets

    资源存储的地方,本地的资源有:

    界面上的车、道路、场景都是从 Assets 中拉出去,随后旋转、缩小、放大组成的场景,完整的场景如下:

    每一个资源被拖拽到页面上后就成了一个独立的组件。

  • Components

    • Collider 2D

      这个属性给组件添加了可碰撞性,如视频中,撞到房子、树上时会产生碰撞,但是不会穿过去。

    • Rigid Body

      我的理解是给物体添加“质量”。如果房子和树上添加了 Rigid Body 属性,那么车撞上房子或树,房子/树和车都会弹出。

      我的理解就是,如果组件不添加 Rigid Body,这个组件相当于是一个质量很大的物体,例如说人推房子,房子不会动,但是人推人,两个人都会动。

    • C# 脚本

      Unity 中 C#脚本也是组件,可以挂载到 Sprite 上执行。

本期常用 Unity 快捷键

  • q

    光标会变成一个手的模样,这个时候可以拖拽页面进行重定位

    按下 alt 键也能产生同样的效果

  • w

    选中 Sprite 时按 w 键可以移动 Sprite

  • e

    旋转 Sprite,可以三维旋转

  • r

    变更 Sprite 的比例

  • ctrl + d

    复制 Sprite

C# 相关

这个项目中实际要写的 C# 脚本不到一百行,其他都是在 Unity 上使用拖拽功能后,Unity 自己生成的。

C# 类的结构

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ClassName : MonoBehaviour
{private void Start(){}private void Update(){}
}

这基本上就是在 Unity 中创建脚本时给出的模板。

MonoBehaviour 是 Unity 提供的基类,所有 Unity 的脚本都需要继承。

原文:

MonoBehaviour is the base class from which every Unity script derives.

Start 是当游戏开始时触发的脚本。

Update 方法内的代码,每一帧都会被调用并且重新进行计算。

完整的脚本

项目中所有用到的脚本。

Delivery.cs

这个脚本挂载在 Car 上,主要控制的内容为捡取和交付物品,并且当车捡取物品时车辆会变色,放下物品是车辆颜色还原。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Delivery : MonoBehaviour
{bool hasPackage = false;// SerializeField 使得该变量可以在Unity引擎中直接被看到和修改[SerializeField] Color32 hasPackageColor = new Color32(255, 0, 0, 255);[SerializeField] Color32 noPackageColor = new Color32(255, 255, 255, 255);[SerializeField] float destroyDelay = 0.5f;SpriteRenderer spriteRenderer;private void Start(){spriteRenderer = GetComponent<SpriteRenderer>();}private void OnCollisionEnter2D(Collision2D other){Debug.Log("collided");}private void OnTriggerEnter2D(Collider2D other){// if (the thing we triggered is package)if (other.tag == "Package" && !this.hasPackage){Debug.Log("Package hitted");hasPackage = true;Destroy(other.gameObject, destroyDelay);spriteRenderer.color = hasPackageColor;}else if (other.tag == "Customer" && this.hasPackage){Debug.Log("Customer Delivered");hasPackage = false;spriteRenderer.color = noPackageColor;}}
}

Driver.cs

这个脚本挂载在 Car 上,控制车辆的加速和减速。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Driver : MonoBehaviour
{[SerializeField] float steerSpeed = 300f;[SerializeField] float moveSpeed = 10f;[SerializeField] float slowSpeed = 5f;[SerializeField] float fastSpeed = 20f;// Update is called once per framevoid Update(){float steerAmount = Input.GetAxis("Horizontal") * steerSpeed * Time.deltaTime;float moveAmount = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;transform.Rotate(0, 0, -steerAmount);transform.Translate(0, moveAmount, 0);}private void OnCollisionEnter2D(Collision2D other) {moveSpeed = slowSpeed;}private void OnTriggerEnter2D(Collider2D other) {if (other.tag == "Boost") {moveSpeed = fastSpeed;}}
}

FollowCamera.cs

这个脚本挂载在 Main Camera 上,使得视角可以跟随车辆进行。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FollowCamera : MonoBehaviour
{[SerializeField] GameObject car;// camera's position should be car's positionvoid Update(){transform.position = car.transform.position + new Vector3(0, 0, -10);}
}

[Unity 学习] Unity 入门学习及第一个游戏相关推荐

  1. 【Java学习】JDK安装及第一个java程序

    一直听说Java是C++的升级和优化,却一直没用过,今天来简单学习一下. JDK安装及第一个java程序 一.JDK安装 二.第一个java程序 三.系统环境变量配置 一.JDK安装 JDK(Java ...

  2. java入门学习_Java入门学习进阶知识点

    Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...

  3. arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践

    0.前言 StarryFun:Unity游戏开发--关于单例模式的理解​zhuanlan.zhihu.com 之前一篇文章讲了单例模式的简单理解,自知其中有很多不严谨的地方,由于本萌新也是在学习阶段, ...

  4. C++桌面应用开发(Qt学习)--Qt简介及第一个Qt程序

    Qt简介 历史: 1991 奇趣科技 优点:跨平台:接口简单,易上手:简化了内存管理操作 成功案例:Linux桌面环境:WPS:谷歌地图等 创建一个Qt程序 点击创建项目后,选择项目路径以及给项目起名 ...

  5. Mybatis入门概述及第一个Mybatis实例实现增删改查

    林炳文Evankaka原创作品.转自https://blog.csdn.net/Evankaka/article/details/45647401 一.简介 1.什么是MyBatis MyBatis ...

  6. Servlet入门总结及第一个Servlet程序

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 S ...

  7. 【Flask】flask入门以及第一个flask项目的创建

    一.Flask介绍 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三 ...

  8. Node.js入门以及第一个helloworld程序.

    1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...

  9. 深度学习和TensorFlow学习资源(书籍、文档和视频)

    自己学习机器学习有一段时间了,有了一定基础,学习下深度学习和TensorFlow 汇总下找到的比较好看学习资源,也方便看 深度学习 理论篇–视频 吴恩达教授的视频 网易云课堂吴恩达deeplearni ...

最新文章

  1. 守护进程(setsid、getpgrp、setpgid、getpgid)以及系统日志(openlog、syslog、closelog)...
  2. java 安装多版本_一台电脑安装多个版本的jdk
  3. 算法--微软面试:整数的二进制表示中1的个数(Java实现)
  4. Jenkins持续集成环境之凭证管理
  5. 【Python】skimage模块
  6. Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
  7. could not find curses mysql_​-- Configuring incomplete-- Could NOT find Curses
  8. 数字化转型知识方法系列之三:以价值效益为导向推进数字化转型的五大重点任务
  9. 简记模态对话框和非模态对话框
  10. 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
  11. NeurIPS | 谷歌使用机器学习如何做好分布外异常检测
  12. EMC创建出《星际旅行》全息甲板,并利用其模拟数据中心
  13. Atitit 安全登录退出管理法v3 tbb.docx 目录 1.1. 未持有效出入边界票据。。校验票据有效性 1 1.2. 从事与票据种类不符的活动的 2 1.3. 数据为数字的应该校验数字 2
  14. LinuxStudyNote(6)-Linux常用命令(2)-文件处理命令(1)-目录处理命令ls、所有者所属组其他人、文件权限、i节点
  15. iPadPro看电影之MKV转MP4视频格式教程
  16. 思科交换机创建子接口
  17. 基于润和3516 dv300开发板,运行鸿蒙3.1 ArkUI helloworld
  18. MySQL创建用户并授权、删除用户(密码规则)
  19. Cisco anyconnect 连接成功浏览器无法访问任何网页
  20. Anaconda安装踩雷+解决Anaconda Navigator打不开

热门文章

  1. Python日常小技巧(持续更新中)
  2. 现代电子计算机音乐制作,现代电子音乐制作利器——Alesis VI61 MIDI键盘
  3. Unity 骨骼动画模型变形
  4. 【Docker容器安装、配置、部署】
  5. pytorch教程(1.5)——梯度自动计算
  6. oracle java.sql.SQLException: ORA-00911: 无效字符和ORA-01017: invalid username/password; logon denied
  7. 使用 @mention 功能构建 React 评论表单
  8. DWA动态窗口法的原理及应用
  9. 小白算法积累——单链表6#带头结点单链表+递增有序
  10. 吉林大学算法设计与分析考前突击