回答編集履歴

3

ソース修正

2020/05/21 02:04

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -88,12 +88,6 @@
88
88
 
89
89
  using UnityEngine;
90
90
 
91
- using System.Linq;
92
-
93
- using UnityEngine.UI;
94
-
95
- using Util;
96
-
97
91
 
98
92
 
99
93
  public class NewBehaviourScript01 : MonoBehaviour {

2

ソース修正

2020/05/21 02:04

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -96,7 +96,7 @@
96
96
 
97
97
 
98
98
 
99
- public class Test : MonoBehaviour {
99
+ public class NewBehaviourScript01 : MonoBehaviour {
100
100
 
101
101
 
102
102
 

1

追記

2020/05/21 02:02

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -67,3 +67,151 @@
67
67
 
68
68
 
69
69
  ```
70
+
71
+
72
+
73
+ # 追記
74
+
75
+ 徐々に止めるっていうことは、n秒かけて変更していく形になるので変更する度合いを時間で割合を計算して代入していってあげると目的の動きになるかと思います。
76
+
77
+
78
+
79
+ ちなみに``StartCoroutine(ChangeAngle(new Vector3(0, 0, 1000), 5f));`` とか書けば、5秒かけて回転が加速していくかと思います。
80
+
81
+
82
+
83
+ ```cs
84
+
85
+ using System.Collections;
86
+
87
+ using System.Collections.Generic;
88
+
89
+ using UnityEngine;
90
+
91
+ using System.Linq;
92
+
93
+ using UnityEngine.UI;
94
+
95
+ using Util;
96
+
97
+
98
+
99
+ public class Test : MonoBehaviour {
100
+
101
+
102
+
103
+
104
+
105
+ Rigidbody m_Rigidbody;
106
+
107
+ Vector3 m_EulerAngleVelocity = Vector3.zero;
108
+
109
+
110
+
111
+ float stopDuration = 1;
112
+
113
+
114
+
115
+ void Start() {
116
+
117
+ m_Rigidbody = GetComponent<Rigidbody>();
118
+
119
+ StartCoroutine("Eu");
120
+
121
+
122
+
123
+ }
124
+
125
+
126
+
127
+ void FixedUpdate() {
128
+
129
+ Quaternion deltaRotation = Quaternion.Euler(m_EulerAngleVelocity * Time.deltaTime);
130
+
131
+ m_Rigidbody.MoveRotation(m_Rigidbody.rotation * deltaRotation);
132
+
133
+ }
134
+
135
+
136
+
137
+ private IEnumerator Eu() {
138
+
139
+ yield return new WaitForSeconds(5);
140
+
141
+ m_EulerAngleVelocity = new Vector3(0, 0, 1000);
142
+
143
+
144
+
145
+ // 5秒かけて回転速度を0にする
146
+
147
+ StartCoroutine(ChangeAngle(new Vector3(0, 0, 0), 5f));
148
+
149
+ }
150
+
151
+
152
+
153
+ private IEnumerator ChangeAngle(Vector3 endAngle, float duration) {
154
+
155
+
156
+
157
+ // 現在の回転速度を取得
158
+
159
+ var nowAngleVel = m_EulerAngleVelocity;
160
+
161
+
162
+
163
+ // スタート時間を取得
164
+
165
+ float startTime = Time.time;
166
+
167
+
168
+
169
+ // 終了時間を求める
170
+
171
+ float endTime = startTime + duration;
172
+
173
+
174
+
175
+ do {
176
+
177
+ // 効果時間に対する現在の割合を求める
178
+
179
+ float timeRate = (Time.time - startTime) / duration;
180
+
181
+
182
+
183
+ // 回転速度を更新
184
+
185
+ var vel = (endAngle - nowAngleVel) * timeRate + nowAngleVel;
186
+
187
+
188
+
189
+ // 回転速度の反映
190
+
191
+ m_EulerAngleVelocity = vel;
192
+
193
+
194
+
195
+ // 1フレーム待機
196
+
197
+ yield return null;
198
+
199
+
200
+
201
+ } while (Time.time < endTime); // 現在のタイムが終了時間に達するまでループ
202
+
203
+
204
+
205
+ // 最終的な回転速度を代入して終了
206
+
207
+ m_EulerAngleVelocity = endAngle;
208
+
209
+
210
+
211
+ }
212
+
213
+
214
+
215
+ }
216
+
217
+ ```