Unity学习(三)

吐槽

今天是暑假学校的第一天唉,,,学习方面效率蛮低的,专心程度不够,要好好训练自己这方面的内容了。

协程

协程方法—调用协程方法时候,不会等协程方法完才结束
自身可以暂停的
协同程序的特点
1、协程在中断指令(YieldInstruction)产生时暂停执行
2、协程一暂停执行便立即返回 //中断协程后返回主函数,暂停结束后继续执行协程剩余的函数。
3、中断指令完成后从中断指令的下一行继续执行
4、同一时刻、一个脚本实例中可以有多个暂停的协程,但只有一个运行着的协程
5、函数体全部执行完后,协程结束
6、协程可以很好的控制跨越一定帧数后执行的行为
7、协程在性能上、相比于一般函数几乎没有更多的开销
Unity协程长的有点像线程,但却不是线程.因为协程仍然是在主线程中执行,且在使用时不用考虑同步与锁的问题.协程只是控制代码等到特定的时机后再执行后续步骤.1
1创建一个协程函数

 IEnumerator methodName(Object parameter1,Object parameter2,...){
        // to do something
        yield return YieldInstruction/other/null;
        // to do something else
    }

注意:
协同函数的返回值的类型必须是Coroutine,Coroutine继承与Yieldinstruction。
所以协同程序的返回类型就只能是null,等待的时间,等待的帧数。。由此可见WWW 也是实现了Coroutine的~

2启动协程:
/形式一
StartCoroutine(CustomCorutineFn());
StartCoroutine(CustomCorutineFn(7));//向方法中传递参数
//形式二
StartCoroutine(“CustomCorutineFn”);
StartCoroutine(“CustomCorutineFn”,7);//向方法中传递参数
1、StartCoroutine(IEnumerator routine);
优点:灵活,性能开销小。
缺点:无法单独的停止这个协程,如果需要停止这个协程只能等待协同程序运行完毕或则使用StopAllCoroutine();方法。
2、StartCoroutine (methodName:string, value : object = null);
优点:可以直接通过传入协同程序的方法名来停止这个协程:StopCoroutine(string methodName);
缺点:性能的开销较大,只能传递一个参数。

3停止协同程序
1、StopCoroutine(string methodName);
2、StopAllCoroutine();
3、设置gameobject的active为false时可以终止协同程序,但是再次设置为true后协程不会再启动。

eg

调用的时候:StartCoroutine(changeColor());

//协程方法Coroutines
    //1返回值IEnumerator
    //2 返回参数是yield return null;
    //3 调用StartCoroutinr
    IEnumerator changeColor()
    {
        print("hhhhhhh3");
        cube.GetComponent<MeshRenderer>().material.color = Color.red;

        print("hhhhhhh4");
        yield return null;
    }

使用Coroutine实现颜色动画渐变

yield return new WaitForSeconds(3);//暂停三秒

跟鼠标相关事件函数OnMouseXXX讲解

这里写图片描述

onmouseover和onmouseout 鼠标指针移动到或离开元素时触发脚本
onmousedown和onmouseup 鼠标按钮被按下或松开时触发脚本
onclick和ondbclick 鼠标单击和双击时触发脚本
onmousemover 鼠标指针移动时触发脚本

Mathf里面的静态常量

A collection of common math functions.
1Deg2Rad 度数变为弧度的
Degrees-to-radians conversion constant (Read Only).
2Rad2Deg 弧度变为度数的
Radians-to-degrees conversion constant (Read Only).
3Epsilon 很小的小数
A tiny floating point value (Read Only).
4Infinity 无限大的数
A representation of positive infinity (Read Only).
5NegativeInfinity
A representation of negative infinity (Read Only).

Mathf的主要的方法

Mathf.Abs绝对值
计算并返回指定参数 f 绝对值

Mathf.Clamp限制
static function Clamp (value : float, min :float, max : float) : float
限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
static function Clamp (value : int, min :int, max : int) : int
限制value的值在min和max之间,并返回value。

Mathf.DeltaAngle增量角 最小夹角
static function DeltaAngle (current :float, target : float) : float
计算给定的两个角之间最短的差异。
// Prints 90
Debug.Log(Mathf.DeltaAngle(1080,90));

Mathf.Exp指数
static function Exp (power : float) : float
返回 e 的 power 次方的值。

Mathf.Lerp插值
static function Lerp (from : float, to :float, t : float) : float
基于浮点数t返回a到b之间的插值,t限制在0~1之间。
当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。

Mathf.MoveTowards移向
static function MoveTowards (current :float, target : float, maxDelta : float) : float
改变一个当前值向目标值靠近。
这实际上和 Mathf.Lerp相同,而是该函数将确保我们的速度不会超过maxDelta。maxDelta为负值将目标从推离。

