Unity3D游戏开发中的Rewired输入管理插件

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Unity3D是一款功能强大的游戏开发引擎,而Rewired是一款专为Unity3D设计的输入管理插件,提供高度定制和灵活的输入控制解决方案。该插件支持多玩家,拥有良好的控制器兼容性,并允许动态输入管理。 Rewired具备直观的API,支持控制器分组和角色定义,并带有可视化编辑器,以优化性能和提供丰富的文档。开发者导入 Rewired V1.1.44.0.unitypackage 后,可以在Unity编辑器中访问相关组件和脚本,轻松设置并利用其功能,以提升游戏体验和玩家满意度。 Unity3D中的Rewired插件

1. Unity3D 游戏开发介绍

Unity3D 是当今最受欢迎的游戏引擎之一,它不仅被许多独立游戏开发者所采用,同时也得到了大型游戏开发公司的青睐。通过使用 C# 语言,Unity3D 允许开发者创建二维(2D)和三维(3D)游戏,以及丰富的交互式虚拟现实(VR)体验。本章节将介绍Unity3D的核心概念、开发环境设置以及游戏开发的基本流程,为读者提供一个坚实的基础,以便更好地理解和运用Unity3D进行游戏创作。

Unity3D 的强大之处在于它的模块化设计,使得开发者可以轻松地添加或移除功能模块,以适应不同的开发需求。此外,Unity3D 提供了大量的资产商店资源、教程以及社区支持,极大地降低了游戏开发的门槛,提高了开发效率。接下来,我们将深入探讨Unity3D的游戏开发流程,包括场景创建、角色设计、交互逻辑以及游戏发布等关键步骤。

2. Rewired 插件功能概述

2.1 高度定制化输入布局

2.1.1 输入布局的自定义与管理

在Unity3D游戏开发中,玩家输入的管理是核心组成部分之一。 Rewired 提供了一个非常强大的输入管理框架,其中最为突出的功能是高度定制化输入布局。这一功能允许开发者根据游戏的需求设计输入方案,并可以轻松地管理这些方案。通过输入映射,开发者能够定义游戏中的动作和相应的输入设备,例如键盘按键、鼠标移动、控制器按钮等。

为了实现自定义输入布局,Rewired 提供了简单易用的界面,以图形化方式让开发者进行配置。使用这些工具,开发者可以创建多种输入布局,并且能够在运行时根据玩家的需求或配置选择合适的布局。这一特性对于多平台游戏尤为重要,因为不同平台上的控制器可能大相径庭。

下面的代码块演示了如何使用Rewired API来实现自定义输入布局。

// 创建一个InputMap,并定义动作
InputMap myMap = reInput.CreateInputMap("MyInputMap");
myMap.AddAction("Jump", true, false, "JumpButton");
myMap.AddAction("Shoot", true, false, "ShootButton");
myMap.AddAxis("MoveHorizontal", false, "HorizontalAxis");
myMap.AddAxis("MoveVertical", false, "VerticalAxis");

// 将InputMap添加到玩家配置中
reInput.GetPlayer(0).AddInputMap(myMap);

上述代码创建了一个名为“MyInputMap”的输入映射,并为“Jump”和“Shoot”定义了按钮输入,同时为水平和垂直移动定义了轴输入。之后,将这个映射添加到了玩家0的配置中。通过这样的编程逻辑,开发者可以灵活地定制每个玩家的输入方式,满足游戏设计的需求。

2.1.2 输入映射的灵活性与可扩展性

Rewired 输入映射的灵活性体现在其对多种输入设备的支持以及映射的动态更改能力。开发者可以创建多个映射,并根据不同的游戏模式、平台或玩家偏好选择使用。例如,在一个角色扮演游戏中,可以为战斗场景设计一个映射,为探索场景设计另一个映射。此外,开发者还可以在游戏运行期间通过编程接口更改映射,为游戏添加更多的交互性。

在可扩展性方面,Rewired 允许开发者通过脚本添加自定义设备类型。如果存在市面上常见的、但Rewired未默认支持的设备,开发者可以编写代码来扩展输入系统,从而识别并使用新设备的功能。这种能力为游戏的长期可维护性和适应性提供了保障。

