質問編集履歴

1

ソースコードを一部しか載せていなかったため修正致しました。

2020/05/13 02:58

投稿

iceice
iceice

スコア2

test CHANGED
File without changes
test CHANGED
@@ -40,34 +40,228 @@
40
40
 
41
41
  ソースコード
42
42
 
43
-
43
+ using System.Collections;
44
+
44
-
45
+ using System.Collections.Generic;
46
+
47
+ using UnityEngine;
48
+
49
+
50
+
51
+ public class Player : MonoBehaviour {
52
+
53
+
54
+
55
+ //Rigidbodyを変数に入れる
56
+
57
+ Rigidbody rb;
58
+
59
+ //移動スピード
60
+
61
+ public float speed = 3f;
62
+
63
+ //ジャンプ力
64
+
65
+ public float thrust = 200;
66
+
67
+ //Animatorを入れる変数
68
+
69
+ private Animator animator;
70
+
71
+ //キャラの位置を入れる
72
+
73
+ Vector3 playerPos;
74
+
75
+ //地面に接触しているか否か
76
+
77
+ bool ground;
78
+
79
+
80
+
81
+ void Start()
82
+
83
+ {
84
+
85
+ //Rigidbodyを取得
86
+
87
+ rb = GetComponent<Rigidbody>();
88
+
89
+ //Animatorにアクセスする
90
+
91
+ animator = GetComponent<Animator>();
92
+
93
+ //現在より少し前の位置を保存
94
+
95
+ playerPos = transform.position;
96
+
97
+
98
+
99
+
100
+
101
+ }
102
+
103
+
104
+
105
+ void Update()
106
+
107
+ {
108
+
109
+
110
+
111
+ //地面に接触していると作動する
112
+
113
+ if (ground) {
114
+
115
+ //A・Dキー、←→キーで横移動
116
+
117
+ float x = Input.GetAxisRaw ("Horizontal") * Time.deltaTime * speed;
118
+
119
+
120
+
121
+ //W・Sキー、↑↓キーで前後移動
122
+
123
+ float z = Input.GetAxisRaw ("Vertical") * Time.deltaTime * speed;
124
+
125
+
126
+
127
+ //現在の位置+入力した数値の場所に移動する
128
+
129
+ rb.MovePosition (transform.position + new Vector3 (x, 0, z));
130
+
131
+
132
+
133
+ //キャラの最新の位置から少し前の位置を引いて方向を割り出す
134
+
135
+ Vector3 direction = transform.position - playerPos;
136
+
137
+
138
+
139
+ //移動距離が少しでもあった場合に方向転換
140
+
141
+ if (direction.magnitude > 0.01f) {
142
+
143
+ //directionのX軸とZ軸の方向を向かせる
144
+
145
+ transform.rotation = Quaternion.LookRotation (new Vector3 (direction.x, 0, direction.z));
146
+
147
+ //走るアニメーションを再生
148
+
149
+ animator.SetBool ("Running", true);
150
+
151
+ } else {
152
+
153
+ //ベクトルの長さがない=移動していない時は走るアニメーションはオフ
154
+
155
+ animator.SetBool ("Running", false);
156
+
157
+ }
158
+
159
+
160
+
161
+ //キャラの位置を更新する
162
+
163
+ playerPos = transform.position;
164
+
165
+
166
+
45
- //スペースキーでジャンプ
167
+ //スペースキーでジャンプ
46
168
 
47
169
  if (Input.GetButton ("Jump")) {
48
170
 
49
171
 
50
172
 
173
+
174
+
51
- //thrustの分だけ上方に力がかかる
175
+ //thrustの分だけ上方に力がかかる
52
-
176
+
53
- rb.AddForce (transform.up * thrust);
177
+ rb.AddForce (transform.up * thrust);
54
178
 
55
179
  //速度が出ていたら前方と上方に力がかかる
56
180
 
57
- if (rb.velocity.magnitude > 0) {
181
+ if (rb.velocity.magnitude > 0) {
58
-
182
+
59
- rb.AddForce (transform.forward * thrust + transform.up * thrust);
183
+ rb.AddForce (transform.forward * thrust);
60
-
61
-
62
-
63
-
64
-
184
+
185
+
186
+
187
+
188
+
65
- }
189
+ }
66
190
 
67
191
 
68
192
 
69
193
  }
70
194
 
195
+ }
196
+
197
+
198
+
199
+ if (transform.position.y >= 100f)
200
+
201
+ {
202
+
203
+ rb.velocity = new Vector3(0,-2,0);
204
+
205
+ rb.angularVelocity = Vector3.zero;
206
+
207
+ }
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+ }
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ //Planeに触れている間作動
226
+
227
+ void OnCollisionStay(Collision col)
228
+
229
+ {
230
+
231
+ ground = true;
232
+
233
+
234
+
235
+ }
236
+
237
+
238
+
239
+ //Planeから離れると作動
240
+
241
+ void OnCollisionExit(Collision col)
242
+
243
+ {
244
+
245
+ ground = false;
246
+
247
+
248
+
249
+ }
250
+
251
+ }
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
71
265
  ```
72
266
 
73
267