《Unity3D脚本编程与游戏开发》学习Day one
Unity学习第一日
- 前言
- Unity介绍
- 游戏开发技术
- 技术实现与游戏设计
- 第一章 Unity脚本概览
- 1.1 控制物体的移动
- 1.1.1 新建脚本并挂载
- 1.1.2 Start 和 Updata 事件
- 1.1.3 修改物体位置
- 1.1.4 读取和处理输入
- 1.1.5 实例:实现一个移动的小球
- 1.2 触发器事件
- 1.2.1 创建触发器
- 1.2.2 触发器事件函数
- 1.2.2 实例:吃金币
前言
Unity 是实时3D互动内容创作和运营平台。
使用Unity前我们需要先了解这个游戏引擎。
Unity官网
Unity介绍
使用Unity开发的软件:
原神
王者荣耀
明日方舟
使命召唤手游
炉石传说百度百科
Unity 用户手册
游戏开发技术
- 游戏设计 (游戏的灵魂)
- 美术制作 (游戏的外表)
- 技术实现 (游戏的骨骼和血肉)
技术实现与游戏设计
游戏技术与游戏设计互相促进:技术为设计带来可能性的空间,设计指导者技术的发展方向。
第一章 Unity脚本概览
本章主在让读者体会脚本编程的思路和整体方法。
1.1 控制物体的移动
本节将详细讲解创建脚本、改变物体位置、处理用户输入等基本操作。
1.1.1 新建脚本并挂载
- 脚本的创建
- 方法一:
在Project(工程)窗口某个文件夹中,单机鼠标右键选择:Create->C# Script选项。 - 方法二:
先新建一个球体,即在Hierarchy窗口,单机鼠标右键选择:3D object->Sphere选项。
然后选中球体,在Insperctor(检视)窗口单击:Add Component(添加组件)按钮,在菜单中选择:New script (新建脚本)选项,输入脚本文件名单击:Create and Add(创建并添加)。
- 方法一:
- 脚本的挂载
- 方法一:
拖拽脚本到场景中的球体上。 - 方法二:
拖拽脚本到Inspector窗口中项目的最后面。(推荐使用)
- 方法一:
- 脚本组件的删除
在组件名称上单击鼠标右键,选择:Remove Component(删除组件)。 - 注意事项
Unity 规定:能够挂载到物体上的脚本文件必须是“脚本组件”,脚本组件要继承自MonoBehaviour,且脚本代码中的class名称必须与文件名一致。(因此在修改脚本文件名时,必须同时修改class名称)。
Unity 支持一个物体挂载多个同样的脚本组件。
1.1.2 Start 和 Updata 事件
- 双击脚本文件打开脚本,目前脚本中的内容是自动生成的,包括:
using UnityEngine(使用UnityEngine这个命名空间)
Start(函数)
Update(函数) - Start和Update函数
Start函数在游戏开始运行依次,适合进行组件初始化。
Update函数每帧都会执行,根据系统资源情况,帧率可能实时变化,因此Update的执行频率(每秒执行次数)是变化的。
Start和Update又被称为“事件”,因为它们分别是在“组件开始运行”和“更新该组件”这两个事件发生时被调用的。 - Debug.Log函数
作用:向Console(控制台)窗口输出一串信息。
用处:写代码、调试代码,是最简单、最可靠的一种调试手段。 - Time类
Time.time:显示游戏运行时间。
Time.deltaTime:表示从上一帧到当前帧时间,时间增量。
Time.timeScale函数(时间缩放:默认值为1,游戏的暂停为0,游戏的快进可为2)。
Time类详解
1.1.3 修改物体位置
- 在Unity 中,修改物体位置实际上就是修改Transform(变换)组件的数据。
- Inspector窗口展示了组件的位置(Position)、旋转(Rotation)、缩放(Scale)参数。
- 在界面上可以修改的内容一定可以在脚本中修改,但在脚本中修改的内容不一定能在节目中修改,因为脚本的功能比界面展示的功能要多得多。
- 修改Transform组件中的Position的两种常用方法:
- 使用Translate()函数。
即:tansform.Translate(x,y,z)。其中x、y、z为float类型量,若为常量要加上后缀f表示float类型,否则C# 认为其为double类型。如 3.12为double类型,3.12f为float类型。 (代码写于脚本函数中) - 直接指定新的位置
即:tansform.position = new Vector3(x,y,z)。 - 上述两种方法的区别:Translate函数默认为局部坐标系,而修改position的方法是世界坐标系。
- 使用Translate()函数。
- 类型转换
int可以隐式转换为float,所以x、y、z如果没有小数位可以不加f后缀,但int转float精度会降低(题外话)。
类型转换 - 位置移动代码
void Update(){tansform.Translate(0,0,0.1f);tansform.position += new Vector3(0,0,0.1f); }
- 游戏设计注意事项
由于系统繁忙时无法保证稳定的帧率,因此对于上述代码,会导致小球的移动速度和帧率成正比。
是“每帧移动距离相同”还是“每秒移动距离相同”呢?这需要根据游戏设计来确定,大多情况下是”每秒移动距离相同“,因此移动的距离应该针对帧率去确定,”每秒移动距离相同“的代码如下。void Update(){tansform.Translate(0,0,5*Time.deltaTime);tansform.position += new Vector3(0,0,5*Time.deltaTime); }
代码中5表示速度,上述代码的改进原理基于:距离 = 速度 ✖ 时间 。两帧画面之间的变化基于两帧之间间隔的时间Time.deltaTime。要记住Updata函数是每帧执行。
1.1.4 读取和处理输入
- Unity 支持的输入设备
如:键盘⌨、鼠标《Unity3D脚本编程与游戏开发》学习Day one相关推荐
- 《Unity3d脚本编程 使用C#语言开发跨平台游戏》读书笔记1
1.4脚本编程的优势 ·易于学习,代码维护方便,适合快速开发 ·开发成本低(因易于学习,所以可以启用新人,同时开发速度快,这些都是降低成本的方法) 2.2.1以速度作为衡量语言级别的标准,那么语言从低 ...
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
在Unity中,所有实体都属于游戏对象(GameObject),比如外部导入到场景中的模型,Unity自带的立方体等等,而要将这些GameOject进行管理,交互等操作,则需要用到脚本来实现,上一节我 ...
- 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)
游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...
- Unity 创建2D平台游戏开发学习教程
了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...
- 游戏开发学习路线图(2023最新版)建议收藏
游戏开发是一个高度技术化的领域,需要掌握编程语言和编程技能.你可以从学习基本的编程概念和语法开始,如C++.C#.Python等常用的游戏编程语言.掌握编程的基础知识是游戏开发的基石.很多小伙伴不知道 ...
- 从零开始丨使用Unity3D进行VIVE VR游戏开发
从零开始丨使用Unity3D进行VIVE VR游戏开发 SteamVR插件的导入 使用Unity3D进行VR游戏的开发,首先需要具备以下条件 1 拥有一台显卡不低于GTX960性能的主机 2 拥有一部 ...
- 基于Unity3D的AR小游戏开发【100011412】
本科毕业设计(论文) GRADUATION DESIGN(THESIS) 基于 Unity3D 的增强现实游戏程序 摘要 增强现实(AR)作为一项新兴技术近年来被越来越多的人群所获知,AR 也渐渐走进 ...
- C#和Unity编码和游戏开发学习教程
MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:110节课(26小时25分钟)|大小解压后:18.6 ...
- 小狐狸横版游戏开发学习笔记(上)
小狐狸横版游戏开发学习笔记(上) 目录 小狐狸横版游戏开发学习笔记(上) 1.关于如何创建Tilemap 2.关于地图格子之间出现间隙的问题 3.如何设置自己想要的控制按键 4.如何解决玩家移动过程中 ...
最新文章
- shell 排序函数
- B端设计指南-表格设计的常见问题
- Springboot文件上传提示:failed to convert java.lang.String to org.springframework.util.unit.DataSize
- Gradle task
- rxjs switchMap的实现原理
- linux之拷贝文件/备份文件;按照原来的权限和日期拷贝.
- “约见”面试官系列之常见面试题之第五十七篇之强制类型转换(建议收藏)
- java五子棋源代码_java 五子棋游戏源码
- ssh是什么_【科普】SSH都不懂,还搞什么网络
- 自定义ListView中的分割线
- python批量ping脚本_Python多线程批量Ping主机IP的脚本
- Go单元测试--模拟服务请求和接口返回
- border-box
- 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...
- JAVA 常见的类集之CollectionListQueue
- 极客大学架构师训练营 系统架构 一致性哈希 Consistent Hashing 第五次作业
- excel熵值法计算权重_由搜索权重排序引入的思考
- allegro 自定义快捷键
- 飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)RTI资料总结和分享
- 幻方加密代码——自动生成幻方密钥方法,罗伯法单偶数阶的解法代码基于python
热门文章
- CMMI、ISO、6sigma、ITIL软件质量管理体系了解
- 数据结构中数据元素与数据项的区别
- Eclipse 中Web项目如何引用Java项目源码调试的配置
- db2 9.5 linux,DB2 8.2 9.1 9.5 9.7 下载地址
- 目前3个最受欢迎的免费、开源文件加密软件评测
- svm多分类python代码_SVM算法的理解及其Python实现多分类和二分类
- SQL Server 时间、日期函数
- 新手起步:通达信怎么编写指标公式以及通达信公式的使用方法
- 常用圆圈数字序号(1~50)
- 用数字ic产生正弦波的仿真尝试。
- 《Unity3d脚本编程 使用C#语言开发跨平台游戏》读书笔记1