Mathf.PingPong乒乓
static function PingPong (t : float, length: float) : float
0到length之间往返。t值永远不会大于length的值,也永远不会小于0。
The returned value will move back and forthbetween 0 and length.
返回值将在0和length之间来回移动。

差值运算

Lerp 可以看成是一种进度
Lerp(a,b,c);
这里,并不一定需要
Lerp(min,max ,c);
并不一定需要 从小到大,
可以将 a 看成是起点,
b 看成是终点,
c 看成是一个进度的 百分比,
100% 就是 1, 50% 就是 0.5 , 30% 就是 0.3 。
可以看成是 坐火车,
从 北京坐车 到 山东,
也可以从 山东 坐车到 北京。
假如,从北京 坐车到 山东 一共是花 100分钟,
那么,可能 北京发车后,经过 20分钟,到达了天津,
那么,从山东坐车,发车后,80分钟,很可能也是到达 天津。
就像每天 攒钱 10块钱,
十天 就攒 100块,
如果有100块, 每天花 10块,
那么,也是十天 花完,
Mathf Lerp 的含义就是,从 某一个值,到某一个值的过渡,根据这个百分比,
我们就可以得到一个 进度值。
可以是 逐渐增大的,也可以是 逐渐 减小的。

Input类输入类(按键、按键、触摸相关检测)

1Input里面的GetKeyXXX的使用
GetKey :Returns true while the user holds down the key identified by name.
GetKeyDown :Returns true during the frame the user starts pressing down the key identified by name.
GetKeyUp :Returns true during the frame the user releases the key identified by name.
GetKey:用户长按按键有效;
GetKeyDown:用户按下按键时有效;
GetKeyUp:用户抬起按键时有效;

2anyKey,anyKeyDown
anyKey用于监听用户的任意按键输入或鼠标点击,事件触发后返回true。anyKeyDown:当任意按键松开时返回true。

3GetButton(string buttonName) //虚拟的按键
GetButton用于监听Button的输入,参数为自己指定的button的名字,在Unity中可以使用管理器添加或修改Input参数。unity已经为用户预设了多种输入情况,在button中预设了Fire、Jump等输入情况。用户也可以自行修改,打开Edit–>Project Settings–>Input可以看到预设

鼠标的输入
mousePosition
Input.mousePosition返回当前鼠标的位置,这里指的是距离原点的像素位置,说明一下,Unity中的原点(0,0)位置为左下角,上位y轴正方向,右为x轴正方向。返回值类型为Vector3。
GetMouseButton ()里面是0.,1,2
GetMouseButton 对应的键处于按下状态时返回true
GetMouseButtonDown 对应的键被按下时返回true
GetMouseButtonUp 对应的键弹起时返回true
参数为int型,含义为:0左键,1右键,2中键。

