官方文档
https://docs.unity3d.com/cn/current/Manual/Input.html
素材商店
https://assetstore.unity.com/?category=2d&orderBy=4
https://unity.cn/releases/full/2022
建议两个都下载,当然可以下载Hub后,在Hub中安装Editor。
这里为什么建议两个都下载,是因为
所以建议两个都安装后在Hub中指定Editor的位置。
Visual Studio安装开发环境
开发工具可以使用
我最终选择的是 JetBrains Rider + CodeGeeX
原因如下
Visual Studio
添加 ReSahrper
插件后很好用,但是启动很慢,并且无法自动对生命周期方法自动提示。VSCode + CodeGeeX
整体体验还可以,但是没有支持C#的类似于IDEA中的var
快捷添加定义的方式。JetBrains Rider
本身的代码提醒加上CodeGeeX
的AI智能完成,使用起来很方便。默认编辑器是Visual Studio,个人感觉也是更智能的开发工具,
但是如果电脑配置差的话,推荐VSCode作为代码编辑器
VSCode安装C#插件
安装插件后,在设置中取消下面这个的勾选
Window > PackManager >安装vscode编辑器插件
安装后设置编辑器
Edit > Preferences > External Tools > 选择vscode作为项目编辑器
然后点Scipt Editor并选中你安装的vscode的exe
以下是一些常见Unity对象的作用和常用属性的简要说明:
transform
(变换组件)、name
(名称)、activeSelf
(是否激活)等。
物体销毁的时候参数要传这个对象。position
(位置)、rotation
(旋转)、localScale
(缩放)等。mass
(质量)、drag
(阻力)、velocity
(速度)、angularVelocity
(角速度)等。BoxCollider
、SphereCollider
和CapsuleCollider
等。
常用属性包括isTrigger
(是否为触发器)、center
(中心位置)、size
(大小)等。runtimeAnimatorController
(运行时动画控制器)、speed
(动画播放速度)等。clip
(音频剪辑)、volume
(音量)、loop
(是否循环)等。startSize
(起始大小)、startColor
(起始颜色)、startSpeed
(起始速度)等。text
(文本内容)、color
(颜色)、onClick
(点击事件)等。在Unity中,MonoBehaviour是所有脚本的基类,它提供了一系列的生命周期方法,用于在游戏运行过程中管理脚本的行为和状态。以下是一些常用的MonoBehaviour生命周期方法:
这些生命周期方法可以让你在适当的时机执行相关的代码逻辑,实现游戏对象的行为和状态的控制。你可以根据具体的需求,在这些方法中编写对应的代码来实现你的游戏逻辑。
一般我们的精灵图都是一组动作的图片
我们要设置切割模式为Multiple
另外如果我们的图片是像素风格
的 Wrap Mode
和Filter Mode
按上图配置才不会变模糊。
在Unity中,有几种方式可以查找子物体。以下是常用的几种方式:
Transform.Find
方法可以按照层级路径查找子物体。这种方法是最直接的方式,但是只能按照完整的层级路径进行查找,无法进行模糊查找。Transform child = transform.Find("Parent/Child");
var bullet = transform.Find("Bullet");
bullet.gameObject.SetActive(true);
Transform.GetChild
方法可以按照索引查找子物体。这种方式通过索引来访问每一个子物体,索引从0开始,按照子物体在层级中的顺序进行访问。Transform child = transform.GetChild(0);
GetComponentsInChildren
方法可以获取指定组件类型的所有子物体。它会在当前物体以及其所有子物体中进行递归搜索,并返回符合条件的组件。Rigidbody[] rigidbodies = GetComponentsInChildren<Rigidbody>();
GetComponentInChildren
方法可以获取指定组件类型的第一个子物体。它会在当前物体以及其所有子物体中进行递归搜索,并返回找到的第一个符合条件的组件。Rigidbody rigidbody = GetComponentInChildren<Rigidbody>();
关于性能的比较,Transform.Find
和Transform.GetChild
的性能通常会比GetComponentsInChildren
和GetComponentInChildren
高。因为前者只需要按照路径或索引查找,而后者需要做更复杂的递归搜索。所以,如果你能通过路径或索引直接找到子物体,那么使用Transform.Find
或Transform.GetChild
会更高效。但是,性能差距可能在实际使用中并不明显,因此建议根据具体的需求选择适当的查找方法。
使用 Input 类的 GetKey/GetKeyDown/GetKeyUp 方法
例如:
void Update() {
if(Input.GetKeyDown(KeyCode.Space)) {
// 按空格键时的处理
}
}
使用 Input 类的 GetButton/GetButtonDown/GetButtonUp 方法需要先在输入管理器中定义按钮名称
然后像 GetKey 一样使用:
移动
float moveX = Input.GetAxisRaw("Horizontal");
float moveY = Input.GetAxisRaw("Vertical");
设计
if(Input.GetButtonDown("Fire1")) {
// 按下定义的 Fire1 按钮时的处理
}
在 Edit => Project Settings => Input Manager 我们能看到所有的事件名称
Unity 的新输入系统(Input System)与旧的 Input 方法相比有以下一些优点:
Rigidbody 2D组件:包含重力、摩擦力等
Box Collider 2D组件:包含碰撞(相互作用力)。调整碰撞体积的大小,在Box Collider 2D组件中的Editor Collider中调整(主角只需要下半身发生碰撞,更贴近真实。)。此外还可以使用适应物理形状的多边形碰撞组件Polygon Collider 2D