当前位置: 首页 > article >正文

Cocos游戏中集成RichTap高品质振动

. 简介

RichTap是全球领先的全品类设备触感整体解决方案,可帮助设备制造商和游戏、影音、社交互动等内容商,一站式实现多维度、全场景的高品质触觉反馈体验。本文着重介绍RichTap在Cocos项目中的落地方案。

RichTap 提供了多平台的原生SDK(包括Android、iOS、Windows等),丰富的API可以很方便地在各平台上进行振动效果的播放和控制。再看Cocos,它也有好几种方法来扩展接入原生SDK,本文采用了JsbBridge方案,即:使用Cocos封装的JsbBridgeWrapper进行事件派发,通过修改Cocos构建的原生工程(安卓/iOS)集成RichTap SDK,以实现在Cocos项目中表现RichTap高品质振动效果。

以下是分平台集成RichTap的具体步骤。

. 集成步骤

安卓平台

请首先确认你的Cocos项目已经生成了native工程。可以查看工程目录中是否有native\engine\android目录。如果没有,则在Cocos Creator中构建一个安卓任务。

1. 把RichTap Android SDK库文件xxx.aar复制到工程目录\native\engine\android\app\libs\目录下(没有则新建)

2. 把桥接代码RichtapBridge.java复制到工程目录\native\engine\android\app\src\com\cocos\game\目录下

3. 用Android Studio打开\项目目录\build\android\proj工程,等待Gradle同步完成

4. 打开Gradle Scripts > build.gradle(Module ...)配置文件引入RichTap SDK aar文件

Java
dependencies {
    implementation files("libs/xxx.aar")
}

5. 打开工程目录 > java > com.cocos.game > AppActivity,在onCreate函数内添加初始化相关代码

Java
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 新增的初始化代码
    RichtapBridge.start(this);
    ...
}

iOS平台

请首先确认你的Cocos项目已经生成了native工程。可以查看工程目录中是否有native\engine\ios目录。如果没有,则在Cocos Creator中构建一个iOS任务。

1. 把RichTap iOS SDK库文件RichTapSDK.framework复制到工程目录\native\engine\ios\Frameworks\目录下(没有则新建)

2. 把桥接代码复制到工程目录\native\engine\ios\目录下

3. 打开文件工程目录\native\engine\ios\CMakeLists.txt,编辑cmake配置文件

3.1 在add_executable命令之前添加以下代码

CMake
# 添加所有的桥接程序代码,并追加到CC_PROJ_SOURCES
set(JSB_BRIDGE_SOURCE
    ${CC_PROJECT_DIR}/RichTapBridge.h
    ${CC_PROJECT_DIR}/RichTapBridge.mm
    ${CC_PROJECT_DIR}/MyIOSPlatform.h
    ${CC_PROJECT_DIR}/MyIOSPlatform.mm
    ${CC_PROJECT_DIR}/RichTapManager.h
    ${CC_PROJECT_DIR}/RichTapManager.m
    ${CMAKE_}
)
list(APPEND CC_PROJ_SOURCES ${JSB_BRIDGE_SOURCE})

# 设置 RichTapSDK 的路径
set(RICHTAPSDK_PATH ${CC_PROJECT_DIR}/Frameworks/RichTapSDK.framework)

# 添加 framework 的搜索路径
include_directories(${RICHTAPSDK_PATH}/Headers)
link_directories(${RICHTAPSDK_PATH})

# 添加-ObjC编译选项
set(CMAKE_XCODE_ATTRIBUTE_OTHER_LDFLAGS "-ObjC")

3.2 在add_executable命令之后添加以下代码

CMake
# 链接 RichTapSDK Framework,必须要在add_executable之后链接
target_link_libraries(${EXECUTABLE_NAME} ${RICHTAPSDK_PATH})

4. 打开Cocos Creator重新构建当前iOS项目

5. 使用Xcode打开\项目目录\build\ios\proj工程,打开EXECUTABLE_NAME > Source Files > main.mm文件,注释默认的平台初始化代码,添加RichTap SDK的平台初始化代码

Objective-C
// 注释默认的BasePlatform头文件
// #include "platform/BasePlatform.h"
// 添加MyIOSPlatform头文件
#include "MyIOSPlatform.h"

