t
t
Z
Z
222
qtgu
z
x
zt
ghcccgffdytfyu
## 一个优雅的方法让2D角色走动时正确的覆盖
设置自定义轴向。projectSettings -> graphics -> Transparency Sort Axis (Y轴)
层级:
可以在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