replanIfFailed
方法是 Yuka.js 库中的一个目标(Goal),用于在当前目标失败时进行重新计划。如果当前目标失败,则自动重新规划一个新目标以尝试达到预期结果。该方法需在定义目标时设置。
replanIfFailed(enabled)
enabled
:一个布尔值,指示是否开启重新计划功能。import { Goal } from 'yuka';
class MyGoal extends Goal {
constructor( entity ) {
super( entity );
this.replanIfFailed( true ); // 开启重新计划功能
}
// 其他方法
}
如果在执行 evaluate
方法时发现当前目标已经失败(FAILED
状态),则自动调用 replan
方法重新计划一个新目标,直到找到一个成功的目标或没有目标时停止。
import { Goal, Time } from 'yuka';
class WanderGoal extends Goal {
constructor( entity ) {
super( entity );
this.replanIfFailed( true );
this.targetPosition = null;
this.timeSpent = 0;
}
activate() {
this.timeSpent = 0;
this.targetPosition = this.entity.position.clone().randomize( 10 );
return Goal.STATUS_ACTIVE;
}
execute() {
if ( this.entity.position.distanceTo( this.targetPosition ) < 1 ) {
return Goal.STATUS_COMPLETED;
}
this.timeSpent += Time.deltaTime;
if ( this.timeSpent > 5 ) {
return Goal.STATUS_FAILED;
}
this.entity.steering.seek( this.targetPosition );
return Goal.STATUS_ACTIVE;
}
}
在上述示例中,当目标 WanderGoal
执行时,如果计划失败,将自动重新计划一个新目标尝试达到预期结果。如果在执行 execute
方法超过 5 秒仍未达到预期结果,该目标将标记为失败。