🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

1回答

1067閲覧

可変抵抗の入力値に応じてダイヤルを回転させる方法

go53

総合スコア12

Unity3D

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2019/10/15 07:34

現在、Arduinoを介した可変抵抗(図1)の回転値に応じて、ダイヤル(図2)が回転するスクリプトを作っています。
Arduino - Unity間の通信はアセットUduinoを通して行っています。

現在のスクリプトが下記です。

using System.Collections; using System.Collections.Generic; using UnityEngine; using Uduino; public class daiyaruswmwasu : MonoBehaviour { int readValue = 0; public GameObject cube; void Start() { UduinoManager.Instance.pinMode(AnalogPin.A2, PinMode.Input); } void Update() { readValue = UduinoManager.Instance.analogRead(AnalogPin.A2, "PinRead"); cube.transform.Rotate(0, readValue, 0, Space.Self); UduinoManager.Instance.SendBundle("PinRead"); } }

このスクリプトで可変抵抗を回転させた所、ダイヤルがずっと回っています。
readValueが0の時は回らないのですが、0より大きくなるとその回転角度でずっと回っています。

そういう動きではなくて、可変抵抗を回した分だけ、ダイヤルが連動し回転するようにしたいです。
つまり可変抵抗を20°から50°まで回転させたら、ダイヤルも20°から50°に回るような感じです。
イメージ説明
イメージ説明

初心者の質問で申し訳ないですが、よろしくお願い致します。

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

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

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

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

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

hogefugapiyo

2019/10/17 03:54

UduinoManager.Instance.analogRead(AnalogPin.A2, "PinRead"); で得られる値はなんですか? オイラー角? -1 ~ 1 の正規化された値?
go53

2019/10/17 04:34

0から666ぐらいまでの整数です。 可変抵抗を回したら数値が大きくなっていきます。
guest

回答1

0

Rotate関数というのは、現在位置から引数分加算した位置に移動するってのですんで、
繰り返しreadValue分加算し続けると回りっぱなしになってしまいますね

ボリウムが変化したら、一回だけ実行するようにしましょう

投稿2019/10/15 07:58

y_waiwai

総合スコア88038

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

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

go53

2019/10/17 02:40

回答ありがとうございます。 1回だけ実行というのがやり方がわからず、awakeとかを使えばいいんでしょうか? 1回だけ実行にした時に、可変抵抗を初めて回した時だけダイヤルが回るけど、それ以降は回らない、という風にはしたくないんですが、そういった所も大丈夫なんでしょうか?
coco_bauer

2019/10/17 05:04

ボリュームの値を読み取る。  直近に読み取った値と、新たに読み取った値が同じなら、何もしない(ボリュームは回っていないから)  値が違ったら、差分だけダイヤルを回す(ボリュームの値が減ったら、逆方向に回す)。  新たに読み取った値を保存(記録)しておく。 という動作を繰り返せば良いのでは? 「ボリュームから読み取った値の分だけダイヤルを回す」だとダイヤルが回りっぱなしになるので、 「ボリュームから読み取った値の差分だけダイヤルを回す」にすることがポイントかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問