Unity学习第二周

Unity学习第二周

我下面写的可能会有很多错误,请见谅,我会更加努力学习弥补这些错误,感谢!
这一期博客借鉴了很多人的博客,看了下外国网站,并不能看懂。。。。所以很多理解都来源于野路子嘿嘿

通过两个星期的学习,我对unity有了一定的了解,在课上我们通过新建游戏对象,然后修改它的属性,如transform可以调整游戏对象的位置、形状、大小。甚至可以多个游戏对象组成一个整体,成为预设等等。在接触了脚本的编写后,我深刻体会到了C#、JAVA等语言面向对象的好处,关于这几天遇到的问题提出以下简单的见解。

对象与资源

资源是硬盘中的文件,包含纹理,材质、场景、声音、预设、脚本等,而对象则是直接出现在游戏的场景中,是资源整合的具体实例。对象一般是以资源作为模板实例化成的,如unity自带案例中的赛车游戏,赛车、建筑物都是以实例化的对象存在于游戏场景,它们的模型、纹理等等都作为资源存在了Assets文件夹中。资源与对象是一种一对多的关系,一个资源可以被多个对象使用,一个对象可以涵盖多个资源。

MonoBehaviour

MonoBehaviour是所有行为对象的基类,没有public构造函数,只能由游戏对象创建。调度相关方法为:
这里写图片描述

由于unity采用离散仿真原理,每一秒都被分割成了很多个小的时间片,再一帧一帧地播放达到仿真的效果。为了确认不同事件何时执行,遇到冲突该先处理哪个事件,unity采用如图实现离散仿真系统:

这里写图片描述

我们可以逐一验证MonoBehaviour基本行为的触发条件

public class verification : MonoBehaviour // MonoBehaviour始终是基类
{
void Awake() {
Debug.Log(“This is Awake”);
}

void Start() {
Debug.Log(“This is Start”);
}

void Update() {
Debug.Log(“This is Update”);
}

void FixedUpdate() {
Debug.Log(“This is FixedUpdate”);
}

void LateUpdate() {
Debug.Log(“This is LateUpdate”);
} 

Void OnGUI() {     // 与Update有些类似,每次有gui事件的时候就会被触发,                      // 一帧可能会调用多次,用于渲染和处理GUI事件
Debug.Log(“This is OnGUI”);
}

void Reset() {      // 编辑器模式情况下点击reset按钮时调用,
                // 可以做调试的初始化工作
Debug.Log(“This is Reset”);
} 

void OnMouseOver() { // 当鼠标悬停在GUIElement或Collider上时调用
Debug.Log(“This is OnMouseOver”);
}

}

还有一大堆方法,具体可以看http://jiangyongyuan.iteye.com/blog/2116663

GameObject、Transform、Component

GameObject为实例化的游戏对象,包含了一个或以上的Component,Transform属于Component,且任何GameObject必然包含Transform组件。类关系图如下

这里写图片描述

管理一个场景的游戏对象树林

查找对象

首先要保证对象是active状态

1.通过对象名称

public static GameObject Find (string name)
传入的name可以是单个对象的名字,也可以是hierarchy中的一个路径名,若找到则返回该对象,否则为null

2.通过标签获取单个游戏对象

public static GameObject FindWithTag (string tag)
返回一个用tag做标识的活动的对象,否则null

3.通过标签获取多个游戏对象

public static GameObject[] FindGameObjectsWithTag (string tag)
返回一个用tag做标识的活动的游戏物体的列表,否则null

4.通过类型获取单个游戏对象

public static Object FindObjectOfType(Type type)
返回类型为type的活动的第一个游戏对象

5.通过类型获取多个游戏对象

public static Object FindObjectsOfType(Type type)
返回类型为type的所有的活动的游戏对象列表

添加子对象

public static GameObject CreatePrimitive(PrimitiveType type)

遍历对象树

unity中的GameObject是没有层次关系的,但是每个GameObject都有一个transform组件,这个组件实现了IEnumerable接口,从而支持计数器,因此可以使用循环遍历子物体