以下是将新设备添加到Rewired的示例代码。

// 自定义设备的初始化
public class MyCustomDevice : InputDevice {
    public MyCustomDevice(int id, string hardwareName) : base(id, hardwareName) {
        AddAxis("CustomAxis", "CustomAxis", AxisRange.Range0to1);
    }

    public override void UpdateAllAxes(bool doEvents) {
        // 更新轴值的逻辑
        SetAxis("CustomAxis", CalculateAxisValue());
    }
    private float CalculateAxisValue() {
        // 实现计算轴值的逻辑
        return 0.5f; // 示例返回值
    }
}

// 注册自定义设备到输入系统
InputManager.AddDevice(new MyCustomDevice(1, "MyCustomDevice"));

这段代码展示了如何创建一个自定义的输入设备,并将其注册到Rewired系统中。通过这种方式,输入系统变得更加灵活和可扩展。

2.2 多玩家输入支持

2.2.1 多玩家输入系统的架构设计

在多人游戏场景中,处理多个玩家的输入需要一个精心设计的系统来保证流畅的用户体验。Rewired 设计了一套强大的多玩家支持架构,使得管理多个玩家输入变得非常高效。该系统允许为每个玩家配置单独的输入设备和映射,保证了玩家间输入的独立性和互不干扰。

玩家的识别通过Player ID来实现,每个玩家的设备和映射都与这个ID绑定。这意味着在游戏逻辑中,开发者可以通过Player ID来查询特定玩家的输入状态。同时,Rewired 提供了相关的API来检测玩家的输入事件,如按键按下、释放或轴移动等,从而可以触发游戏中的相应动作。

2.2.2 多玩家协同输入的处理机制

为了实现多玩家的协同输入,Rewired 提供了一系列的事件和回调机制来处理输入数据。比如当某个玩家按下跳跃键时,可以触发一个事件,其他玩家可以订阅这个事件来响应。这样,开发者可以在游戏中设计出需要玩家相互合作完成的机制。

在多玩家协同输入场景下,输入延迟会极大影响玩家的游戏体验。Rewired 在内部优化了输入事件的处理流程,确保了输入的快速响应。此外,输入事件的缓冲机制也得到了优化,即使在高延迟的网络环境下,也能保证输入数据的准确性和及时性。

2.3 控制器兼容性说明

2.3.1 广泛的控制器支持与识别

Rewired 支持超过200种不同的控制器和设备,这包括了几乎所有主流的键盘、鼠标和游戏手柄。对于那些较为罕见的或自定义的控制器,Rewired 也允许开发者通过自定义设备类型和扩展的方式来添加对它们的支持。控制器的识别非常智能,能够自动检测连接到游戏的设备类型。

为了帮助开发者更好地理解所连接设备的类型,Rewired 提供了详细的设备信息界面。通过这些信息,开发者可以确保游戏在不同的控制器上能够正确地处理输入。

2.3.2 不同控制器输入的兼容策略

Rewired 能够自动处理不同控制器的输入差异,为开发者省去了大量的手动适配工作。在大多数情况下,开发者不需要编写特定的代码来处理特定的控制器输入,因为 Rewired 已经为这些常见控制器做了适配。当然,如果开发者有特殊需求,也可以通过编程方式对特定控制器的输入进行额外的处理。

此外,为了支持不同的游戏设计,Rewired 允许开发者定义全局和局部的重映射方案。这样,玩家就可以根据自己的喜好或习惯,自定义控制器输入的行为,从而获得更加个性化的游戏体验。

接下来,我们会继续深入探讨如何利用Rewired插件进行动态输入管理,以及该插件在游戏性能优化方面的表现和优势。

3. 动态输入管理能力

3.1 简洁易用的API

3.1.1 API的设计哲学与使用指南

Unity3D游戏开发中的API设计哲学往往遵循清晰、灵活、扩展性三大原则。动态输入管理API也不例外,它旨在提供给开发者一个简洁的接口,以实现对各种输入设备的灵活管理和有效响应。使用指南将重点介绍如何利用这些API,并通过代码示例来展示其强大的功能。

// 示例:使用Rewired API监听键盘输入
void Update() {
    if (ReInput.controllers.GetAnyGamepad().GetButtonDown("Jump")) {
        // 当玩家按下跳跃键时执行的代码
    }
}

