質問編集履歴
1
タイトル変更、見出しを付けた、試したこと2、3を追記
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Unityで、傾
|
1
|
+
Unityで、rotationの傾きを維持したままObjectの向きを変えたい
|
body
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
+
# 実現したいもの
|
1
2
|
今こんなものが出来ているのですが、(画像1)
|
2
3
|

|
3
4
|
コードはこう
|
4
|
-
```
|
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
|
-
```
|
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
|

|
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
|
+

|
131
|
+
左右は希望通りの動きをしますが、前後入力すると強制的に傾き完全矯正
|
132
|
+
更に、1回斜め入力を入れるごとに、半分ずつ?ぐらいに傾きが小さくなっていきます(画像4)
|
133
|
+

|
134
|
+
# 試したこと3
|
135
|
+
ThirdPersonCharacter.csの解読を一旦諦め、
|
136
|
+
https://gomafrontier.com/unity/2883
|
137
|
+
こちらの考えをほぼそのまま流用し、傾き45のまま対象に向かせるものを試作してみました。
|
138
|
+
高低差が無くなっただけで、対象との位置関係とかは同じように考えられるはずなんですが、画像5のように、傾きが自動矯正されてしまいます。(Z軸X軸はちゃんと無視してくれてます)
|
139
|
+

|
140
|
+
|
141
|
+
色んな方法を探していますが、どうも原理が良く分かりません
|
101
142
|
どうかアドバイスを下さい。
|