質問編集履歴

1

タイトル変更、見出しを付けた、試したこと2、3を追記

2019/09/19 07:16

投稿

kaghita
kaghita

スコア8

test CHANGED
@@ -1 +1 @@
1
- Unityで、傾かせたままObjectの向きを変えたい
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
- ```Move1.cs
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
- ```Move2.cs
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
  どうかアドバイスを下さい。