前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity开发入门-环境安装及素材导入

Unity开发入门-环境安装及素材导入

作者头像
码客说
发布2023-07-24 15:39:28
3280
发布2023-07-24 15:39:28
举报
文章被收录于专栏:码客码客

前言

官方文档

https://docs.unity3d.com/cn/current/Manual/Input.html

素材商店

https://assetstore.unity.com/?category=2d&orderBy=4

下载

https://unity.cn/releases/full/2022

image-20230715180902195
image-20230715180902195

建议两个都下载,当然可以下载Hub后,在Hub中安装Editor。

这里为什么建议两个都下载,是因为

  • 只下载Editor的话,启动的时候会报授权问题。
  • 下载Hub安装后,从Hub中下载Editor的话,会下载失败。

所以建议两个都安装后在Hub中指定Editor的位置。

Visual Studio安装开发环境

image-20230715183946176
image-20230715183946176

开发工具

开发工具可以使用

  • Visual Studio + ReSahrper
  • VSCode + CodeGeeX
  • JetBrains Rider + CodeGeeX

我最终选择的是 JetBrains Rider + CodeGeeX

原因如下

  • Visual Studio 添加 ReSahrper插件后很好用,但是启动很慢,并且无法自动对生命周期方法自动提示。
  • VSCode + CodeGeeX整体体验还可以,但是没有支持C#的类似于IDEA中的var快捷添加定义的方式。
  • JetBrains Rider本身的代码提醒加上CodeGeeX的AI智能完成,使用起来很方便。

使用VSCode

默认编辑器是Visual Studio,个人感觉也是更智能的开发工具,

但是如果电脑配置差的话,推荐VSCode作为代码编辑器

VSCode安装C#插件

image-20230718225202064
image-20230718225202064

安装插件后,在设置中取消下面这个的勾选

image-20230718225648468
image-20230718225648468

Window > PackManager >安装vscode编辑器插件

image-20230718224229057
image-20230718224229057

安装后设置编辑器

Edit > Preferences > External Tools > 选择vscode作为项目编辑器

然后点Scipt Editor并选中你安装的vscode的exe

常用对象

以下是一些常见Unity对象的作用和常用属性的简要说明:

  1. GameObject(游戏对象):游戏中的基本构建块,用于表示场景中的实体。 常用属性包括transform(变换组件)、name(名称)、activeSelf(是否激活)等。 物体销毁的时候参数要传这个对象。
  2. Transform(变换):用于控制游戏对象的位置、旋转和缩放等变换属性。 常用属性包括position(位置)、rotation(旋转)、localScale(缩放)等。
  3. Rigidbody(刚体):为游戏对象添加物理属性,使其受到重力、力和碰撞等物理影响。 常用属性包括mass(质量)、drag(阻力)、velocity(速度)、angularVelocity(角速度)等。
  4. Collider(碰撞器):用于检测游戏对象之间的碰撞和触发事件。 常见的碰撞器类型有BoxColliderSphereColliderCapsuleCollider等。 常用属性包括isTrigger(是否为触发器)、center(中心位置)、size(大小)等。
  5. Animator(动画控制器):用于创建和管理动画,实现角色和物体的动态效果。 常用属性包括runtimeAnimatorController(运行时动画控制器)、speed(动画播放速度)等。
  6. AudioSource(音频源):用于播放音效和音乐。常用属性包括clip(音频剪辑)、volume(音量)、loop(是否循环)等。
  7. Particle System(粒子系统):用于创建各种视觉效果,如火焰、爆炸和烟雾等。一些常见的属性包括startSize(起始大小)、startColor(起始颜色)、startSpeed(起始速度)等。
  8. UI Elements(用户界面元素):用于创建游戏界面和用户交互的元素。常见的属性包括text(文本内容)、color(颜色)、onClick(点击事件)等。

生命周期方法

在Unity中,MonoBehaviour是所有脚本的基类,它提供了一系列的生命周期方法,用于在游戏运行过程中管理脚本的行为和状态。以下是一些常用的MonoBehaviour生命周期方法:

  1. Awake():当脚本创建实例时调用,用于初始化脚本和变量。通常用于获取组件引用或设置初始数值。
  2. Start():在脚本实例创建完成后的第一帧调用,用于进行一次性的初始化操作。通常用于设置游戏对象的初始状态。
  3. Update():在每一帧进行更新时调用,用于处理游戏逻辑。这是最常用的生命周期方法之一,用于实时更新游戏对象的行为。
  4. FixedUpdate():在固定时间步长内进行更新,用于处理物理相关的逻辑。与Update()不同,FixedUpdate()的调用频率是固定的,不受帧率的影响。
  5. LateUpdate():在所有Update()方法执行完毕后调用,通常用于在Update()之后进行一些相机跟随或其他对象调整的操作。
  6. OnEnable():当脚本组件被启用时调用,通常在脚本被激活时进行一些初始化操作。
  7. OnDisable():当脚本组件被禁用时调用,通常在脚本被停用时进行一些清理操作。
  8. OnDestroy():当脚本实例被销毁时调用,通常在脚本被销毁时进行一些资源释放或清理操作。

