質問するログイン新規登録

質問編集履歴

1

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

2019/09/19 07:16

投稿

kaghita
kaghita

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- Unityで、傾かせたままObjectの向きを変えたい
1
+ Unityで、rotationのきを維持したままObjectの向きを変えたい
body CHANGED
@@ -1,11 +1,8 @@
1
+ # 実現したいもの
1
2
  今こんなものが出来ているのですが、(画像1)
2
3
  ![イメージ説明](981b02c98d219645cd43198c27a12805.gif)
3
4
  コードはこう
4
- ```Move1.cs
5
+ ```
5
- using System.Collections;
6
- using System.Collections.Generic;
7
- using UnityEngine;
8
-
9
6
  public class Move1 : MonoBehaviour {
10
7
 
11
8
  public float speed = 0.1f;
@@ -27,18 +24,13 @@
27
24
  }
28
25
  }
29
26
  ```
30
-
31
- これをこの状態のまま、向きも変わるようにしたいんです。
27
+ これをこの状態のまま(rotationが45のまま)、向きも変わるようにしたいんです。
32
-
28
+ # 試したこと1
33
29
  一応、無料アセットStandardAssetsに付いてくるThirdPersonControllerで
34
30
  ・付属のThirdPersonUserController componentを無効化
35
31
  ・MainCameraのタグをUnTaggedに
36
32
  ・以下の移動用Scriptを作成
37
- ```Move2.cs
33
+ ```
38
- using System;
39
- using UnityEngine;
40
- using UnityStandardAssets.CrossPlatformInput;
41
-
42
34
  namespace UnityStandardAssets.Characters.ThirdPerson
43
35
  {
44
36
  [RequireComponent(typeof (ThirdPersonCharacter))]
@@ -87,15 +79,64 @@
87
79
  ![イメージ説明](0a6bf6a1a213850317d6da07b3ce5551.gif)
88
80
  これだと
89
81
  ・移動したい方向に向き切らないと進まない
90
- ・画像と違って若干移動速度が一定ではないように見える(一定速度でもっとスーッと動かしたい)
82
+ ・画像1と違って若干移動速度が一定ではないように見える(一定速度でもっとスーッと動かしたい)
91
83
  ・上下に動く時は遅くなってしまう
92
84
  で、理想とはちょっと違うんです。
93
85
 
94
86
  この動きの原因は恐らくファンクションとして使っている付属のThirdPersonCharacter.csの中にあると思うのですが
95
87
  (文字数制限なので入れられませんでした)
96
-
97
88
  http://coding-reptile.hateblo.jp/entry/2016/11/07/023330
98
89
  ここの解説を見ても、どこを弄れば理想の動きになるのか分からず苦戦してます。
99
- 出来ればThirdPersonCharacter.csの中から必要な要素だけを取り出してスッキリさせたいのですが
90
+ 出来ればThirdPersonCharacter.csの中から必要な要素だけを取り出してスッキリさせたいのですが
91
+ # 試したこと2
92
+ CharaconをやめてRigidbodyで。transform.upで回転軸を指定。
93
+ ```
94
+ public class move2 : MonoBehaviour
95
+ {
96
+ public float speed = 1f;
97
+
98
+ private Vector3 Player_pos;
100
- (あるいは別のいい方法があるのか)
99
+ private float x;
100
+ private float z;
101
+ private Rigidbody rigd;
102
+
103
+ void Start()
104
+ {
105
+ Player_pos = GetComponent<Transform>().position; //プレイヤーのポジションを取得
106
+ rigd = GetComponent<Rigidbody>();
107
+ }
108
+
109
+ void Update()
110
+ {
111
+
112
+ x = Input.GetAxisRaw("Horizontal");
113
+ z = Input.GetAxisRaw("Vertical");
114
+
115
+ rigd.velocity = new Vector3(x * speed, 0, z * speed);
116
+
117
+ Vector3 diff = transform.position - Player_pos; //初期位置と現在地の座標差分を取得
118
+
119
+ if (diff.magnitude > 0.01f)
120
+ {
121
+ transform.rotation = Quaternion.LookRotation(diff ,transform.up);//プレイヤーを回転
122
+ }
123
+
124
+ Player_pos = transform.position;
125
+
126
+ }
127
+ }
128
+ ```
129
+ 結果は画像3
130
+ ![イメージ説明](4b88eaf8f7e93b38af69bd51a5a0467b.gif)
131
+ 左右は希望通りの動きをしますが、前後入力すると強制的に傾き完全矯正
132
+ 更に、1回斜め入力を入れるごとに、半分ずつ?ぐらいに傾きが小さくなっていきます(画像4)
133
+ ![イメージ説明](c7305572b2680f379dc9ff1910e028ee.gif)
134
+ # 試したこと3
135
+ ThirdPersonCharacter.csの解読を一旦諦め、
136
+ https://gomafrontier.com/unity/2883
137
+ こちらの考えをほぼそのまま流用し、傾き45のまま対象に向かせるものを試作してみました。
138
+ 高低差が無くなっただけで、対象との位置関係とかは同じように考えられるはずなんですが、画像5のように、傾きが自動矯正されてしまいます。(Z軸X軸はちゃんと無視してくれてます)
139
+ ![イメージ説明](f77f9749e22cdad2a089df143c8660af.gif)
140
+
141
+ 色んな方法を探していますが、どうも原理が良く分かりません
101
142
  どうかアドバイスを下さい。