この書き方にするなら単純にEulerAngleVelocity
が0になれば回転しなくて済むんじゃないでしょうか?
いただいたコードをそのまま使うと、とりあえずこんな書き方でも止まるのかなと思いますが。どうでしょうか
cs
1 using System . Collections ;
2 using System . Collections . Generic ;
3 using UnityEngine ;
4
5 public class NewBehaviourScript01 : MonoBehaviour {
6
7 Rigidbody m_Rigidbody ;
8 Vector3 m_EulerAngleVelocity = Vector3 . zero ;
9
10 void Start ( ) {
11 m_Rigidbody = GetComponent < Rigidbody > ( ) ;
12
13 StartCoroutine ( "Eu" ) ;
14 }
15
16 void FixedUpdate ( ) {
17 Quaternion deltaRotation = Quaternion . Euler ( m_EulerAngleVelocity * Time . deltaTime ) ;
18 m_Rigidbody . MoveRotation ( m_Rigidbody . rotation * deltaRotation ) ;
19 }
20
21 private IEnumerator Eu ( ) {
22 yield return new WaitForSeconds ( 5 ) ;
23 m_EulerAngleVelocity = new Vector3 ( 0 , 0 , 1000 ) ;
24 yield return new WaitForSeconds ( 5 ) ;
25 m_EulerAngleVelocity = new Vector3 ( 0 , 0 , 0 ) ;
26 }
27
28 }
29
30
追記
徐々に止めるっていうことは、n秒かけて変更していく形になるので変更する度合いを時間で割合を計算して代入していってあげると目的の動きになるかと思います。
ちなみにStartCoroutine(ChangeAngle(new Vector3(0, 0, 1000), 5f));
とか書けば、5秒かけて回転が加速していくかと思います。
cs
1 using System . Collections ;
2 using System . Collections . Generic ;
3 using UnityEngine ;
4
5 public class NewBehaviourScript01 : MonoBehaviour {
6
7
8 Rigidbody m_Rigidbody ;
9 Vector3 m_EulerAngleVelocity = Vector3 . zero ;
10
11 float stopDuration = 1 ;
12
13 void Start ( ) {
14 m_Rigidbody = GetComponent < Rigidbody > ( ) ;
15 StartCoroutine ( "Eu" ) ;
16
17 }
18
19 void FixedUpdate ( ) {
20 Quaternion deltaRotation = Quaternion . Euler ( m_EulerAngleVelocity * Time . deltaTime ) ;
21 m_Rigidbody . MoveRotation ( m_Rigidbody . rotation * deltaRotation ) ;
22 }
23
24 private IEnumerator Eu ( ) {
25 yield return new WaitForSeconds ( 5 ) ;
26 m_EulerAngleVelocity = new Vector3 ( 0 , 0 , 1000 ) ;
27
28 // 5秒かけて回転速度を0にする
29 StartCoroutine ( ChangeAngle ( new Vector3 ( 0 , 0 , 0 ) , 5f ) ) ;
30 }
31
32 private IEnumerator ChangeAngle ( Vector3 endAngle , float duration ) {
33
34 // 現在の回転速度を取得
35 var nowAngleVel = m_EulerAngleVelocity ;
36
37 // スタート時間を取得
38 float startTime = Time . time ;
39
40 // 終了時間を求める
41 float endTime = startTime + duration ;
42
43 do {
44 // 効果時間に対する現在の割合を求める
45 float timeRate = ( Time . time - startTime ) / duration ;
46
47 // 回転速度を更新
48 var vel = ( endAngle - nowAngleVel ) * timeRate + nowAngleVel ;
49
50 // 回転速度の反映
51 m_EulerAngleVelocity = vel ;
52
53 // 1フレーム待機
54 yield return null ;
55
56 } while ( Time . time < endTime ) ; // 現在のタイムが終了時間に達するまでループ
57
58 // 最終的な回転速度を代入して終了
59 m_EulerAngleVelocity = endAngle ;
60
61 }
62
63 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/21 01:05
2020/05/21 01:09
2020/05/21 01:16
2020/05/21 01:24
2020/05/21 01:37
2020/05/21 01:40
2020/05/21 01:43
2020/05/21 01:47
2020/05/21 01:50
2020/05/21 01:53
2020/05/21 01:53
2020/05/21 01:53