这些生命周期方法可以让你在适当的时机执行相关的代码逻辑,实现游戏对象的行为和状态的控制。你可以根据具体的需求,在这些方法中编写对应的代码来实现你的游戏逻辑。

精灵图切割

image-20230718235612604
image-20230718235612604

一般我们的精灵图都是一组动作的图片

我们要设置切割模式为Multiple

另外如果我们的图片是像素风格Wrap ModeFilter Mode按上图配置才不会变模糊。

查找子物体

在Unity中,有几种方式可以查找子物体。以下是常用的几种方式:

  1. Transform.Find:使用Transform.Find方法可以按照层级路径查找子物体。这种方法是最直接的方式,但是只能按照完整的层级路径进行查找,无法进行模糊查找。
代码语言:javascript
复制
Transform child = transform.Find("Parent/Child");

var bullet = transform.Find("Bullet");
bullet.gameObject.SetActive(true);
  1. Transform.GetChild:使用Transform.GetChild方法可以按照索引查找子物体。这种方式通过索引来访问每一个子物体,索引从0开始,按照子物体在层级中的顺序进行访问。
代码语言:javascript
复制
Transform child = transform.GetChild(0);
  1. GetComponentsInChildren:使用GetComponentsInChildren方法可以获取指定组件类型的所有子物体。它会在当前物体以及其所有子物体中进行递归搜索,并返回符合条件的组件。
代码语言:javascript
复制
Rigidbody[] rigidbodies = GetComponentsInChildren<Rigidbody>();
  1. GetComponentInChildren:使用GetComponentInChildren方法可以获取指定组件类型的第一个子物体。它会在当前物体以及其所有子物体中进行递归搜索,并返回找到的第一个符合条件的组件。
代码语言:javascript
复制
Rigidbody rigidbody = GetComponentInChildren<Rigidbody>();

关于性能的比较,Transform.FindTransform.GetChild的性能通常会比GetComponentsInChildrenGetComponentInChildren高。因为前者只需要按照路径或索引查找,而后者需要做更复杂的递归搜索。所以,如果你能通过路径或索引直接找到子物体,那么使用Transform.FindTransform.GetChild会更高效。但是,性能差距可能在实际使用中并不明显,因此建议根据具体的需求选择适当的查找方法。

按键

旧方式

使用 Input 类的 GetKey/GetKeyDown/GetKeyUp 方法

例如:

代码语言:javascript
复制
void Update() {
  if(Input.GetKeyDown(KeyCode.Space)) {
    // 按空格键时的处理
  }
}

使用 Input 类的 GetButton/GetButtonDown/GetButtonUp 方法需要先在输入管理器中定义按钮名称

然后像 GetKey 一样使用:

移动

代码语言:javascript
复制
float moveX = Input.GetAxisRaw("Horizontal");
float moveY = Input.GetAxisRaw("Vertical");

设计

代码语言:javascript
复制
if(Input.GetButtonDown("Fire1")) {
  // 按下定义的 Fire1 按钮时的处理 
}

在 Edit => Project Settings => Input Manager 我们能看到所有的事件名称

使用新输入系统(Input System)

Unity 的新输入系统(Input System)与旧的 Input 方法相比有以下一些优点:

  1. 更灵活的事件响应机制 Input System 不仅可以检测简单的按下/抬起事件,还可以检测按键持续时间、多次点击等复杂事件。
  2. 支持各种输入设备 Input System 可以处理键盘、游戏手柄、触摸屏等各种输入设备,而不仅限于键盘鼠标。
  3. 输入绑定机制 可以通过输入绑定将输入动作映射到不同按键或按钮,而不需要硬编码按键代码。
  4. 多个输入设备支持 一个游戏可以同时处理多个键盘或游戏手柄的输入。
  5. 原生 C# 代码 Input System 是用原生C#实现,没有封装抽象层,性能更高。
  6. 可编程和可扩展 可以通过代码完全自定义输入和事件处理逻辑。
  7. 按需分配资源 只需要为当前需要的设备分配资源,优化内存占用。
  8. 多线程支持 输入检测和事件分发可以多线程进行,提高性能。 总之,Input System 对 Unity 输入管理进行了重构,提供了更灵活、完善和高性能的输入支持。

物理组件

Rigidbody 2D组件:包含重力、摩擦力等

Box Collider 2D组件:包含碰撞(相互作用力)。调整碰撞体积的大小,在Box Collider 2D组件中的Editor Collider中调整(主角只需要下半身发生碰撞,更贴近真实。)。此外还可以使用适应物理形状的多边形碰撞组件Polygon Collider 2D

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 下载
  • 开发工具
    • 使用VSCode
    • 常用对象
    • 生命周期方法
    • 精灵图切割
    • 查找子物体
    • 按键
      • 旧方式
        • 使用新输入系统(Input System)
        • 物理组件
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档