質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

2051閲覧

時計の針を適切に動くようにしたい

SeiSeis

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/07/24 05:22

編集2020/07/24 05:44

現在作成中のゲームで、長針を指でドラッグして時計の針を動かすギミックを実装しようと思っています。
時計といっても自動では動かないため、単純に針が回せるオブジェクトの仕様になっています

指を置いた箇所へ時計の長針を適切に動かすプログラムを作りたいのですが、Unityの内部では回転の角度を適用する際に与えられた値を0~360に自動修正するためか、12 → 11の位置に針が動く際、以下のように右回りで移動してしまいます。
イメージ説明

コードは以下のようになっています

C#

1private void UpdatePointers() //長針と短針を適切な位置へ 2 { 3 var hour_pointer_rot = currentTime / 12 * span; //現在の時間 / 針同士の間隔 4 var minute_pointer_rot = span * currentPointerDivision; //針同士の間隔 * 現在指の置かれている場所 5 6 var hourRot = hour_pointer.rotation.eulerAngles; 7 var minuteRot = pointer_minute.gameObject.transform.rotation.eulerAngles; 8 9 hourRot.z = Mathf.Lerp(hourRot.z, hour_pointer_rot, Time.deltaTime * rotateSpeed); 10 minuteRot.z = Mathf.Lerp(minuteRot.z, minute_pointer_rot, Time.deltaTime * rotateSpeed); 11 12 13 hour_pointer.rotation = Quaternion.Euler(hourRot); 14 pointer_minute.gameObject.transform.rotation = Quaternion.Euler(minuteRot); 15 }

長針に連動して短針も動いてしまっていますが、短針は指の動きには依存しないので無視してください。(結局短針の動きも長針と同じ仕組みなので12 → 11の際に右回りになってしまうのですが。。)

12 → 11の挙動を適切に実装するならどのような方法があるでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

【Unity】キャラクターから見て対象への角度を「-180~180度」の範囲で求める

こちらのサイトを参考に
「現在の針の向き」と「向かうべき文字盤への向き」から向かう方角をとり、回転させることで実装しました。
イメージ説明

投稿2020/07/25 13:41

編集2020/07/25 13:44
SeiSeis

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じでどうでしょう。

csharp

1using UnityEngine; 2using DG.Tweening; 3 4[RequireComponent(typeof(SpriteRenderer))] 5public class HandController : MonoBehaviour 6{ 7 [SerializeField] float m_time = 0.2f; 8 float m_targetAngle; 9 10 public void RotateForMinutes(int minute) 11 { 12 minute = minute % 60; 13 float angle = 360 * minute / 60; 14 m_targetAngle = angle - m_targetAngle > 30 ? angle - 360f : angle; 15 transform.DOLocalRotate(Vector3.back * m_targetAngle, m_time).SetEase(Ease.OutBack); 16 } 17}

イメージ説明

DOTween を使いました。

投稿2020/07/24 05:27

編集2020/07/24 06:50
bboydaisuke

総合スコア5291

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2020/07/24 06:10

あっと、逆回転させたいんですね。ちょっと考えます。
bboydaisuke

2020/07/24 06:53

回答を編集しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問