foreach(Transform child in transform)
{
Debug.Log(child.gameObject.name);
}
/* transform是所需要找的物体GameObject的Transform

·清除所有子对象
foreach(Transform child in transform)
{
Destroy(child.gameObject);
}

预设与克隆对象

当我们幸幸苦苦做出来一个超棒的人物模型的时候总是会感慨过程的艰难,这时候我们可以把这个模型作为预设以便以后使用,这样的人物模型,以后即可以修改成魔兽,也可以修改成天使、恶魔之类的造型,这样可以把我们做好的对象作为一个资源存储起来以便以后使用,预设就是这样的一个方便的模板。虽然预设也可以创造出对象,但是与对象克隆不同,对象克隆后,克隆体与本体之间就再无关联,简单来说,就是克隆体发生任何改变,本体都不会受到影响,而预设作为一个模板,当预设的属性发生改变时,场景中的任何一个由该预设创建出来的对象的属性都会发生相应的变化。因此,预设可以用于批量处理。

组合模式

是组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。以资源管理器为例,文件夹属于容器构件,因为它可以容纳其他文件或文件夹。文件相当于叶子结构,因为它不能再包含任何文件或文件夹。组合模式把文件和文件夹当成统一的一个对象来处理,可以让客户端可以统一的对待单个对象和组合对象。而实现这一点则是靠简单对象和复合对象拥有相同的接口。
组合模式包含三个内容:
1.Component(抽象构件):是所有叶子构件和容器构件的共同父类,里面声明了叶子构件和容器构件的所有方法。
2.Leaf(叶子构件):对于从父类中继承过来的容器构件的方法,由于它不能实现,可以抛出异常。
3.Composite(容器构件):主要处理从父类那里继承过来的容器构件的方法
组合模式使用面向对象思想实现树形结构的构建和处理,描述了如何将容器对象和叶子对象递归组合,实现简单高效的统一管理。由于在实际开发中树形结构用的非常多,所以组合模式也是应用特别广泛的一种设计模式。它的缺点是,在对文件或者文件夹进行操作时,无法对文件或文件夹进行精确控制。
我new了一个unity项目,创建了两个GameObject的空对象,组织结构为:
这里写图片描述

分别挂载了一个脚本

这里写图片描述

这里父类函数中的BroadcastMessage()函数会将所有子类中函数名为Test的方法都执行一遍。自然,结果如图:
这里写图片描述
接下来会推出我做的井字棋游戏或者计算器或者什么的。。。期待吗?先赶完其他作业在发。

<think>我们正在讨论Unity的零基础入门学习。根据用户需求,我们需要提供清晰的学习路径和资源推荐。根据引用[1][2][3]:提供了Unity官网和下载教程,建议使用LTS版本,并推荐了siki学院的课程资料。引用[4]:提供了一套系统的Unity学习路线。引用[5]:提到了一些UnityAPI的使用(如音频播放),但用户目前处于零基础阶段,暂时不需要深入API。因此,我们规划一个循序渐进的学习路径:1.环境搭建:下载安装UnityHub和Unity编辑器(推荐LTS版本),安装VS2019作为代码编辑器。2.基础知识:了解Unity界面、基本概念(游戏对象、组件、场景等)。3.脚本编程:学习C#基础,编写简单脚本控制游戏对象。4.项目实践:通过小项目(如RollABall)巩固知识。5.系统学习:按照学习路线逐步深入。具体步骤:第一步:环境搭建-访问Unity官网(中国用户建议使用unity.cn)下载UnityHub。-在UnityHub中安装一个UnityLTS版本(如2021LTS)。-安装VS2019(可在siki学院的课程资料中获取下载链接,避免版本兼容问题)。第二步:学习资源-官方教程:UnityLearn平台(https://learn.unity.com/)有免费入门课程。-推荐课程:siki学院的《Unity2021零基础入门学习教程-RollABall》(引用[1][2][3]均提到)。-中文教程:知乎专栏(https://zhuanlan.zhihu.com/p/433418045)提供Unity下载和安装指南。第三步:基础知识学习-界面:Scene视图、Game视图、Hierarchy、Project、Inspector等窗口。-概念:GameObject(游戏对象)、Component(组件)、Prefab(预制体)、Scene(场景)等。-操作:创建物体、添加组件(如Transform、Rigidbody、Collider等)、保存场景。第四步:C#编程基础-变量、条件语句、循环、函数、类。-Unity脚本生命周期(Awake,Start,Update等)。-常用API:Transform、GameObject、Input等类的使用。第五步:第一个项目-跟随RollABall教程创建一个小球控制游戏,学习:*创建基本3D物体*编写移动脚本(使用Input和Transform)*物理系统(Rigidbody、碰撞检测)*收集物品(触发检测)*创建UI显示分数第六步:扩展学习-2D游戏开发:精灵、瓦片地图、2D物理。-动画系统:Animator组件、状态机。-粒子系统:制作简单特效。-音频系统:AudioSource组件(引用[5]提到PlayOneShot方法,可在此阶段学习)。注意事项:-学习过程中多动手实践,尝试修改代码和参数观察效果。-遇到问题查阅Unity官方文档(https://docs.unity.cn/)或社区(如Unity中文论坛)。最后,学习是一个循序渐进的过程,不要急于求成,打好基础是关键。根据要求,生成相关问题:</think>### Unity零基础入门学习方法与教程推荐 #### 一、学习路径规划(循序渐进) 1. **环境搭建**(1-2天): - 安装Unity Hub:通过[Unity中国官网](https://unity.cn)下载安装器 - 选择**LTS长期支持版**(如2021.3 LTS)[^3] - 安装VS2019:推荐使用[siki学院《RollABall》课程资料包](https://zhuanlan.zhihu.com/p/433418045)中的版本[^1][^2] 2. **核心基础**(1-2周): ```mermaid graph LR A[界面认知] --> B[场景/游戏对象] B --> C[组件系统] C --> D[C#脚本编程] D --> E[物理系统] ``` - 必学概念:GameObject、Transform、Collider、Rigidbody、Prefab - 脚本基础:`Start()`/`Update()`生命周期、变量声明、Input控制 3. **实战项目**(推荐顺序): | 项目类型 | 推荐教程 | 技能目标 | |---|---|----| | 3D控制 | RollABall[^1] | 移动控制/碰撞检测 | | 2D平台 | Unity官方2D教程 | 精灵动画/瓦片地图 | | UI系统 | UGUI官方课程 | 界面交互/事件响应 | #### 二、高质量学习资源 1. **系统化教程**: - [Unity Learn平台](https://learn.unity.com):官方免费课程(需注册) - [siki学院《Unity2021零基础入门》](https://zhuanlan.zhihu.com/p/433418045):含完整项目实战[^1][^3] - [Unity从0到1系统学习路线](https://example.com/unity-roadmap):全面知识图谱(参考引用[^4]) 2. **文档与社区**: - 官方手册:[Unity User Manual](https://docs.unity3d.com/Manual) - 问题求解:[Unity中文论坛](https://forum.unity.cn) - 代码参考:[Unity API文档](https://docs.unity3d.com/ScriptReference) 3. **关键技巧**: - 调试技巧:`Debug.Log()`输出 + 控制台错误分析 - 版本管理:使用Git + .gitignore(避免库文件冲突) - 性能意识:早期关注`Stats`面板帧率指标 #### 三、高效学习建议 1. **开发习惯**: - 每天1小时编码(优于周末突击) - 每完成小功能即时测试 - 使用注释规范:`// 移动控制 v1.0 - 2023/08` 2. **避坑指南**: - 避免使用Beta版Unity(稳定性差)[^3] - 勿直接复制复杂项目(从核心功能拆解) - 数学基础弱时先补向量运算:$\vec{v} = (x,y,z)$ 3. **进阶衔接**: ```csharp // 音频播放示例(引用[^5]) void PlaySound(){ audioSource.PlayOneShot(audioClip); // 不打断当前音频的播放方式 } ``` 掌握此类API后,可深入[Unity Asset Store]研究插件机制 > **重要提示**:完成首个项目后,务必重构代码,尝试优化方案(如将魔法数字替换为常量)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值