int main(int argc, const char * argv[]) {
    // 注释BasePlatform初始化代码
    // cc::MyIOSPlatform* platform = new cc::MyIOSPlatform();
    // 添加RichTap SDK的平台初始化代码
    cc::BasePlatform* platform = cc::BasePlatform::getPlatform();
    ...
}

. Cocos项目中调用

RichTapHaptics文件夹复制到你的Cocos项目的assets目录中,在需要使用的脚本中导入RichTapHaptics类,使用getInstance方法可以获取实例。

JavaScript
import RichTapHaptics from './RichTapHaptics';

// 通过getInstance获取实例即可调用对应的方法
RichTapHaptics.getInstance()...

API说明

下面说明一下RichTapHaptics的各个API,方便开发者调用。

1. 初始化

JavaScript
init(): void

功能:初始化插件,调用振动接口之前必须先初始化,否则无法振动(iOS除外)

参数:无

返回值:无

2. 释放/退出插件

JavaScript
quit(): void

功能:游戏退出时释放RichTap资源

参数:无

返回值:无

3. 获取SDK版本

JavaScript
getSDKVersion(): Promise<string>

功能:获取RichTap SDK的版本号

参数:无

返回值:返回Promise形式的字符串,表示SDK版本号

4. 检查当前设备的RichTap振动能力

JavaScript
isSupportRichTap(): Promise<boolean>

功能:检查当前设备是否支持RichTap高品质振动的能力

参数:无

返回值:返回Promise形式的布尔值,true表示当前设备支持RichTap高品质,false表示不支持

5. 播放振动文件

JavaScript
playHaptic(params: PlayHapticParams): void

功能:播放振动效果文件(以.he为扩展名的文件)

参数:PlayHapticParams 格式见下文

返回值:无

6. 停止振动

JavaScript
stopHaptic(): void

功能:停止所有振动

参数:无

返回值:无

7. 调整振动参数

JavaScript
updateHapticParams(params: UpdateLoopParams): void

功能:在播放过程中动态调整振动效果参数

参数:UpdateLoopParams 格式见下文

返回值:无

8. 播放预置效果

JavaScript
playPrebaked(name: PrebakedEffectName): void

功能:播放RichTap SDK预置效果库中的振动效果

参数:PrebakedEffectName 格式见下文

返回值:无

9. 预置振动效果数据类型

TypeScript
enum PrebakedEffectName {
    RT_CLICK = 10001,
    RT_DOUBLE_CLICK,
    RT_SOFT_CLICK,
    RT_TICK,
    RT_THUD,
    RT_FAILURE,
    RT_SUCCESS,
    RT_RAMP_UP,
    RT_TOGGLE_SWITCH,
    RT_LONG_PRESS,
    RT_VIRTUAL_KEY,
    RT_KEYBOARD_TAP,
    RT_CLOCK_TICK,
    RT_CALENDAR_DATE,
    RT_CONTEXT_CLICK,
    RT_KEYBOARD_RELEASE,
    RT_VIRTUAL_KEY_RELEASE,
    RT_TEXT_HANDLE_MOVE,
    RT_ENTRY_BUMP,
    RT_DRAG_CROSSING,
    RT_GESTURE,
    RT_CONFIRM,
    RT_REJECT,
    RT_BOMB,
    RT_SWORD,
    RT_GUNSHOT,
    RT_SPEED_UP,
    RT_JUMP,
    RT_DRUM,
    RT_COIN_DROP,
    RT_HEARTBEAT,
    RT_PLUCKING,
    RT_DRAWING_ARROW,
    RT_CAMERA_SHUTTER,
    RT_FIREWORKS,
    RT_SNIPER_RIFLE,
    RT_ASSAULT_RIFLE,
    RT_CYMBAL,
    RT_TAMBOURINE,
    RT_FAST_MOVING,
    RT_FLY,
    RT_FOOTSTEP,
    RT_ICE,
    RT_LIGHTNING,
    RT_SPRING,
    RT_SWING,
    RT_WIND,
    RT_VICTORY,
    RT_AWARD,
    RT_GAMEOVER
}

10. 播放振动文件参数数据类型

TypeScript
interface PlayHapticParams {
    he: string
    loop: number
    intensity: number
    interval: number
    frequency: number
}