以上代码段展示了一个非常简单的使用场景,通过ReInput API检查是否有任何游戏手柄的跳跃按钮被按下。

3.1.2 核心API功能与代码示例

核心API提供了一系列的函数与类,允许游戏根据玩家的输入来动态调整游戏状态。以下是部分核心API功能及其代码示例:

  • 按键状态检测
  • 输入轴映射
  • 输入触发事件监听
// 按键状态检测示例
bool isAttackButtonPressed = ReInput.controllers.GetAnyController().GetButton("Attack");
if (isAttackButtonPressed) {
    // 攻击动作的实现
}

// 输入轴映射示例
float horizontalMovement = ReInput.controllers.GetAnyController().GetAxis("Horizontal");
if (horizontalMovement != 0) {
    // 根据水平输入轴的值移动玩家
}

// 输入触发事件监听示例
ReInput.mapping.GetInputAction("Jump").AddListener(OnJump);
//...
void OnJump(InputActionEvent evt) {
    if (evt.type == InputActionEvent.Type.ButtonPressed) {
        // 跳跃动作的实现
    }
}

3.2 控制器分组和角色定义

3.2.1 控制器分组策略与实现

控制器分组允许玩家在一个分组内通过不同的输入设备进行操作。例如,可以定义一个玩家分组,其中玩家可以通过键盘或游戏手柄进行游戏。这种策略提高了玩家操作的灵活性。

// 为玩家分组添加控制器示例
int playerGroupId = ReInput.players.GetPlayer("PlayerOne").playerId;
ReInput.controllers.AddJoystick(0); // 添加第一个游戏手柄
ReInput.controllers.AddKeyboard(Keyboard.allKeyboards); // 添加所有键盘

// 为玩家分组设置控制器优先级
ReInput.mapping.AddLayer("PlayerOne", 100);
ReInput.mapping.AddLayerToGroup("PlayerOne", "Gamepad", "PlayerOne", 100);
ReInput.mapping.AddLayerToGroup("PlayerOne", "Keyboard", "PlayerOne", 99);
3.2.2 角色定义在游戏中的应用场景

角色定义在游戏中的应用场景可以是一个角色扮演游戏中,根据不同的角色分配不同的输入配置。角色定义可以根据玩家的角色身份提供特定的输入映射和操作限制。

// 角色定义示例
// 创建角色角色配置
InputMap角色角色配置 = ReInput.mapping.GetInputMap("CharacterConfigA");
角色角色配置.AddAction("Jump", "Action", 0, "Jump");
角色角色配置.AddAction("Attack", "Action", 1, "Attack");
角色角色配置.AddAxis("Horizontal", "Axis", 0, "Horizontal");
角色角色配置.AddAxis("Vertical", "Axis", 1, "Vertical");

// 将角色配置应用到玩家
ReInput.players.GetPlayer("PlayerOne").AssignInputMap(角色角色配置);

3.3 可视化输入配置编辑器

3.3.1 输入配置编辑器的功能与界面介绍

可视化输入配置编辑器是Unity3D中的强大工具,它提供了一个可视化的界面,允许开发者通过拖拽的方式快速设置和编辑输入映射。这个编辑器可以用于创建新的输入动作、分配按键或游戏手柄按钮以及调整输入轴。

graph TB
    A[开始] --> B[打开输入配置编辑器]
    B --> C[创建新的输入动作]
    C --> D[分配按键或游戏手柄按钮]
    D --> E[调整输入轴参数]
    E --> F[保存配置]
    F --> G[在游戏场景中测试配置]

编辑器界面通常包括动作列表、映射面板、轴设置和测试面板等几个主要部分。

3.3.2 编辑器在游戏开发中的实际运用

在游戏开发过程中,可视化输入配置编辑器的实际运用主要体现在以下几个方面:

  • 快速创建和修改输入映射,无须手动编写代码。
  • 为不同的玩家角色或控制器类型定制输入方案。
  • 在游戏开发的各个阶段对输入方案进行测试和调整。
