回答編集履歴

1

ミス修正

2020/01/10 06:27

投稿

Y0241-N
Y0241-N

スコア1066

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
- `Vector3 diff = transform.position - Player_pos;`の部分で進行方向の向き(ベクトル)を取ります。この式は割とよく見かけます。
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
- Vector3 diff = transform.position - Player_pos; //プレイヤーがどの方向に進んでいるかがわかるように、初期位置と現在地の座標差分を取得
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
  ```