回答編集履歴
1
ミス修正
test
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
提示されているスクリプトを見るに二つのスクリプトを混ぜたと思われますが、Qiitaのスクリプトのみで上手くいくと思います。
|
2
2
|
|
3
|
-
なので、一度Qiitaのスクリプトまるまるコピーし、操作キャラにアタッチ(スクリプトを付ける)してみてください。
|
3
|
+
~~なので、一度Qiitaのスクリプトまるまるコピーし、操作キャラにアタッチ(スクリプトを付ける)してみてください。~~
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
**追記**
|
8
|
+
|
9
|
+
すいません、これ3D用のスクリプトですね、そりゃ上手く動かない訳です...。
|
10
|
+
|
11
|
+
2Dと3Dでは少々変更が必要なので手を加えます。
|
4
12
|
|
5
13
|
|
6
14
|
|
@@ -24,7 +32,7 @@
|
|
24
32
|
|
25
33
|
このスクリプトでは`rigd.velocity`で移動を行っています、恐らく目にする機会が多い移動方法は`tarnsform.position`を使った移動方法だと思いますが、これは正確には自身の居場所をワープさせるような移動の方法なので、壁をすり抜けたりする可能性を秘めています。
|
26
34
|
|
27
|
-
なので、Rigidbodyを用いた移動方法にしているんじゃないでしょうか。
|
35
|
+
なので、Rigidbody2Dを用いた移動方法にしているんじゃないでしょうか。
|
28
36
|
|
29
37
|
|
30
38
|
|
@@ -34,7 +42,7 @@
|
|
34
42
|
|
35
43
|
このスクリプト内の以下の部分が肝ですね。
|
36
44
|
|
37
|
-
`Vector
|
45
|
+
`Vector2 diff = transform.position - Player_pos;`の部分で進行方向の向き(ベクトル)を取ります。この式は割とよく見かけます。
|
38
46
|
|
39
47
|
で、ifの条件は入力がある時の場合のみ、という感じの条件になってます。
|
40
48
|
|
@@ -46,7 +54,59 @@
|
|
46
54
|
|
47
55
|
```cs
|
48
56
|
|
57
|
+
using System.Collections;
|
58
|
+
|
59
|
+
using System.Collections.Generic;
|
60
|
+
|
61
|
+
using UnityEngine;
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
public class Player : MonoBehaviour {
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
public float speed; //プレイヤーの動くスピード
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
private Vector3 Player_pos; //プレイヤーのポジション
|
74
|
+
|
75
|
+
private float x; //x方向のImputの値
|
76
|
+
|
77
|
+
private float y; //y方向のInputの値
|
78
|
+
|
79
|
+
private Rigidbody2D rigd;
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
void Start()
|
84
|
+
|
85
|
+
{
|
86
|
+
|
87
|
+
Player_pos = GetComponent<Transform>().position; //最初の時点でのプレイヤーのポジションを取得
|
88
|
+
|
89
|
+
rigd = GetComponent<Rigidbody2D>(); //プレイヤーのRigidbodyを取得
|
90
|
+
|
91
|
+
}
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
void Update()
|
96
|
+
|
97
|
+
{
|
98
|
+
|
99
|
+
x = Input.GetAxis("Horizontal"); //x方向のInputの値を取得
|
100
|
+
|
101
|
+
y = Input.GetAxis("Vertical"); //z方向のInputの値を取得
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
rigd.velocity = new Vector2(x * speed, y * speed); //プレイヤーのRigidbodyに対してInputにspeedを掛けた値で更新し移動
|
106
|
+
|
107
|
+
|
108
|
+
|
49
|
-
Vector
|
109
|
+
Vector2 diff = transform.position - Player_pos; //プレイヤーがどの方向に進んでいるかがわかるように、初期位置と現在地の座標差分を取得
|
50
110
|
|
51
111
|
|
52
112
|
|
@@ -62,4 +122,8 @@
|
|
62
122
|
|
63
123
|
Player_pos = transform.position; //プレイヤーの位置を更新
|
64
124
|
|
125
|
+
}
|
126
|
+
|
127
|
+
}
|
128
|
+
|
65
129
|
```
|