he:振动效果HE文件内容,是一个JSON字符串

loop:循环次数,取值范围是大于等于-1的整数,-1表示无限循环,0表示只播放一次(不循环)

interval:循环播放情况下相邻两次播放之间的时间间隔,以毫秒为单位

intensity:振动强度缩放值,取值范围是[0, 511],255表示按HE原有设计强度振动

frequency:变频值,取值范围[-100, 100],0表示不对HE做变频

11. 调整振动参数数据类型

TypeScript
interface UpdateLoopParams {
    intensity: number
    interval: number
    frequency: number
}

intensity:振动强度缩放值,取值范围是[0, 511]的整数,255表示按HE原有设计强度振动

interval:循环播放情况下相邻两次播放之间的时间间隔,以毫秒为单位,整数

frequency:变频值,取值范围[-100, 100]的整数,0表示不对HE做变频

使用示例

下面通过一个Cocos脚本,演示RichTap SDK的具体使用方法。

TypeScript
import { _decorator, Component, JsonAsset } from 'cc';
import RichTapHaptics from './RichTapUtils'
import { PrebakedEffectName } from './RichTapUtils/type';
const { ccclass, property } = _decorator;

@ccclass('NewComponent')
export class NewComponent extends Component {

    @property(JsonAsset)
    public heJson: JsonAsset | null = null

    start() {
        // 在Script的start中获取SDK版本号并检查是否支持RichTap振动
        RichTapHaptics.getInstance().getSDKVersion()
            .then((res) => {
                console.log(`当前SDK版本号:${res}`);
            })
        RichTapHaptics.getInstance().isSupportRichTap()
            .then((res) => {
                console.log(`是否支持RichTap振动:${res}`);
            })
    }

    // 播放振动效果
    playHaptic () {
        const params = {
            // 获取json文件内容,并转成字符串
            he: JSON.stringify(this.heJson.json),
            loop: 1,
            intensity: 255,
            interval: 0,
            frequency: 0
        }
        RichTapHaptics.getInstance().playHaptic(params)
    }

    // 停止振动
    stopHaptic () {
        RichTapHaptics.getInstance().stopHaptic()
    }

    // 调整振动参数
    updateHapticParams () {
        const params = {
            intensity: 255,
            interval: 0,
            frequency: 0
        }
        RichTapHaptics.getInstance().updateHapticParams(params)
    }

    // 播放预制效果
    playPrebaked () {
        RichTapHaptics.getInstance().playPrebaked(PrebakedEffectName.RT_BOMB)
    }

    // 初始化SDK
    initSDK () {
        RichTapHaptics.getInstance().init()
    }

    // 销毁SDK
    destroySDK () {
        RichTapHaptics.getInstance().quit()
    }

    update(deltaTime: number) {
       
    }
}
 

. 结尾

请联系RichTap商务工作人员获取Cocos集成资料包:bd@richtap-haptics.com


http://www.kler.cn/a/464062.html

相关文章:

  • Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询
  • 《计算机网络A》单选题-复习题库
  • Spring Boot自定义Starter
  • Qt|QWidget窗口支持旋转
  • Rust 泛型、特征与生命周期详解
  • mysql 忘记root密码 无密码登录系统 配置文件怎么改?
  • SpringCloud微服务架构
  • selenium 确保页面完全加载
  • react 优化方案
  • vue设计与实现-权衡的艺术
  • 打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索
  • SpringBoot开发——常用的几种参数传递和参数接收方式
  • js 中的递归应用+异步递归
  • Ungoogled Chromium127编译指南 Linux篇 - 拉取仓库(七)
  • IP-Guard对SolidWorks PDM 加密授权说明
  • Linux 系统中 .d 目录有什么用?
  • 电视广播制式:N制与P制
  • Guava常见特性操作
  • node.js 浅析 与 了解
  • 【视觉SLAM:十一、设计SLAM系统】
  • 人大金仓数据库基于Linux系统的数据库软件安装指南
  • PlantUML 时序图 基本例子
  • 民宿酒店预订系统小程序+uniapp全开源+搭建教程
  • Vue演练场基础知识(三)
  • UVM:testbench architecture
  • AI大模型系列之七:Transformer架构讲解