Unityでストップウォッチを作る その7 「分」のサークルを作る

Pocket

前回で「秒」を表示するサークルが出来上がりましたので、これをコピーして「分」のサークルも作ります。

オブジェクトの複製と設定

シーンの「SecTimeCircle」を選択した状態でコピー&ペーストをして複製します。新たに出来たオブジェクトの名前を「MinTimeCircle」と変更してください。

unitysw_7_1.png

複製したオブジェクトはほぼそのまま再利用しますが、メッシュだけは変更します。Projectウィンドウで新たに2つメッシュを作ってそれぞれ「MinTimeCircleMesh」「MinNeedleMesh」と名前を変更し、「MinTimeCircle」とその中にある「Needle」オブジェクトのメッシュを差し替えてください。

unitysw_7_2.png
unitysw_7_3.png

「MinTimeCircle」のインスペクタの値を以下の様に変更してください。

・Line Radius > 530
・Number Radius > 554
・Part Line Count > 6
・Texture Offset X > 20

unitysw_7_4.png

「MinTImeCircle」内の「Needle」のインスペクタの値を以下の様に変更してください。

・Position Y > 506
・Rotation Z > 180
・Texture Offset X > 20

unitysw_7_5.png

「TimeCircleController.cs」に「分」のサークルをコントロールするコードを追加します。「TimeCircleController.cs」を以下のコードに差し替えてください。

using UnityEngine;
using System;
using System.Collections;
public class TimeCircleController : MonoBehaviour {
 public AngleAnimation secCircleAngleAnimation;
 public AngleAnimation minCircleAngleAnimation; // <- 1行追加
 public float circleAnimDuration = 0.2f;
 
 public AngleAnimation secNeedleAngleAnimation;
 public AngleAnimation minNeedleAngleAnimation; // <- 1行追加
 public float needleAnimDuration = 0.1f;
 
 public void SetTime(TimeSpan ts, bool animate = false)
 {
   float secAngle = (float)((ts.TotalMinutes - Math.Truncate(ts.TotalMinutes)) * 360.0);
   
   if (secCircleAngleAnimation) {
     secCircleAngleAnimation.SetAngle(secAngle, animate, circleAnimDuration);
   }
   
   if (secNeedleAngleAnimation) {
     secNeedleAngleAnimation.SetAngle(-secAngle, animate, needleAnimDuration);
   }
   
   // ここから追加 ->
   float minAngle = (float)((ts.TotalHours - Math.Truncate(ts.TotalHours)) * 360.0);
   
   if (minCircleAngleAnimation) {
     minCircleAngleAnimation.SetAngle(minAngle, animate, circleAnimDuration);
   }
   
   if (minNeedleAngleAnimation) {
     minNeedleAngleAnimation.SetAngle(-minAngle, animate, needleAnimDuration);
   }
   // <- ここまで追加
 }
}

「Circles」オブジェクトの「TimeCircleController」のインスペクタに新たに「Min Circle Angle Animation」と「Min Needle Angle Animation」という項目が追加されています。「Min Circle Angle Animation」に「MinTimeCircle」オブジェクトをアサインし、「Min Needle Angle Animation」には「MinTimeCircle」内の「NeedleHandle」オブジェクトをアサインしてください。

unitysw_7_6.png

これで「秒」と「分」のサークルがそれぞれ計測時間に応じてきちんと動く様になっていると思います。

解説

「MinTimeCircle」や「Needle」で変更したところは主に位置調整です。「Part Line Count」で1分の間の目盛りの間隔を10秒単位の6にしています。あと、「Texture Offset X」でテクスチャに描画する位置を「秒」のものと被らないようにしていますので、目盛りや針の色を変えることも出来る様になっています。

今回のWebPlayerビルド

ここまで出来るとだいぶBigStopWatchっぽくなってきましたが、今の状態だと積算できないストップウォッチのままなので、次回はリセットボタンを作りたいと思います。

前へ | 次へ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です