前提・実現したいこと
Mathf.Lerpとコルーチンを使って、指定時間で開始値から終了値まで値を変化させるということができると思うのですが、
どのように書けばよいでしょうか?
ご教示お願い致します。
試したこと
値を1からスタートさせて、3秒かけて5の値まで変化させる、
ということができるようなコルーチンをMathf.Lerpを使って作成したいのですが、
途中でどう書けばよいかわからなくなってしまいました。
tやdurationをどのように変化させればよいのでしょうか?
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Sample : MonoBehaviour { 6 7 void Start () { 8 StartCoroutine(ChangeCoroutine(1f, 5f, 3f)); 9 } 10 11 IEnumerator ChangeCoroutine(float start, float end, float duration){ 12 13 float t=0; 14 15 while(t<1){ 16 float i = Mathf.Lerp(start, end, t); 17 Debug.Log(i); 18 //tやdurationをどのように書けばよいかわからない。 19 yield return null; 20 } 21 } 22} 23
追記①
C#
1 void Start () { 2 float i = 0; 3 StartCoroutine(ChangeCoroutine(i, 1f, 5f, 3f)); 4 } 5 6 IEnumerator ChangeCoroutine(float value, float start, float end, float duration){ 7 8 float t=0; 9 10 while(t<1){ 11 value = Mathf.Lerp(start, end, t); 12 t += Time.deltaTime/duration; 13 Debug.Log(value); 14 yield return null; 15 } 16 17 //tが1未満でwhile文から抜ける可能性がある為、調整。 18 value = end; 19 Debug.Log(value); 20 } 21}
追記②
追記①のように変化させる値を引数で渡すコードは、実用的でなかったので、次のようなコード例を考えてみました。
C#
1 void Start () { 2 StartCoroutine(ChangeCoroutine(cube, cube.transform.position.x, 5f, 3f)); 3 } 4 5 // Update is called once per frame 6 void Update () { 7 8 } 9 10 IEnumerator ChangeCoroutine(GameObject go, float start, float end, float duration){ 11 12 float t=0; 13 float x=0; 14 while(t<1){ 15 x = Mathf.Lerp(start, end, t); 16 t += Time.deltaTime/duration; 17 go.transform.position = new Vector3(x, go.transform.position.y, go.transform.position.z); 18 yield return null; 19 } 20 21 //調整。 22 go.transform.position = new Vector3(end, go.transform.position.y, go.transform.position.z); 23 24 }
経過時間が格納されているかログで確認しました。
C#
1 float time = 0; 2 //3秒間、毎フレーム行う処理をwhile文の中に記述。 3 while(time < 3){ 4 time += Time.deltaTime; 5 Debug.Log(time); 6 yield return null; 7 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/15 15:49