动画 / SubStance
SubStance Class
二级姿态
二级姿态是动画系统的拓展, 用于实现独立于基础姿态外的复杂动画逻辑(如持枪, 攀爬等)。
基二级姿态资源同基础姿态(Stance)也是一个外部的资源,打包后生成的文件被上传到资源服务器, 你可以在本地资源库中的基础姿态分类下查找并下载它们。
同样拥有 loadSubStance 、play、stop等功能
还有额外出色的混合模式,详见 StanceBlendMode 。
Hierarchy
StanceBase
↳
SubStance
Table of contents
Accessors
assetId(): string |
---|
资源GUID |
blendMode(): StanceBlendMode |
姿态的混合模式 |
Methods
play(): boolean |
---|
播放姿态 |
stop(): boolean |
停止这个姿态对象, 并返回执行结果 |
Accessors
assetId
• | ||
---|---|---|
资源GUID Returns
|
ts
@Component
export default class Example_SubStance_AssetId extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
@Component
export default class Example_SubStance_AssetId extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
blendMode
• | • | ||||
---|---|---|---|---|---|
姿态的混合模式 Returns
| 姿态的混合模式 Precautions 姿态的播放位置(上半身, 下半身, 全身), 对正在播放的姿态修改时无效. 如果这个姿态是通过预制姿态资源GUID创建的, 那么它的默认值会自动从资源上获取; 如果是通过动画资源GUID创建的, 那么它的默认值为StanceBlendMode.WholeBody. Parameters
|
ts
@Component
export default class Example_SubStance_BlendMode extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
@Component
export default class Example_SubStance_BlendMode extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
Methods
play
• play(): boolean
播放姿态
Returns
boolean | 播放结果,当未进行资源加载时,会返回false,但内部会进行资源异步加载,并在完成后播放。 |
---|
Precautions
播放这个姿态对象, 并返回执行结果. 这个操作是否会自动同步多端, 取决于调用端,服务端广播生效,客户端本地生效。
ts
@Component
export default class Example_SubStance_Play extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
@Component
export default class Example_SubStance_Play extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
stop
• stop(): boolean
停止这个姿态对象, 并返回执行结果
Returns
boolean | 停止结果 |
---|
Precautions
停止这个姿态对象, 并返回执行结果. 这个操作是否会自动同步多端, 取决于调用端,服务端广播生效,客户端本地生效。
ts
@Component
export default class Example_SubStance_Stop extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}
@Component
export default class Example_SubStance_Stop extends Script {
// 当脚本被实例后,会在第一帧更新前调用此函数
protected onStart(): void {
// 下列代码仅在客户端执行
if(SystemUtil.isClient()) {
// 获取当前客户端玩家
let myPlayer = Player.localPlayer;
// 获取玩家控制角色
let myCharacter = myPlayer.character;
// 给角色加载仅上半身瞄准姿态
let aimStance = myCharacter.loadSubStance("94261");
aimStance.blendMode = StanceBlendMode.BlendUpper;
console.log("aimStance assetId " + aimStance.assetId);
// 给角色加载仅下半身踢腿姿态
let kickStance = myCharacter.loadSubStance("14520");
kickStance.blendMode = StanceBlendMode.BlendLower;
console.log("kickStance assetId " + kickStance.assetId);
// 添加一个按键方法:按下键盘“1”,切换播放瞄准姿态和踢腿姿态
InputUtil.onKeyDown(Keys.One, () => {
if(myCharacter.currentSubStance == aimStance) {
kickStance.play();
} else {
aimStance.play();
}
});
// 添加一个按键方法:按下键盘“2”,停止播放姿态
InputUtil.onKeyDown(Keys.Two, () => {
if(myCharacter.currentSubStance) {
myCharacter.currentSubStance.stop();
}
});
}
}
}