// 在项目中使用可视化编辑器创建的输入映射
// 以跳跃动作为例
InputAction jumpAction = ReInput.mapping.GetAction("Jump");
if (jumpAction != null && jumpAction.GetButtonPressed()) {
    // 角色跳跃逻辑实现
}

通过以上各节对动态输入管理能力的详细介绍,我们了解到了Rewired插件在游戏开发中的核心优势。API的简洁易用、控制器分组与角色定义的灵活性、以及可视化输入配置编辑器的强大功能,都为Unity3D游戏开发提供了强有力的支持。这些能力不仅提升了开发效率,也极大地丰富了游戏的输入系统,使玩家获得更加优质的体验。在下一章节中,我们将深入探讨性能优化的相关话题,探讨如何在保证游戏输入响应性的同时,进一步提升游戏的整体性能表现。

4. 性能优化

性能优化是游戏开发过程中不可忽视的一环。在Unity3D中使用Rewired插件可以大大提升游戏的输入响应速度和稳定性,但同时也引入了额外的性能考量。本章节将深入探讨动态输入管理的性能影响以及插件资源文件版本对性能的具体影响。

4.1 动态输入管理的性能影响

4.1.1 输入管理对游戏性能的影响分析

动态输入管理允许开发者在游戏运行时实时修改输入行为,为游戏提供了极高的灵活性。然而,这种实时修改的能力也可能对性能造成负担。每个输入动作都可能需要经过一系列的检测和处理才能最终确定其行为,这个过程中涉及的计算量可能会随着输入设备数量和输入事件的复杂度增加而上升。

例如,每次用户触发输入事件时,系统都需要通过查询输入映射表来匹配正确的响应,如果映射表过于庞大或复杂,这个查询过程就会变得缓慢。此外,对于需要大量并行处理输入的场景,例如快节奏的动作游戏或模拟器,输入管理的性能开销可能更为显著。

4.1.2 优化技巧与性能评估

为了缓解性能问题,开发者可以采取多种策略。首先,合理地分组控制器并进行角色定义能够减少输入事件的处理数量。通过合并相似的输入映射或对不常使用的映射进行懒加载,可以显著降低不必要的计算。

其次,利用Rewired提供的可视化输入配置编辑器,可以实时观察输入事件的处理流程,并通过热图等工具对性能热点进行诊断。如果发现某个输入设备或映射处理特别耗时,可以尝试优化该部分逻辑或调整其优先级。

代码层面,可以通过分析Rewired的内部实现来找出性能瓶颈。以下是一个简单的代码示例,展示了如何使用Rewired API来处理按键事件:

void Update() {
    if (ReInput.isReady) {
        // 获取玩家控制器
        var player = ReInput.players.GetPlayer(0); // 假设使用第一个玩家的控制器
        // 检查特定按键动作是否被触发
        if (player.GetButton("Jump")) {
            Debug.Log("Jump is pressed.");
        }
    }
}

在上述代码中, ReInput.isReady 用于检查Rewired系统是否已经完全准备就绪,这是防止在系统加载过程中执行任何Rewired操作的重要步骤。 GetPlayer 方法用于获取特定的玩家控制器,这里使用了索引0来获取第一个玩家的控制器。 GetButton 方法用于检查指定的按键动作是否被当前控制器触发。

性能优化不仅仅是代码层面的工作,它还包括了资源管理、算法优化、多线程利用等多个方面。开发者需要根据具体项目的需求,权衡性能和功能的平衡点,确保游戏在提供丰富输入响应的同时,仍能保持良好的运行效率。

4.2 插件资源文件版本说明

4.2.1 不同版本插件的功能差异

Rewired插件自推出以来,经历了多次更新和迭代,每个新版本都带来了新的功能和性能改进。开发者在选择使用哪个版本时,需要考虑到自己游戏的需求和所依赖的Unity版本。

例如,较新的版本可能引入了更好的多线程支持,或是改进了输入检测算法,提升了整体性能。同时,一些旧的API可能已经被弃用或被新的功能替代,旧版本的用户在升级时需要仔细阅读更新日志,以便对代码进行必要的调整。

4.2.2 版本更新对游戏兼容性的影响

尽管插件的更新往往带来了诸多便利和性能提升,但更新也可能引入新的问题,特别是对那些已经完成开发并即将上线的游戏来说。在升级到新版本的插件时,开发者需要进行彻底的测试,确保新版本的插件不会破坏现有的输入响应逻辑。

