前提・実現したいこと
まず最初に謝っておきます。
Unityを使い始めたのが2週間前でc#を習ったこともなく、他のプログラミング言語も少し習った程度で、このサイトを使うも初めてなので至らないことも多いと思います。すみません。
Unityでオブジェクトを円運動させて、任意のタイミングで円運動の軌道を滑らかにずらすアニメーションを作っています。
開始から0〜5秒で(0,0,30)を中心に半径8で円運動し、
5〜10秒で中心点が(0,0,30)から(10,0,30)に滑らかに変化しつつ円運動をするようにしたいです。
それ以降の動きは変更予定です。
下記のリンクの他の似たような質問のCarly7766さんの回答を参考にしました
https://teratail.com/questions/158232
発生している問題・エラーメッセージ
製作したプログラムにエラーは出ませんでしたがUnityでアニメーションを実行すると任意のタイミングで滑らかに移動せずに瞬間移動してしまいます。 ### 該当のソースコード ```c# using System.Collections; using System.Collections.Generic; using UnityEngine; public class animation : MonoBehaviour { // Start is called before the first frame update private float speed;//回転速度 private float radius;//回転半径 private float zPosition;//回転する位置(奥行) private float count;//カウントタイマー private float endValue;//軌道を逸れる時の距離 private float duration;//軌道を逸れるのにかかる時間(逸れる速さを変えられる) float startTime;//逸れ始める時刻 float diff;//経過時間 float rate;//経過時間とduration(逸れる時間)の割合(逸れる時間に依存して0~1の間で値変化) float t;//(durationの時間かけてendValueの距離)軌道を逸れるための変数 float x;//座標 float y;//座標 float z;//座標 void Start() { speed = 1.0f;//回転速度 radius = 8.0f;//回転半径 zPosition = 30.0f;//回転する位置(奥行) t = 0;//軌道を逸れるための変数 endValue = 10;//軌道を逸れる距離 duration = 2.5f;//軌道を逸れるのにかかる時間(秒) startTime = Time.timeSinceLevelLoad;//逸れ始める時刻 count = 0.0f;//カウントタイマー } // Update is called once per frame void Update() { count += Time.deltaTime;//秒数のカウント if (5.0f <= count && count < 10.0f)//5秒から10秒の場合 { diff = Time.timeSinceLevelLoad - startTime;//経過時刻=現在時刻-開始時刻 rate = diff / duration;//割合=経過時刻/設定時間(0~1で変化) 経過時刻=設定時間で1になる t = Mathf.Lerp(0, endValue, rate);//rate(0~1)の変化にあわせて0~endValueの間を変化する変数(rateの変化する速さは設定時間に依存する) x = radius * Mathf.Sin(Time.time * speed) + t;//xの値をsin(時間*回転速度)で変化+軌道を逸れる y = radius * Mathf.Cos(Time.time * speed);//yの値をcos(時間*回転速度)で変化 z = zPosition;//zの値(奥行)は初期位置のまま transform.position = new Vector3(x, y, z);//x,y,zの位置を移動 } else if (10.0f <= count && count < 15.0f)//10秒から15秒の場合 { diff = Time.timeSinceLevelLoad - startTime; rate = diff / duration; t = Mathf.Lerp(0, endValue, rate); x = radius * Mathf.Sin(Time.time * speed) - t; y = radius * Mathf.Cos(Time.time * speed); z = zPosition; transform.position = new Vector3(x, y, z); } else if (15.0f <= count && count < 20.0f)//15秒から20秒の場合 { x = radius * Mathf.Sin(Time.time * speed); y = radius * Mathf.Cos(Time.time * speed) + 10; z = zPosition; transform.position = new Vector3(x, y, z); } else if (20.0f <= count && count < 25.0f)//20秒から25秒の場合 { x = radius * Mathf.Sin(Time.time * speed); y = radius * Mathf.Cos(Time.time * speed) - 10; z = zPosition; transform.position = new Vector3(x, y, z); } else { x = radius * Mathf.Sin(Time.time * speed); y = radius * Mathf.Cos(Time.time * speed); z = zPosition; transform.position = new Vector3(x, y, z); } } }
試したこと
軌道を逸れる速さが速すぎるのかと思い1.5秒から2.5秒にしましたが瞬間移動してるようです
回答1件
あなたの回答
tips
プレビュー