回答編集履歴
2
FixedUpdateの実行間隔について実験
answer
CHANGED
@@ -128,4 +128,36 @@
|
|
128
128
|
}
|
129
129
|
}
|
130
130
|
}
|
131
|
-
```
|
131
|
+
```
|
132
|
+
|
133
|
+
**FixedUpdateの世界の時間の流れと実際の時間の流れの比較**
|
134
|
+
```C#
|
135
|
+
using UnityEngine;
|
136
|
+
|
137
|
+
public class FixedTimeVersusRealTime : MonoBehaviour
|
138
|
+
{
|
139
|
+
private float previousFixedTime;
|
140
|
+
private float previousRealTime;
|
141
|
+
|
142
|
+
private void Start()
|
143
|
+
{
|
144
|
+
this.previousFixedTime = Time.fixedTime;
|
145
|
+
this.previousRealTime = Time.realtimeSinceStartup;
|
146
|
+
}
|
147
|
+
|
148
|
+
private void FixedUpdate()
|
149
|
+
{
|
150
|
+
var fixedTime = Time.fixedTime;
|
151
|
+
var realTime = Time.realtimeSinceStartup;
|
152
|
+
var fixedDeltaTime = fixedTime - this.previousFixedTime;
|
153
|
+
var realDeltaTime = realTime - this.previousRealTime;
|
154
|
+
|
155
|
+
Debug.Log($"Fixed:{fixedTime:F5} Delta:{fixedDeltaTime:F5} Real:{realTime:F5} Delta:{realDeltaTime:F5}");
|
156
|
+
|
157
|
+
this.previousFixedTime = fixedTime;
|
158
|
+
this.previousRealTime = realTime;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
```
|
162
|
+
|
163
|
+

|
1
コードの計算量を削減
answer
CHANGED
@@ -74,4 +74,58 @@
|
|
74
74
|
|
75
75
|

|
76
76
|
|
77
|
-
ですがわざわざ[Exp](https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Exp.html)なんかを使ってまで調整精度を上げるだけの価値があるかというと微妙でした。
|
77
|
+
ですがわざわざ[Exp](https://docs.unity3d.com/ja/current/ScriptReference/Mathf.Exp.html)なんかを使ってまで調整精度を上げるだけの価値があるかというと微妙でした。
|
78
|
+
|
79
|
+
**計算量削減、基準フレームレートとイージング調整値を変更できるように修正**
|
80
|
+
```C#
|
81
|
+
using System;
|
82
|
+
using UnityEngine;
|
83
|
+
|
84
|
+
public class LerpAndDeltaTime : MonoBehaviour
|
85
|
+
{
|
86
|
+
public enum Mode
|
87
|
+
{
|
88
|
+
Coarse,
|
89
|
+
Fine
|
90
|
+
}
|
91
|
+
|
92
|
+
[SerializeField] private float deltaTime = 1.0f / 60.0f;
|
93
|
+
[SerializeField] private float duration = 2.0f;
|
94
|
+
[SerializeField] private Mode mode;
|
95
|
+
[SerializeField] private GameObject dotPrefab;
|
96
|
+
[SerializeField] private float damping = 1.0f;
|
97
|
+
[SerializeField] private double referenceFrameRate = 60.0;
|
98
|
+
|
99
|
+
private float time;
|
100
|
+
|
101
|
+
private void Start()
|
102
|
+
{
|
103
|
+
var y = 0.0f;
|
104
|
+
var referenceDeltaTime = 1.0 / this.referenceFrameRate;
|
105
|
+
while (this.time < this.duration)
|
106
|
+
{
|
107
|
+
switch (this.mode)
|
108
|
+
{
|
109
|
+
case Mode.Coarse:
|
110
|
+
// 単純なdeltaTimeによる調整
|
111
|
+
y = Mathf.Lerp(y, 1.0f, this.damping * this.deltaTime);
|
112
|
+
break;
|
113
|
+
case Mode.Fine:
|
114
|
+
// referenceFrameRate FPSのときのカーブに近づくよう補正した調整
|
115
|
+
var t = (float)(1.0 - Math.Pow(
|
116
|
+
1.0 - (this.damping * referenceDeltaTime),
|
117
|
+
this.referenceFrameRate * this.deltaTime));
|
118
|
+
y = Mathf.Lerp(y, 1.0f, t);
|
119
|
+
break;
|
120
|
+
}
|
121
|
+
|
122
|
+
this.time += this.deltaTime;
|
123
|
+
Instantiate(
|
124
|
+
this.dotPrefab,
|
125
|
+
this.transform.position + new Vector3(this.time, y, 0.0f),
|
126
|
+
Quaternion.identity,
|
127
|
+
this.transform);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
```
|