呼吸
最終更新: 2022年10月6日
使用CubismBreath在OW中使模型呼吸。
由于可以使参数周期性地动作,因此不仅可以应用于呼吸,还可以应用于各种项目。
可以任意指定要应用的参数。
您还可以为各参数指定周期、参数值的范围、应用数值时的Weight值。
使用CubismBreath
创建CubismBreath副本
要生成CubismBreath副本,请使用Native(C++)的CubismBreath::Create函数、或Web(TypeScript)、Java的CubismBreath.create函数。
// C++ CubismBreath* breath = CubismBreath::Create();
// TypeScript let breath: CubismBreath = CubismBreath.create();
// Java CubismBreath breath = CubismBreath.create();
指定参数
要指定设置呼吸的参数,请使用Native(C++)的CubismBreath::BreathParameterData结构、或Web(TypeScript)、Java的BreathParameterData类。
第一个参数中设置的参数ID通过CubismId*类型(SDK for Web、SDK for Java时为CubismId类型)传递。
将周期动作的偏移值传递给第2参数。从正弦波设置呼吸周期动作的值,并指定其开始位置。
在第3参数中设置正弦波的最大值。
在第4参数中设置正弦波的周期。
在第5参数中设置将值应用于参数时的权重。
// C++ csmVector<CubismBreath::BreathParameterData> breathParameters; breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleX"), 0.0f, 15.0f, 6.5345f, 0.5f)); breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleY"), 0.0f, 8.0f, 3.5345f, 0.5f)); breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamAngleZ"), 0.0f, 10.0f, 5.5345f, 0.5f)); breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamBodyAngleX"), 0.0f, 4.0f, 15.5345f, 0.5f)); breathParameters.PushBack(CubismBreath::BreathParameterData(CubismFramework::GetIdManager()->GetId("ParamBreath"), 0.5f, 0.5f, 3.2345f, 0.5f)); breath->SetParameters(breathParameters);
// TypeScript const breathParameters: csmVector<BreathParameterData> = new csmVector(); breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleX"), 0.0, 15.0, 6.5345, 0.5)); breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleY"), 0.0, 8.0, 3.5345, 0.5)); breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleZ"), 0.0, 10.0, 5.5345, 0.5)); breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamBodyAngleX"), 0.0, 4.0, 15.5345, 0.5)); breathParameters.pushBack(new BreathParameterData(CubismFramework.getIdManager().getId("ParamBreath"), 0.5, 0.5, 3.2345, 1)); breath.setParameters(breathParameters);
// Java List<CubismBreath.BreathParameterData> breathParameters = new ArrayList<>(); breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleX"), 0.0f, 15.0f, 6.5345f, 0 breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleY"), 0.0f, 8.0f, 3.5345f, 0. breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamAngleZ"), 0.0f, 10.0f, 5.5345f, 0 breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamBodyAngleX"), 0.0f, 4.0f, 15.5345 breathParameters.add(new CubismBreath.BreathParameterData(CubismFramework.getIdManager().getId("ParamBreath"), 0.5f, 0.5f, 3.2345f, 0. _breath.setParameters(breathParameters);
将值应用于模型
要应用呼吸,请使用Native(C++)的CubismBreath::UpdateParameters函数、Web(TypeScript)、Java的CubismBreath.updateParameters函数。
在第1参数中输入对象模型,在第2参数中输入与上次更新的时间差。
// C++ if (breath != NULL) { breath->UpdateParameters(cubismModel, deltaTimeSeconds); }
// TypeScript if (this._breath != null) { this._breath.updateParameters(this._model, deltaTimeSeconds); }
// Java if (breath != null) { breath.updateParameters(cubismModel, deltaTimeSeconds); }
放弃CubismBreath
您还需要在模型释放时放弃CubismBreath副本。
// C++ CubismBreath::Delete(breath);
// TypeScript CubismBreath.delete(breath);
Java不需要放弃过程,因为政策是将释放留给垃圾回收。
请问这篇文章对您有帮助吗?
是否