<think>首先,用户的问题是:“我想学习Unity游戏开发 请问Unity 游戏开发 学习资源 入门指南”。这翻译成英文是“I want to learn Unity game development. Could you please provide Unity game development learning resources and an introductory guide?” 根据系统级指令: - 所有行内数学表达式必须使用$...$格式,但在这个上下文中,可能没有数学表达式,因为主题是Unity游戏开发,而不是数学。所以,我应该避免不必要的数学格式。 - 独立公式必须使用$$...$$格式并单独成段,但同样,这里可能不需要。 - LaTeX语法正确:确保任何数学部分正确,但这里可能不适用。 - 使用中文回答:所有回答必须用中文。 - 生成相关问题:在回答结束后,添加一个“相关问题”部分。 - 回答中引用的段落末尾自然地添加引用标识:例如[^1]。系统提供了几个引用: - 引用[1]: Unity 学习资源:Unity3D 游戏开发入门指南。... [^1] - 引用[2]: 本文提供了一份完整的 Unity 游戏开发入门指南... [^2] - 引用[3]: Unity 入门指南:开启你的游戏开发之旅... [^3] - 引用[4]: Unity是一个跨平台的游戏开发工具... [^4] 这些引用是关于Unity学习资源的,所以我需要在回答中自然地引用它们。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考站内引用:指令说“请尽可能多的参考用户上一次的问题和你的回答”,但这是用户的第一次问题,所以没有上一次问题。指令说“上述引用仅供参考”,但它们是相关的,所以我应该使用它们。 用户的问题是关于Unity游戏开发的学习资源和入门指南,所以我需要提供有用的信息。 结构化回答: 1. **引言**:确认用户的问题,并简要介绍Unity游戏开发的重要性。 2. **逐步指南**:提供一个清晰的、逐步的学习路径。参考提供的引用来构建。 - 例如,从引用[2]:包括安装Unity、界面介绍、创建项目、编写脚本、添加组件等。 - 从引用[1]:提到官方文档、视频教程、社区等。 3. **具体资源**:列出学习资源,如官方文档、教程、社区等。引用提供的引用。 4. **结束语**:鼓励用户。 然后,添加“相关问题”部分。 确保引用标识:在相关段落末尾添加[^1]、[^2]等。 例如: - 在提到官方文档时,添加引用标识。 最终,生成相关问题。 大纲回答: - **步骤1: 介绍Unity游戏开发** - 简要说明Unity是什么,为什么学习它。参考引用[3]和[4]。 - **步骤2: 学习路径** - 安装Unity:参考引用[2]。 - 熟悉界面:参考引用[2]。 - 创建第一个项目:参考引用[2]。 - 学习C#脚本:参考引用[2]。 - 添加组件和物理:参考引用[2]。 - 创建简单游戏:参考引用[2]。 - **步骤3: 推荐学习资源** - 官方文档:引用[1]。 - 视频教程:如Unity Learn或YouTube。 - 社区:如Unity论坛。 - 开源项目:分析学习。 - **步骤4: 入门指南总结** - 强调实践的重要性。 然后,相关问题: 1. 如何安装Unity? 2. Unity中C#脚本的基础是什么? 3. 如何创建一个简单的2D游戏? 确保语言是中文。</think>### Unity 游戏开发学习资源与入门指南 您好!欢迎开始您的 Unity 游戏开发之旅。Unity 是一款强大的跨平台游戏引擎,广泛应用于 2D/3D 游戏、VR/AR 和交互式应用开发。它提供了直观的工具和庞大的社区支持,非常适合初学者入门[^3]。以下我将基于可靠资源,为您提供一个结构化的学习路径和推荐资源清单。整个过程分为个阶段:准备阶段、基础学习阶段和进阶实践阶段,帮助您逐步掌握核心技能。参考内容主要来自 Unity 官方指南和社区经验[^1][^2][^4]。 #### 步骤 1: 准备阶段(安装与设置) 在开始学习前,您需要准备好开发环境。这是入门的关键第一步,确保后续学习顺利进行。 - **下载并安装 Unity Hub**: Unity Hub 是管理 Unity 版本和项目的工具。访问 [Unity 官网](https://unity.com/) 下载安装程序,选择最新稳定版本(如 Unity 2022 LTS)。安装时,建议勾选“Visual Studio”作为默认代码编辑器,因为它集成调试功能,方便编写 C# 脚本[^2]。 提示:安装过程约需 10-30 分钟,取决于网络速度。遇到问题可参考官方安装教程[^1]。 - **创建第一个项目**: 打开 Unity Hub,点击“新建项目”,选择模板(如“2D Core”或“3D Core”)。命名项目后,Unity 会自动加载主界面。熟悉界面面板(如“场景视图”、“层级窗口”和“检查器面板”)是基础,这些工具让您拖拽对象、调整属性[^2]。 示例:尝试创建一个简单场景,添加一个“Cube”对象,并调整其位置和大小。这能帮助您快速上手界面操作[^3]。 #### 步骤 2: 基础学习阶段(核心概念与脚本) 掌握 Unity 的基本操作和编程是核心。本阶段重点学习界面、脚本编写和简单交互,建议每天投入 1-2 小时实践。 - **熟悉 Unity 界面与对象管理**: Unity 主界面包括多个面板:“场景视图”用于编辑游戏世界,“游戏视图”预览运行效果,“项目窗口”管理资源文件。学习如何导入资源(如图片或模型),并通过“层级窗口”组织游戏对象[^2]。参考官方入门视频,这些资源通常免费且步骤清晰[^1]。 - **学习 C# 脚本基础**: Unity 使用 C# 语言控制游戏逻辑。初学者可从简单脚本开始: - 创建脚本:在“项目窗口”右键新建 C# 脚本(如“PlayerController”)。 - 基础代码示例:实现对象移动。以下是一个简单脚本,让玩家通过键盘控制角色: ```csharp using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 5.0f; // 移动速度 void Update() { float moveHorizontal = Input.GetAxis("Horizontal"); // 获取水平输入 float moveVertical = Input.GetAxis("Vertical"); // 获取垂直输入 Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); transform.Translate(movement * speed * Time.deltaTime); // 移动对象 } } ``` 将此脚本附加到游戏对象(如“Player”),运行后即可用方向键移动角色。这演示了输入处理和物理运动的基本原理[^2][^4]。 - **添加组件与物理效果**: Unity 的组件系统让您轻松添加功能。例如: - 为对象添加“Rigidbody”组件实现重力效果。 - 使用“Collider”组件(如 Box Collider)处理碰撞检测。 实践:创建一个球体对象,添加 Rigidbody,然后编写脚本使其在碰撞时弹起。这能帮助您理解物理引擎的工作原理[^2]。 #### 步骤 3: 进阶实践阶段(项目开发与资源利用) 通过小项目巩固知识,并利用社区资源加速学习。目标是独立创建一个简单游戏。 - **创建第一个小游戏**: 参考入门指南,构建一个简单 2D 游戏(如躲避障碍物游戏): 1. 设计玩家角色和敌人(使用 Sprite 对象)。 2. 添加脚本控制玩家移动和敌人行为(如自动移动)。 3. 实现得分系统:当玩家收集物品时,更新 UI 文本。 4. 测试并优化:使用 Unity 的调试工具修复问题。 完整教程可参考 Unity Learn 平台的“2D 游戏入门”课程,它提供分步指导[^2][^3]。 - **推荐学习资源清单** 以下资源来自官方和社区,已验证可靠且适合初学者: - **官方文档与教程**: [Unity 手册](https://docs.unity3d.com/Manual/index.html) 覆盖所有基础概念,是权威参考。同时,[Unity Learn](https://learn.unity.com/) 提供免费互动课程(如“创建您的第一个游戏”),结合视频和实操项目[^1][^3]。 - **视频教程**: YouTube 频道如 Brackeys(经典入门系列)或 Unity 官方频道,讲解脚本编写和项目构建。例如,观看“Unity 入门指南”系列视频,能快速掌握界面操作[^1][^2]。 - **社区与论坛**: 加入 [Unity 论坛](https://forum.unity.com/) 或 Reddit 的 r/Unity3D,提问和分享经验。分析开源项目(如 GitHub 上的简单游戏源码),学习最佳实践[^1][^4]。 - **书籍与在线课程**: 《Unity 游戏开发入门》(中文版)适合系统学习。平台如 Udemy 或 Coursera 提供结构化课程(如“Unity 认证程序员”路径),但注意选择评价高的资源[^2][^3]。 #### 总结与鼓励 通过以上步骤,您可以从零开始掌握 Unity 开发:先安装设置,再学习脚本和组件,最后通过小项目实践。关键是多动手——尝试每天编写代码或修改场景。Unity 社区庞大,遇到问题时别犹豫,积极利用论坛或教程[^1][^3]。记住,每个开发者都是从“Hello World”开始的,坚持下去,您一定能开发出自己的第一个游戏![^4] 如果您有具体问题(如某个步骤的细节),随时告诉我,我会进一步解释。 ### 相关问题 1. Unity 安装过程中常见问题如何解决? 2. 如何用 Unity 创建一个简单的 3D 游戏场景? 3. Unity 中 C# 脚本的调试技巧有哪些? 4. 有哪些适合初学者的 Unity 2D 游戏项目示例? [^1]: Unity 学习资源:Unity3D 游戏开发入门指南。以上是一些学习 Unity3D 的资源和示例代码。通过阅读官方文档、观看视频教程、参与社区和分析开源项目,您可以逐步掌握 Unity3D 的基础知识和开发技巧。祝您在 Unity3D 的学习和游戏开发中取得成功! [^2]: 本文提供了一份完整的 Unity 游戏开发入门指南,适合新手学习。内容包括:介绍 Unity 及其应用领域;详细的安装步骤;讲解 Unity 主界面的各个面板和基本操作;如何创建和管理项目;使用 C# 编写简单脚本;创建场景并添加和配置游戏对象;添加常见组件如 Rigidbody 和 Collider 以实现物理效果;处理用户输入实现对象移动;逐步指导创建一个简单的 2D 游戏,包括玩家控制、敌人行为和得分系统;最后教你如何构建并发布游戏,以及推荐的进一步学习资源。通过本指南,读者可以系统地掌握 Unity 的基础知识和开发流程,从而成功开发自己的第一个游戏项目。 [^3]: Unity 入门指南:开启你的游戏开发之旅。Unity 不仅仅是一个游戏引擎,它更是一个强大的跨平台开发环境,让你能够创造出 2D、3D、VR/AR 以及各种交互式体验。无论你是编程新手还是经验丰富的开发者,Unity 都提供了直观的工具和庞大的社区支持,助你将创意变为现实。这份指南将带你迈出 Unity 世界的第一步。 [^4]: Unity是一个跨平台的游戏开发工具,其灵活性和强大的功能为开发斗地主游戏提供了便利。通过使用Unity,开发者能够轻松实现游戏的2D或3D渲染,网络同步,以及复杂的交互逻辑。 1.3 开发前的准备工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值