VTuber Demo 开发指南(unity)
1 开发环境准备
1.1 硬件环境准备
一部配置较高的手机,如华为P20系列,Mate30系列。手机配置低可能造成程序卡顿。
一根连接手机的数据线。
1.2 软件环境准备
Unity 2018.4.13 及以上版本。本Demo工程使用的Unity版本为Unity 2018.4.13
File->BuildSettings->PlayerSettings->OtherSettings下面的设:
1.3 打开示例工程
打开Unity Hub,并添加项目VTuberUploadDemo和VTuberDownloadDemo。
1.4 打开示例场景
两个工程中,都是打开Assets->Scenes->DemoScene。
打开File->BuildSettings,选择Android并switch Platform(不切换运行平台,在Unity Editor里同样可以运行)。
如图1和图2所示,为Demo工程打开后的效果。
2 让虚拟角色动起来
2.1 AK和SK
打开下载工程的Assets/VTuberDownloadDemo.cs,修改Line66和Line67中的AK和SK(string ak = "*** Provide your Access Key ***"; string sk = "*** Provide your Secret Key ***")为从华为云OBS服务申请的值。
同样,打开上传工程的Assets/VTuberUploadDemo.cs,修改Line131和Line132中的AK和SK为从华为云OBS服务申请的值。
华为云OBS服务介绍与使用请参考:
https://www.huaweicloud.com/product/obs.html
2.2 桶名称
上传和下载Demo中桶名称的修改:Assets/VTuberDownloadDemo.cs的方法public MotionDataUploader getMotionDataUploader() {} 里面包含string bucketName = "vtuber-shanghai2"; 此处的桶名称需要修改为自己使用的桶名称。同样,VTuberUploadDemo.cs里面的桶名称也要对应修改为相同的。并且,所有用户的桶名称都不能相同,具体请参考OBS的桶命名规则。
2.3 节点设置
用户可以选择距离使用地点近的节点传输数据,减少时延。枚举类ObsEndpoint里面存放了可以使用的节点列表。用户可以自行设置obsEndpointEnum的值。
2.4 运行Demo
修改好AK和SK后,即可以运行Demo了。可以在Unity Editor里面直接运行,也可以发布到Android手机手机上查看效果,如图3所示。
以发布到Android手机运行为例:
1) 点击VTuberUploadDemo的开始上传按钮,程序会从Assets/StreamingAssets/MotionData.bin文件读取动作数据,上传到OBS。同时,人物会按照上传的动作数据运动。点击停止上传可以结束上传。同时,在运行过程中,会显示上传数据的时延。
2) 然后,点击VTuberDownloadDemo的开始下载按钮,程序会从OBS上下载动作数据,人物就会动起来了。同时,在运行过程中,会显示从上传动作数据到下载完成动作数据的时延。
图3 Demo运行截图
2.5 代码说明
2.5.1 VTuberUploadDemo.cs
public MotionDataUploader getMotionDataUploader(){}
此方法中的string bucketName = "vtuber-shanghai2";为上传使用的桶名称。需要修改为自己的桶名称。
motionDataUploader.setFoldName("live/UnityChan/"); 此处的文件夹名为动作数据存放的文件夹,用户可以按自己的需要进行设置。
2.5.2 VTuberDownloadDemo.cs
此方法中的string bucketName = "vtuber-shanghai2";为下载使用的桶名称,应该设置为和上传使用的桶名称相同。
motionDataUploader.setFoldName("live/UnityChan/"); 此处的文件夹名为动作数据存放的文件夹,需要与上传的文件夹相同。
注意此类需要实现ImotionDataCallback的onMotionDataDownloaded<T>(params T[] motionDataArr)方法:
public class VTuberDownloadDemo : MonoBehaviour, ImotionDataCallback{
//下载的动作数据从回调函数中获得
void IMotionDataCallback.onMotionDataDownloaded<T>(params T[] motionDataArr)
{
MotionData motionData = (MotionData)(object)motionDataArr[0]; //下载的对象数据
timeDelay = (int)(MotionDataHelper.CurrentTimeMillis() - motionData.getCreateTime());
long motionDataID = motionData.getMotionDataID();
}
}
回调函数中motionDataArr数组为下载完成的动作数据,用户可以对此数据进行后续处理。
2.5.3 其他说明
Demo中的动作数据是录制好后序列化写入到文件中的,所以Demo中并没有设置MotionData类的实例数据的方法。用户可以根据自己使用的数据格式,封装成MotionData类的格式后进行上传。其中,MotionData类定义如下:
Ø MotionData包含Hips的位置坐标和所有HumanBodyBones的Rotation坐标、表情数据(最多支持65个表情数据)。
Ø MotionData类会在创建实例的时候自动记录数据创建的时间,一般情况下不需要用户自己添加时间。MotionData类包含设置和获取ID的方法,用户可以通过此方法给MotionData编号。
- 点赞
- 收藏
- 关注作者
评论(0)