/// <summary> /// カメラを動かすコルーチン /// </summary> /// <returns></returns> IEnumerator MoveCameraCoruetine(StoryPageData data) { pointCount++; IsMove = true; //目標の座標 var endPos = data.points[pointCount].pos; //目標座標までの距離の計算 var camPos2D = (Vector2)camera.transform.position; var endDistVec = endPos - camPos2D; var endDist = endDistVec.magnitude; //移動方向の計算 var dir = endDistVec.normalized; //総移動距離 float totalDist = 0.0f; //最初のカメラの描画サイズ var beginSize = camera.orthographicSize; //最終的なカメラの描画サイズ var endSize = data.points[pointCount].size; //カメラの変動する描画サイズ var diffSize = endSize - beginSize; while (true) { yield return(null); //今フレームの移動距離 float movDist = cameraSpeed * Time.deltaTime; //カメラを移動させる camera.transform.position += (Vector3)dir * movDist; //camera.transform.position //移動させた分だけ移動した距離に加算 totalDist += movDist; //Debug.Log("総移動距離 " + totalDist ); //カメラサイズの変更 camera.orthographicSize = beginSize + (diffSize * totalDist / endDist); //終了条件 if (totalDist >= endDist) { camera.transform.position = new Vector3(endPos.x, endPos.y, -1f); camera.orthographicSize = endSize; break; } } IsMove = false; }
// IEnumerator MovePageCoroutine(StoryPageData data) { if (pointCount < data.points.Length - 1 && IsMove == false) { yield return(StartCoroutine(MoveCameraCoruetine(data))); } while (pointCount < data.points.Length - 1) { yield return(0); if (Input.GetMouseButtonDown(0)) { if (pointCount < data.points.Length - 1 && IsMove == false) { yield return(StartCoroutine(MoveCameraCoruetine(data))); } } } Debug.Log("ページ終了" + data.name); pointCount = -1; }