private IEnumerator Climb() { onClimbStart.Invoke(); var link = agent.currentOffMeshLinkData; var fwd = link.offMeshLink.endTransform.forward; var btm = link.offMeshLink.endTransform.position; var p1 = new Vector3(btm.x, link.startPos.y, btm.z); var p2 = new Vector3(btm.x, link.endPos.y, btm.z); if (p2.y - p1.y < 0f) // 降りる時: 近寄る→ジャンプで飛びつかみ→降りる { yield return(CloseTo(link.startPos, 0.4f)); yield return(JumpTo(p1, fwd)); agent.isStopped = true; // エージェント処理停止 yield return(ClimbOrDescend(p1, p2, fwd)); } else // 登る時:近寄る→登る→ジャンプで飛び降り { agent.isStopped = true; // エージェント処理停止 yield return(CloseTo(p1, 0.3f)); yield return(ClimbOrDescend(p1, p2, fwd)); yield return(JumpTo(link.endPos, fwd)); } // オフメッシュリンク移動終了+エージェント処理再開。 animatorCtrl.Climb(false); mTrans.position = link.endPos; agent.CompleteOffMeshLink(); agent.isStopped = false; onClimbEnd.Invoke(); }