こんにちは、開発Gの杉原です。
昨日、水曜にもかかわらずなぜか火曜日気分でして。
つられて今日も水曜日だと思ってたら、木曜日、つまりはこのブログの担当日じゃないですか。
うっかりすっかり忘れておりました。
しかもこの後外出なので、超急いで記事を書きます。残り15分、頑張ります。
さて、今回はTransferのキャンセルについて説明いたします。
先週まで、Transferの一連の流れについて説明いたしました。
しかし、Transferは必ずしも最後まで行われるとは限りません。
例えば、搬送の途中で搬送先でトラブルが発生し、ワークを受け入れることができなくなったとします。
そうなると、現実的には搬送を途中で取りやめ、ほかに搬送できる先があるのであれば、そこへ搬送先を変更することになるかと思います。
ここでいうトラブルとは、Demo3Dのプログラム、スクリプトのエラーではなく、機器の故障などをいいます。
さすがにDemo3Dは実際の機器とは違って突然シーン上の機器が故障するなんてことはないのですが、例えば以前ご紹介した乱数を使って、機器の故障率に基づいてランダムで故障を発生させることも、おそらくは可能です。
(すみません、実際に作ってみたことはないですが、きっとできます、きっと)
そんな折に、Transferをキャンセルする必要がでてくるわけです。
Transferのキャンセル方法は次の通りです。
///[Optimize(false)] function OnRxTransferStarted( sender : Visual, transfer : Transfer ) { transfer.Cancel(); }
[Auto] void OnRxTransferStarted( Visual sender, Transfer transfer) { transfer.Cancel(); }
手を抜いてRxTransferStartedイベントの処理を例に出していますが、こんな感じでTransferオブジェクトのCancelメソッドを使って搬送をキャンセルすることができます。
RxTransferStartedイベントを例に出したのは、標準カタログにもありますVehicleProgramなどでTransferを一度キャンセルして再作成するような処理を行っているためです。
VehicleProgramでは、自身では搬送できないので、配下のVehicleを搬送元としてTransferを作り直しています。
Transferのキャンセルはこうした使い方もできるわけですね。
こうしてTransferがキャンセルされると、OnTransferCancelledイベントが発生します。
冒頭にあげた機器の故障を例にとると、このイベントで搬送元は新しい搬送先を見つけるための処理をすればいいわけですね。
ただ注意したいのは、先ほど紹介したように、VehicleProgramは別の理由でTransferをキャンセルしています。
そのため、故障によるTransferキャンセルを実装するのであれば、VehicleProgramのようなTransferの再作成のためのTransferキャンセルと混在してしまわないように考慮する必要があります。
と、いうわけでここまで15分ほどで頑張って書き上げました。
検証ができなかったので、ちょっと不備があるかもしれません。
そこで次回は、今回の補足があればその補足を含め、ちょっと全体のおさらいでもしようかと思います。
ということで次回の【How to Demo3D Scripting】は「Transferのまとめ」をお送りします。
更新は6/7(木)です。お楽しみに。
コメントをお書きください