質問編集履歴
1
タイトル変更、見出しを付けた、試したこと2、3を追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Unityで、傾
|
1
|
+
Unityで、rotationの傾きを維持したままObjectの向きを変えたい
|
test
CHANGED
@@ -1,18 +1,12 @@
|
|
1
|
+
# 実現したいもの
|
2
|
+
|
1
3
|
今こんなものが出来ているのですが、(画像1)
|
2
4
|
|
3
5
|
![イメージ説明](981b02c98d219645cd43198c27a12805.gif)
|
4
6
|
|
5
7
|
コードはこう
|
6
8
|
|
7
|
-
```
|
9
|
+
```
|
8
|
-
|
9
|
-
using System.Collections;
|
10
|
-
|
11
|
-
using System.Collections.Generic;
|
12
|
-
|
13
|
-
using UnityEngine;
|
14
|
-
|
15
|
-
|
16
10
|
|
17
11
|
public class Move1 : MonoBehaviour {
|
18
12
|
|
@@ -56,11 +50,9 @@
|
|
56
50
|
|
57
51
|
```
|
58
52
|
|
59
|
-
|
60
|
-
|
61
|
-
これをこの状態のまま、向きも変わるようにしたいんです。
|
53
|
+
これをこの状態のまま(rotationが45のまま)、向きも変わるようにしたいんです。
|
54
|
+
|
62
|
-
|
55
|
+
# 試したこと1
|
63
|
-
|
64
56
|
|
65
57
|
一応、無料アセットStandardAssetsに付いてくるThirdPersonControllerで
|
66
58
|
|
@@ -70,15 +62,7 @@
|
|
70
62
|
|
71
63
|
・以下の移動用Scriptを作成
|
72
64
|
|
73
|
-
```
|
65
|
+
```
|
74
|
-
|
75
|
-
using System;
|
76
|
-
|
77
|
-
using UnityEngine;
|
78
|
-
|
79
|
-
using UnityStandardAssets.CrossPlatformInput;
|
80
|
-
|
81
|
-
|
82
66
|
|
83
67
|
namespace UnityStandardAssets.Characters.ThirdPerson
|
84
68
|
|
@@ -176,7 +160,7 @@
|
|
176
160
|
|
177
161
|
・移動したい方向に向き切らないと進まない
|
178
162
|
|
179
|
-
・画像
|
163
|
+
・画像1と違って若干移動速度が一定ではないように見える(一定速度でもっとスーッと動かしたい)
|
180
164
|
|
181
165
|
・上下に動く時は遅くなってしまう
|
182
166
|
|
@@ -188,14 +172,112 @@
|
|
188
172
|
|
189
173
|
(文字数制限なので入れられませんでした)
|
190
174
|
|
191
|
-
|
192
|
-
|
193
175
|
http://coding-reptile.hateblo.jp/entry/2016/11/07/023330
|
194
176
|
|
195
177
|
ここの解説を見ても、どこを弄れば理想の動きになるのか分からず苦戦してます。
|
196
178
|
|
197
|
-
出来ればThirdPersonCharacter.csの中から必要な要素だけを取り出してスッキリさせたいのですが
|
179
|
+
出来ればThirdPersonCharacter.csの中から必要な要素だけを取り出してスッキリさせたいのですが…
|
180
|
+
|
198
|
-
|
181
|
+
# 試したこと2
|
182
|
+
|
183
|
+
CharaconをやめてRigidbodyで。transform.upで回転軸を指定。
|
184
|
+
|
185
|
+
```
|
186
|
+
|
187
|
+
public class move2 : MonoBehaviour
|
188
|
+
|
189
|
+
{
|
190
|
+
|
191
|
+
public float speed = 1f;
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
private Vector3 Player_pos;
|
196
|
+
|
199
|
-
|
197
|
+
private float x;
|
198
|
+
|
199
|
+
private float z;
|
200
|
+
|
201
|
+
private Rigidbody rigd;
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
void Start()
|
206
|
+
|
207
|
+
{
|
208
|
+
|
209
|
+
Player_pos = GetComponent<Transform>().position; //プレイヤーのポジションを取得
|
210
|
+
|
211
|
+
rigd = GetComponent<Rigidbody>();
|
212
|
+
|
213
|
+
}
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
void Update()
|
218
|
+
|
219
|
+
{
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
x = Input.GetAxisRaw("Horizontal");
|
224
|
+
|
225
|
+
z = Input.GetAxisRaw("Vertical");
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
rigd.velocity = new Vector3(x * speed, 0, z * speed);
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
Vector3 diff = transform.position - Player_pos; //初期位置と現在地の座標差分を取得
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
if (diff.magnitude > 0.01f)
|
238
|
+
|
239
|
+
{
|
240
|
+
|
241
|
+
transform.rotation = Quaternion.LookRotation(diff ,transform.up);//プレイヤーを回転
|
242
|
+
|
243
|
+
}
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
Player_pos = transform.position;
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
}
|
252
|
+
|
253
|
+
}
|
254
|
+
|
255
|
+
```
|
256
|
+
|
257
|
+
結果は画像3
|
258
|
+
|
259
|
+
![イメージ説明](4b88eaf8f7e93b38af69bd51a5a0467b.gif)
|
260
|
+
|
261
|
+
左右は希望通りの動きをしますが、前後入力すると強制的に傾き完全矯正
|
262
|
+
|
263
|
+
更に、1回斜め入力を入れるごとに、半分ずつ?ぐらいに傾きが小さくなっていきます(画像4)
|
264
|
+
|
265
|
+
![イメージ説明](c7305572b2680f379dc9ff1910e028ee.gif)
|
266
|
+
|
267
|
+
# 試したこと3
|
268
|
+
|
269
|
+
ThirdPersonCharacter.csの解読を一旦諦め、
|
270
|
+
|
271
|
+
https://gomafrontier.com/unity/2883
|
272
|
+
|
273
|
+
こちらの考えをほぼそのまま流用し、傾き45のまま対象に向かせるものを試作してみました。
|
274
|
+
|
275
|
+
高低差が無くなっただけで、対象との位置関係とかは同じように考えられるはずなんですが、画像5のように、傾きが自動矯正されてしまいます。(Z軸X軸はちゃんと無視してくれてます)
|
276
|
+
|
277
|
+
![イメージ説明](f77f9749e22cdad2a089df143c8660af.gif)
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
色んな方法を探していますが、どうも原理が良く分かりません
|
200
282
|
|
201
283
|
どうかアドバイスを下さい。
|