层级:
可以在2D游戏物体中的SpriteRenderer和地形TilemapRederer组件中的Order in layer 属性中去设置层级大小,值越大,越后渲染,反之,越先渲染,值大的物体会覆盖值小的物体。
层级:
可以在2D游戏物体中的SpriteRenderer和地形TilemapRederer组件中的Order in layer 属性中去设置层级大小,值越大,越后渲染,反之,越先渲染,值大的物体会覆盖值小的物体。
访问级别(Access Level):访问级别是指定了一个类型或类型成员对于其他代码是否可见和可访问的规则。
访问修饰符(Access Modifiers):访问修饰符是一种关键字,用于在声明类型或成员时指定其访问级别。访问修饰符告诉编译器谁可以访问该成员或类型。
1. public:`都是可见和可访问的。这意味着它可以在任何地方访问,包括其他类和程序集。在Unity中,如果将成员变量声明为 `public`,它将在Inspector面板中显示,允许你在编辑器中对其进行调整。public` 访问修饰符表示成员或类型对于所有代码
2. private:`private` 访问修饰符表示成员只能在当前类内部访问。其他类无法直接访问私有成员。这是一种封装的方式,用于隐藏内部实现细节。
3. **protected:** `protected` 访问修饰符表示成员对于当前类及其派生类是可见和可访问的。这通常用于继承关系中,允许派生类访问基类的一些成员。
private Rigidbody2D rigidbody2d;
这一行声明了一个私有的Rigidbody2D类型的变量`rigidbody2D`,它将用于引用游戏对象上的Rigidbody2D组件。
rigidbody2d = GetComponent<Rigidbody2D>();
这一行通过调用`GetComponent<Rigidbody2D>()`方法来获取游戏对象上的Rigidbody2D组件,并将其赋值给前面声明的`rigidbody2D`变量。这样,就可以在后续代码中使用`rigidbody2D`来访问和操作Rigidbody2D组件。
rigidbody2d.MovePosition(position);
这一行使用Rigidbody2D的`MovePosition`方法来移动游戏对象到指定的位置`position`。`position`是一个Vector2类型的变量,用于指定游戏对象应该移动到的目标位置。
在编程中,静态方法和普通方法是两种不同类型的方法,它们在定义、调用和用途上有一些重要的区别。
普通方法(Instance Methods):
1. 定义:普通方法是属于对象实例的,它们需要通过对象实例来调用。每个对象实例都有自己的一组普通方法。
2. 调用:要调用普通方法,必须首先创建类的一个对象实例,然后使用该实例来调用方法。
3. 用途:普通方法通常用于对象的状态和属性,它们可以访问和修改对象的字段、属性和成员变量。这些方法可以对特定对象执行操作。
4. 示例:
GetComponent方法(普通方法): 在Start
方法中,GetComponent
方法,它是一个普通方法。它需要在游戏对象实例上调用,并通过对象实例来获取组件。获取一个Rigidbody2D组件并将其分配给了rigidbody2d
变量。
rigidbody2d = GetComponent<Rigidbody2D>();
静态方法(Static Methods):
1. 定义:静态方法是属于类本身的,它们不依赖于类的对象实例。可以直接通过类名称来调用静态方法。
2. 调用:静态方法可以直接使用类名称来调用,而无需创建对象实例。
3. 用途:静态方法通常用于不需要访问对象状态的操作,或者在多个对象实例之间共享相同行为的操作。它们可以用于工具方法、数学函数、单例模式等场景。
4. 示例:
Input.GetAxis方法(静态方法): 在Update
方法中,使用了Input.GetAxis
方法,它是一个静态方法。可以直接使用Input
类的名称来调用该方法,而无需创建Input
类的对象实例。
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
刚体组件(Rigidbody)和碰撞器组件(Collider)是与物理模拟和碰撞检测相关的两个关键组件。
刚体组件(Rigidbody):
作用:刚体组件是用于使游戏对象具有物理性质的组件。它可以赋予游戏对象质量、重力、速度和角速度,从而让游戏对象在物理世界中进行模拟和交互。
重要属性和功能:
用途:刚体通常用于模拟物体的真实物理行为,如角色控制、物体的弹跳、飞行物体、车辆模拟等。它使游戏对象能够与物理引擎交互,响应力和碰撞。
碰撞器组件(Collider):
1. 作用:碰撞器组件用于定义游戏对象的碰撞形状,使其具备碰撞检测和响应功能。碰撞器不具有物理性质,仅用于检测碰撞。
2. 重要属性和功能:
3. 用途:碰撞器用于检测游戏对象之间的碰撞,从而触发事件或执行特定的逻辑。它们通常用于处理游戏中的碰撞、触发、物体交互等情况。
在Unity中,预制体(Prefab)是一种非常有用的功能,用于创建和重用游戏对象的模板。预制体允许你定义一个游戏对象,然后在场景中多次实例化它,以便在不同地方使用相同的配置。
渲染顺序与层级设置
在Unity中,通过使用层级(Layer)和渲染顺序(Order in Layer)属性,可以控制2D游戏物体的渲染顺序,以实现覆盖效果和深度感。
层级(Layer)
在Unity中,层级用于将2D游戏物体分组并定义它们的渲染顺序。每个游戏物体都可以分配到一个特定的层级中,层级之间可以有优先级。
通过调整层级,可以控制哪些游戏物体在视图中处于前景,哪些在背景,以及它们之间的渲染顺序。
渲染顺序(Order in Layer)
`Order in Layer` 属性用于在特定层级中定义游戏物体的渲染顺序。这个属性的值决定了游戏物体在同一层级内的渲染顺序。
通过调整 `Order in Layer` 属性,你可以微调游戏物体的渲染顺序,以实现精确的覆盖效果和深度感。
使用层级和渲染顺序的场景
通过使用层级和渲染顺序,可以有效地管理游戏中不同元素的渲染,创造出更丰富和复杂的视觉效果。这对于2D游戏的设计和视觉表现非常重要。
Application.targetFrameRate = 60;
使用Input.GetAxis()移动游戏对象
void Update()
{
// 获取水平和垂直输入值
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
// 获取游戏对象的当前位置
Vector2 position = transform.position;
// 使用输入值来修改位置
position.x = position.x + 2.5f * horizontal * Time.deltaTime;
position.y = position.y + 2.5f * vertical * Time.deltaTime;
// 将新的位置应用到游戏对象
transform.position = position;
}
获取输入值
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
- 这两行代码用于获取水平和垂直输入值。`Input.GetAxis()` 方法用于获取输入轴的值,根据传入的参数来选择特定的输入轴。在这里,我们分别获取了水平和垂直方向上的输入值。
修改位置
position.x = position.x + 2.5f * horizontal * Time.deltaTime;
position.y = position.y + 2.5f * vertical * Time.deltaTime;
- 这两行代码使用获取到的输入值来修改游戏对象的位置。水平输入值(`horizontal`)用于控制水平移动,垂直输入值(`vertical`)用于控制垂直移动。
- 乘以 `2.5f` 用于调整移动速度。你可以根据需要调整此值来控制移动速度。
- `Time.deltaTime` 用于考虑到每帧的时间间隔,以使移动操作平滑,不受帧率的影响。
在代码中,`f` 是一个后缀,用于将数值文字(literal)标记为浮点数(float literal)。在C#中,编译器默认将小数点后的数字视为`double`类型,而不是`float`类型。为了明确告诉编译器这是一个`float`类型的值,我们可以在数值后面加上`f`后缀。
例如,`0.1f` 表示一个`float`类型的值,而 `0.1`(没有`f`后缀)将被视为`double`类型的值。
在Unity中,通常使用`float`类型来表示位置、旋转、缩放等变换信息,因为这些信息的精度通常不需要太高。因此,在修改坐标值时,使用`0.1f` 表示0.1个浮点数单位的增量,这是一种常见的做法。
新手之跃宝箱密码:b
获取"Luna"的位置
Vector2 position = transform.position;
在这一行代码中,我们首先声明了一个名为`position`的`Vector2`类型的变量,这个变量将用于存储"Luna"游戏对象的位置信息。
通过`transform.position`,我们获取到了"Luna"游戏对象的当前位置,并将其赋值给了`position`变量。这意味着`position`现在包含了"Luna"的当前位置(包括X和Y坐标)。
修改位置变量
position.x = position.x + 0.1f; // 让人物“Luna”向右进行移动
在这一行代码中,我们修改了`position`变量的X坐标,以实现"Luna"向右移动。具体来说,我们将`position`的X坐标增加了0.1个单位,这会使"Luna"在X轴方向上向右移动一小段距离。
重新赋值位置
transform.position = position; // 把位置再重新赋值
最后一行代码是将修改后的`position`变量的值重新赋给了"Luna"游戏对象的位置。这意味着我们的移动操作已经生效,"Luna"的位置被更新,游戏对象在画面上发生了实际的位移。
Update()
方法中,而 Update()
方法会在每一帧都被调用,所以移动操作会一直执行。这可能不是你想要的行为,特别是如果你只想让"Luna"移动一次或在某个条件下移动。
什么是变量?
在计算机编程中,变量就像一个命名的盒子,用来存储数据。这个盒子有一个名字,你可以通过这个名字来访问里面的内容。
举个例子: 假设你有一个盒子,名字叫`treasureBox`。你可以把一些贵重的物品放进这个盒子里,然后通过`treasureBox`这个名字来找到和取出这些物品。在编程中,变量就像这个`treasureBox`,是用来存储数据的容器。
声明变量
在代码中,声明一个变量的过程就是创建一个盒子,然后给这个盒子起一个名字。下面是一个示例:
Vector2 position;
在这里,我们声明了一个名为`position`的变量。这告诉计算机在内存中为`position`分配适当的空间,以便存储一个`Vector2`类型的值。
变量类型
变量类型告诉计算机我们要存储哪种类型的数据,以便计算机可以为变量分配正确大小的内存空间。在这里,`Vector2`是一种特殊的数据类型,用于存储包含两个数字的值,通常用于表示二维坐标,包括X和Y坐标。
赋值操作符
position = transform.position;
在这行代码中,我们使用了赋值操作符`=`。它的作用是将右侧的值(`transform.position`)赋给左侧的变量(`position`)。这意味着我们将"Luna"游戏对象的位置信息赋给了`position`变量,就像将一个物品放入了`treasureBox`盒子中一样。
探索基础脚本结构
了解基本结构
csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
// 在游戏开始时执行的代码
}
void Update()
{
// 在每一帧更新时执行的代码
}
}
命名空间与引用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
类定义
public class NewBehaviourScript : MonoBehaviour
- `public` 表示这个类是公共的,可以在其他脚本中访问。
- `class` 关键字表示这是一个类。
- `NewBehaviourScript` 是类的名称,可以根据需要进行更改。
- `: MonoBehaviour` 表示这个类继承自`MonoBehaviour`类,这是Unity所有脚本的基类。
Start() 方法
void Start()
{
// 在游戏开始时执行的代码
}
- `void` 表示这个方法不返回任何值。
- `Start()` 是一个特殊的方法,在游戏开始时执行一次。
Update() 方法
void Update()
{
// 在每一帧更新时执行的代码
}
- `Update()` 也是一个特殊方法,它在每一帧都会被调用。
新手之跃宝箱密码:X
Input 输入监听 浮点类型(float)
渲染层级
Input.GetAxis()的参数是Input Manager里面的
Input用于监听对象
Input.GetAxis("监听对象")
z
rigidbody 刚体
双方都要有碰撞器且一方有刚体且最好是运动方