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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

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

Q&A

解決済

1回答

2604閲覧

線形補間の式に関して。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2018/11/17 06:28

編集2018/11/17 12:07

前提・実現したいこと

線形補間の式について調べて自分なりにまとめてみました。
間違っていないかご教示お願い致します。

試したこと

・質問1。
線形補間の式は、次の式で表せると思うのですが、間違っていませんか?

a→bへの線形補間 = a + (b-a)*(補間する割合(0~1))

・質問2。
線形補間の式を使って、コルーチン内のiの値をstartからendまで、duration秒かけて変化させるという処理を書いたのですが、
間違っていませんか?
ログを取ったところ、値はそのように変化していましたが、経過時間が自分でカウントして確かめるしか術がなかったので、
コードでおかしな箇所があればご指摘お願い致します。

C#

1 void Start () { 2 StartCoroutine(ChangeCoroutine(1f, 5f, 3f)); 3 } 4 5 IEnumerator ChangeCoroutine(float start, float end, float duration){ 6 float t = 0; 7 //iの値をdurationの時間をかけてstartからendまで変化させる。 8 float i = 0; 9 while(t<1){ 10 i = start + (end - start) * t; 11 t += Time.deltaTime/duration; 12 Debug.Log(i); 13 yield return null; 14 } 15 16 //調整。 17 i = end; 18 Debug.Log(i); 19 } 20}

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

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

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

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

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

guest

回答1

0

ベストアンサー

1について、特に問題はなさそうです。
ご参考までに、Mathf.Lerpの処理内容は下記のようになっていました。tを0~1におさめる処理が加えられているものの、内容的にはご質問者さんのおっしゃることと同等に思われます。

C#

1 /// <summary> 2 /// <para>Linearly interpolates between a and b by t.</para> 3 /// </summary> 4 /// <param name="a">The start value.</param> 5 /// <param name="b">The end value.</param> 6 /// <param name="t">The interpolation value between the two floats.</param> 7 /// <returns> 8 /// <para>The interpolated float result between the two float values.</para> 9 /// </returns> 10 public static float Lerp(float a, float b, float t) 11 { 12 return a + (b - a) * Mathf.Clamp01(t); 13 }

2についても、自分で実行してみたわけではないのですが、おかしくはないと思います。「経過時間が自分でカウントして確かめるしか術がなかったので」とおっしゃいますが、何か実行結果に疑わしい部分があったのでしょうか?
Unity - コルーチン内でのTime.deltaTimeに関して。|teratailを拝見しますと、どうも実行タイミングについて気にされているご様子ですが、どういった理由からでしょうか。解決したい問題についてご説明いただけますと、対処の手がかりになるかもしれません。

投稿2018/11/17 13:25

Bongo

総合スコア10807

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

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

退会済みユーザー

退会済みユーザー

2018/11/17 14:02

ご回答ありがとうございます。 いえ、特に実行結果に疑わしい部分はなかったのですが、1.に自信がなかったので、 2.もこの処理で合っているかどうか自信がなく、質問させていただきました。 ご回答者様のご回答で解決しました、ありがとうございます。 Mathf.Lerpの中身って、見ることができるのですね。 これはどのようにすれば確認することができますか? リファレンスにも載ってなかったですし、エディタのソースコードでMathf.Lerpの右クリックメニューで、定義へ移動を選択しても見つかりませんでした。
Bongo

2018/11/17 20:31

私の場合はVisual StudioにReSharper(https://www.jetbrains.com/resharper/ )をインストールしていましたので、それの機能で宣言部分に飛んだときにデコンパイルしてC#コードを見る(https://www.jetbrains.com/help/resharper/Navigation_and_Search__Go_to_Declaration.html )ことができました。 また、デコンパイラを使わなくとも、https://github.com/Unity-Technologies/UnityCsReference で実装を調べることもできます。Lerpの実装は https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Mathf.cs に載っていました。 Unityユーザが動作を調査できるようコードを公開しているらしく、ここのコードを流用して自分のプロジェクトに使うのはライセンス的にダメっぽいですが、読めるだけでもだいぶ便利かと思います。 とはいえ、肝心な部分が外部非C#実装の呼び出しになっていたりして、読めずにがっかりすることもありますが... 参考:http://tsubakit1.hateblo.jp/entry/2018/03/24/140146
退会済みユーザー

退会済みユーザー

2018/11/18 04:00

ご回答ありがとうございます。 Githubで公開されていたのですね。確認致しました。 とても勉強になります。 自分はVisual Studio Codeの方を使っているので、こちらのGithubの方を活用していきたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問