为了应对这种情况,建议开发者在升级前备份好现有代码,并在测试环境中先行测试新版本插件的影响。此外, Rewired社区提供了详尽的文档和更新指南,其中包含了版本变更的细节和过渡建议,对于确保版本更新的平稳过渡具有极大帮助。

在后续的代码示例中,我们将展示如何使用Rewired插件的版本控制功能来确保游戏的输入系统兼容性。

通过以上章节的介绍,我们可以了解到性能优化是一个涉及多个方面的复杂过程。在享受Rewired插件带来的便捷的同时,开发者必须不断地对游戏进行性能评估和优化,以确保游戏能够持续提供流畅的用户体验。

5. 文档和示例代码

5.1 详尽的插件文档

5.1.1 文档结构与内容概述

Rewired插件的文档是游戏玩家和开发者的重要资源,它对理解和应用这个插件至关重要。文档的结构被设计为方便不同层次的用户快速找到他们需要的信息。

文档按照以下主要部分组织:

  • 介绍与概述 :文档开始部分通常包含了插件的基本介绍,包括其主要功能、应用场景以及版本更新日志。
  • 安装与配置 :这部分详细描述了如何下载插件、导入到Unity项目、进行基本设置以及配置输入系统。
  • API参考 :提供了所有公开API的参考,包括它们的用法、参数、返回值和可能抛出的异常。
  • 高级功能 :这部分深入探讨了插件的高级特性,如多玩家输入、虚拟轴、动词、特殊输入类型和扩展API等。
  • FAQ与常见问题 :列出并解答了开发者在使用插件时可能会遇到的一些常见问题。
  • 示例与教程 :提供了一系列示例和教程,帮助用户理解如何在实际项目中应用Rewired的不同功能。

5.1.2 如何快速找到需要的帮助信息

在使用文档时,可以通过以下方法快速定位到所需信息:

  • 目录搜索 :大多数文档查看器和在线文档支持目录搜索功能,你可以快速输入关键词查找相关内容。
  • 标签和分类 :文档中的内容会被分类,并附加标签,以方便根据功能或者类型寻找信息。
  • 索引表 :文档通常会有一个索引表,列出了所有的类和方法,你可以直接跳转到具体API的说明部分。
  • 示例代码 :通过查找文档中的示例代码,可以直观地了解API或功能的应用方式。
  • 反馈与支持 :如果在文档中找不到答案,你还可以通过官方论坛或者GitHub的Issue提交问题,寻求社区的帮助。

5.2 示例代码与项目集成

5.2.1 示例项目的功能展示

示例项目通常作为文档的一部分,展示了插件的核心功能。通过示例项目,用户可以直观地看到如何使用Rewired插件实现以下功能:

  • 输入映射与重映射 :展示了如何根据玩家的喜好自定义键盘、鼠标以及游戏手柄的控制映射。
  • 多玩家支持 :示例中包括了如何在多玩家场景下进行输入的分离和同步。
  • 动态控制器添加与删除 :演示了如何在游戏中动态地添加和移除控制器,并且确保输入的正确处理。
  • 平台特定的输入处理 :展示了插件是如何处理不同平台上的输入差异。

5.2.2 将Rewired集成到项目的步骤与注意事项

在集成Rewired到你的项目中时,以下步骤和注意事项可以帮助确保过程顺利:

  1. 下载与导入 :首先,确保从Unity Asset Store或GitHub下载最新版本的Rewired。然后,在Unity编辑器中打开你的项目,导入下载的 .unitypackage 文件。
  2. 配置输入管理器 :在导入后,你可能需要设置输入管理器以满足你的游戏需求。这包括配置映射和创建虚拟轴。

  3. 测试输入 :在Unity编辑器中测试输入,确保所有自定义映射都按照预期工作。

  4. 打包与发布 :在项目打包之前,请确保进行了详尽的测试。确保在目标平台上的输入行为与在编辑器中一致。

  5. 优化考虑 :在项目集成过程中,留意插件对性能的潜在影响,并根据需要进行优化。

  6. 问题解决 :如果在集成过程中遇到问题,参考文档中的FAQ部分,或者联系社区寻求帮助。

