[Unity 学习] Unity 入门学习及第一个游戏
[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
键可以移动 Spritee
旋转 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 入门学习及第一个游戏相关推荐
- 【Java学习】JDK安装及第一个java程序
一直听说Java是C++的升级和优化,却一直没用过,今天来简单学习一下. JDK安装及第一个java程序 一.JDK安装 二.第一个java程序 三.系统环境变量配置 一.JDK安装 JDK(Java ...
- java入门学习_Java入门学习进阶知识点
Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...
- arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践
0.前言 StarryFun:Unity游戏开发--关于单例模式的理解zhuanlan.zhihu.com 之前一篇文章讲了单例模式的简单理解,自知其中有很多不严谨的地方,由于本萌新也是在学习阶段, ...
- C++桌面应用开发(Qt学习)--Qt简介及第一个Qt程序
Qt简介 历史: 1991 奇趣科技 优点:跨平台:接口简单,易上手:简化了内存管理操作 成功案例:Linux桌面环境:WPS:谷歌地图等 创建一个Qt程序 点击创建项目后,选择项目路径以及给项目起名 ...
- Mybatis入门概述及第一个Mybatis实例实现增删改查
林炳文Evankaka原创作品.转自https://blog.csdn.net/Evankaka/article/details/45647401 一.简介 1.什么是MyBatis MyBatis ...
- Servlet入门总结及第一个Servlet程序
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 S ...
- 【Flask】flask入门以及第一个flask项目的创建
一.Flask介绍 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三 ...
- Node.js入门以及第一个helloworld程序.
1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...
- 深度学习和TensorFlow学习资源(书籍、文档和视频)
自己学习机器学习有一段时间了,有了一定基础,学习下深度学习和TensorFlow 汇总下找到的比较好看学习资源,也方便看 深度学习 理论篇–视频 吴恩达教授的视频 网易云课堂吴恩达deeplearni ...
最新文章
- 守护进程(setsid、getpgrp、setpgid、getpgid)以及系统日志(openlog、syslog、closelog)...
- java 安装多版本_一台电脑安装多个版本的jdk
- 算法--微软面试:整数的二进制表示中1的个数(Java实现)
- Jenkins持续集成环境之凭证管理
- 【Python】skimage模块
- Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
- could not find curses mysql_​-- Configuring incomplete-- Could NOT find Curses
- 数字化转型知识方法系列之三:以价值效益为导向推进数字化转型的五大重点任务
- 简记模态对话框和非模态对话框
- 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
- NeurIPS | 谷歌使用机器学习如何做好分布外异常检测
- EMC创建出《星际旅行》全息甲板,并利用其模拟数据中心
- Atitit 安全登录退出管理法v3 tbb.docx 目录 1.1. 未持有效出入边界票据。。校验票据有效性	1 1.2. 从事与票据种类不符的活动的	2 1.3. 数据为数字的应该校验数字	2
- LinuxStudyNote(6)-Linux常用命令(2)-文件处理命令(1)-目录处理命令ls、所有者所属组其他人、文件权限、i节点
- iPadPro看电影之MKV转MP4视频格式教程
- 思科交换机创建子接口
- 基于润和3516 dv300开发板,运行鸿蒙3.1 ArkUI helloworld
- MySQL创建用户并授权、删除用户(密码规则)
- Cisco anyconnect 连接成功浏览器无法访问任何网页
- Anaconda安装踩雷+解决Anaconda Navigator打不开
热门文章
- Python日常小技巧(持续更新中)
- 现代电子计算机音乐制作,现代电子音乐制作利器——Alesis VI61 MIDI键盘
- Unity 骨骼动画模型变形
- 【Docker容器安装、配置、部署】
- pytorch教程(1.5)——梯度自动计算
- oracle java.sql.SQLException: ORA-00911: 无效字符和ORA-01017: invalid username/password; logon denied
- 使用 @mention 功能构建 React 评论表单
- DWA动态窗口法的原理及应用
- 小白算法积累——单链表6#带头结点单链表+递增有序
- 吉林大学算法设计与分析考前突击