注意事项:

  • 在编写自定义代码时,一定要遵循插件的API规范,避免冲突。
  • 确保对所有支持的平台进行测试,因为某些平台可能需要特定的配置。
  • 在项目发布之前,确认所有依赖项都已正确打包,包括必要的Rewired资源文件。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Unity3D是一款功能强大的游戏开发引擎,而Rewired是一款专为Unity3D设计的输入管理插件,提供高度定制和灵活的输入控制解决方案。该插件支持多玩家,拥有良好的控制器兼容性,并允许动态输入管理。 Rewired具备直观的API,支持控制器分组和角色定义,并带有可视化编辑器,以优化性能和提供丰富的文档。开发者导入 Rewired V1.1.44.0.unitypackage 后,可以在Unity编辑器中访问相关组件和脚本,轻松设置并利用其功能,以提升游戏体验和玩家满意度。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

重新佈線是一個先進的輸入系統,完全重新定義您如何使用輸入,為您的遊戲中最重要的組件之一提供前所未有的控制級別。 搜索結果 網站 | 文檔 | 論壇主題 | 免費試用 搜索結果 原生輸入 重新連線不像其他軟件包那樣是另一個Unity輸入包裝。 Rewired支持Unity支持的多種平台,並支持在Windows,OSX,Linux,Windows 8 Store,Windows 10 Universal,WebGL,Ouya,Xbox One,Xbox Series S/X, PS4,Switch和Stadia上的擴展原生支持。重新佈線利用本機庫直接訪問輸入設備,可以更好地控制輸入。這使得一些非常強大的功能成為可能,例如對遊戲桿的全面熱插拔支持,每個控制器支持20多個按鈕,支持遊戲板震動等等。 Rewired是唯一可用於Unity的輸入系統,並且支持所有這些平台,並提供這些高級功能。對於其他平台,Rewired使用Unity的輸入系統,因此您仍然可以訪問其提供的所有其他功能。 搜索結果 的播放器為中心的結果 Rewired具有以玩家為中心的輸入系統,使其成為多玩家遊戲的理想解決方案。控制器智能地自動分配給連接/斷開連接的玩家,所以您不必擔心每個玩家擁有哪些控制器。通過玩家而不是控制器訪問輸入,所以無論玩家使用哪種控制器,您都可以獲得期望的結果。 搜索結果 控制器地圖 重新連線功能強大的控制器映射系統,可讓您為任何風格的遊戲創建高度複雜的輸入方案。通過邏輯命名的元素映射支持的控制器,而不是隱藏的軸0等。地圖堆棧,因此您可以為不同的遊戲模式創建不同的地圖並輕鬆地在它們之間切換。為各種控制器創建默認控制器佈局,並允許玩家自定義他們自己的映射。通過XML保存和加載地圖。 搜索結果 智能熱插拔 Rewired解決了在Windows,OSX,Linux,Windows 8 Store,Windows 10 Universal,WebGL,Ouya,Xbox One,Xbox Series S/X, PS4,Switch和Stadia上Unity的所有熱插拔問題。 (所有其他支持的平台都依賴於Unity的熱插拔支持。)不再強迫玩家在轉換遊戲桿時退出並重新啟動。沒有更多的猜測哪個控制器是哪個。它只是工作。 搜索結果 輸入編輯器 編輯一個功能強大且易於使用的編輯器的所有輸入。沒有編碼只是為了添加像某些系統一樣的操作。通過一個方便的界面編輯玩家,動作和地圖類別,備用地圖佈局,遊戲桿,鍵盤,鼠標和自定義控制器地圖,輸入行為等等。 搜索結果 跨平台 重新佈線需要跨平台輸入的麻煩。支持的控制器已在Windows,Windows 8 Store,Windows 10 Universal,OSX,Linux,iOS,tvOS,Android,Amazon Fire TV和Webplayers上進行了一致性映射。 Rewired還支持PlayStation 4,Xbox One,Xbox Series S/X, Switch,Stadia,PSM,WebGL,Ouya,Google Nexus Player,NVidia Shield,Razer Forge TV,GameStick和其他基於Android的控制台。 搜索結果 支持的控制器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值