質問編集履歴

1

追記

2020/05/13 02:43

投稿

unity_user_a
unity_user_a

スコア23

test CHANGED
File without changes
test CHANGED
@@ -219,3 +219,291 @@
219
219
 
220
220
 
221
221
  Unityバージョン:Unity 2019.2.15f1 (64-bit)
222
+
223
+
224
+
225
+ 追記:5/13に教えて頂いたスクリプトについて
226
+
227
+
228
+
229
+ スクリプトを教えて頂いたものに変更したところ、弾がプレイヤーの後ろに飛んで行く様になりました。
230
+
231
+ やはりプレイヤーの向きが変わっても、弾の方向は変わっていません。
232
+
233
+ 足りていないと思って、私が自分で足した部分が原因でしょうか?
234
+
235
+
236
+
237
+ ```ここに言語を入力
238
+
239
+ using System.Collections;
240
+
241
+ using System.Collections.Generic;
242
+
243
+ using UnityEngine;
244
+
245
+
246
+
247
+ public class Bullet : MonoBehaviour
248
+
249
+ {
250
+
251
+
252
+
253
+ // 弾オブジェクト(Inspectorでオブジェクトを指定)
254
+
255
+ [SerializeField] // Inspectorで操作できるように属性を追加します
256
+
257
+ private GameObject bullet;
258
+
259
+
260
+
261
+ // 弾オブジェクトのRigidbody2Dの入れ物
262
+
263
+ private Rigidbody2D rb2d;
264
+
265
+ // 弾オブジェクトの移動係数(速度調整用)
266
+
267
+ float bulletSpeed;
268
+
269
+
270
+
271
+ private Vector2 direction = Vector2.right;
272
+
273
+
274
+
275
+ void Start()
276
+
277
+ {
278
+
279
+ // オブジェクトのRigidbody2Dを取得
280
+
281
+ rb2d = GetComponent<Rigidbody2D>();
282
+
283
+ // 弾オブジェクトの移動係数を初期化
284
+
285
+ bulletSpeed = 10.0f;
286
+
287
+ // 出現から3秒後に弾オブジェクトを消滅させる(メモリの節約)
288
+
289
+ Destroy(gameObject, 3.0f);
290
+
291
+ }
292
+
293
+
294
+
295
+ void Update()
296
+
297
+ {
298
+
299
+ // 弾オブジェクトの移動関数
300
+
301
+ BulletMove();
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+ }
310
+
311
+
312
+
313
+ public void SetDirection(bool isLeft)
314
+
315
+ {
316
+
317
+ // 左方向なら(-1.0, 0.0)方向に、右方向なら(1.0, 0.0)方向に進む
318
+
319
+ direction = isLeft ? Vector2.left : Vector2.right;
320
+
321
+
322
+
323
+ // スプライト画像の反転処理(画像のデフォルトが右方向の向いているもの前提)
324
+
325
+ var sprite = GetComponent<SpriteRenderer>();
326
+
327
+ if (sprite != null)
328
+
329
+ {
330
+
331
+ sprite.flipY = isLeft;
332
+
333
+ }
334
+
335
+
336
+
337
+ }
338
+
339
+
340
+
341
+ void BulletMove()
342
+
343
+ {
344
+
345
+ // Rigidbody2D に移動量を加算する
346
+
347
+ rb2d.velocity = direction * bulletSpeed;
348
+
349
+ }
350
+
351
+
352
+
353
+ // ENEMYと接触したときの関数
354
+
355
+ void OnCollisionEnter2D(Collision2D collision)
356
+
357
+ {
358
+
359
+ // ENEMYに弾が接触したら弾は消滅する
360
+
361
+ if (collision.gameObject.tag == "Enemy")
362
+
363
+ {
364
+
365
+ Destroy(gameObject);
366
+
367
+ }
368
+
369
+
370
+
371
+ if (collision.gameObject.tag == "Ground")
372
+
373
+ {
374
+
375
+ Destroy(gameObject);
376
+
377
+ }
378
+
379
+
380
+
381
+ if (collision.gameObject.tag == "MoveFloor")
382
+
383
+ {
384
+
385
+ Destroy(gameObject);
386
+
387
+ }
388
+
389
+
390
+
391
+ if (collision.gameObject.tag == "JumpStep")
392
+
393
+ {
394
+
395
+ Destroy(gameObject);
396
+
397
+ }
398
+
399
+
400
+
401
+ if (collision.gameObject.tag == "GroundPlatform")
402
+
403
+ {
404
+
405
+ Destroy(gameObject);
406
+
407
+ }
408
+
409
+
410
+
411
+ }
412
+
413
+ }
414
+
415
+
416
+
417
+ ```
418
+
419
+
420
+
421
+ ```ここに言語を入力
422
+
423
+ using System.Collections;
424
+
425
+ using System.Collections.Generic;
426
+
427
+ using UnityEngine;
428
+
429
+
430
+
431
+ public class PlayerBullet : MonoBehaviour
432
+
433
+ {
434
+
435
+ #pragma warning disable 0649
436
+
437
+ // InspectorでPrefab化したBulletを指定する
438
+
439
+ [SerializeField]
440
+
441
+ private GameObject bullet;
442
+
443
+
444
+
445
+ // ユーザーがどちらを向いているか
446
+
447
+ private bool isLeft = true;
448
+
449
+
450
+
451
+ void Update()
452
+
453
+ {
454
+
455
+ // 弾オブジェクトを生成して飛ばす関数を呼び出す
456
+
457
+ ShotAction();
458
+
459
+ }
460
+
461
+
462
+
463
+ void ShotAction()
464
+
465
+ {
466
+
467
+ Vector3 offset = new Vector3(1.0f, 0.0f, 0.0f);
468
+
469
+
470
+
471
+ // isLeft は仮の変数です。現在向いている方向を判定するフラグなどを用意してみてください。
472
+
473
+ // 向いている方向が反対ならx座標を反転する
474
+
475
+ if (isLeft)
476
+
477
+ {
478
+
479
+ offset.x = -offset.x;
480
+
481
+ }
482
+
483
+
484
+
485
+ if (Input.GetButtonDown("Fire1"))
486
+
487
+ {
488
+
489
+ // Bulletコンポーネントがアタッチしている前提
490
+
491
+ var bulletObj = Instantiate(bullet, transform.position + offset, transform.rotation);
492
+
493
+ bulletObj.GetComponent<Bullet>().SetDirection(isLeft);
494
+
495
+ }
496
+
497
+ }
498
+
499
+ }
500
+
501
+
502
+
503
+ ```
504
+
505
+
506
+
507
+ ![イメージ説明](f7da22b8b6fbcd917e78b969dae21731.jpeg)
508
+
509
+ ![イメージ説明](ce3f949809624708c05bb750510a56d9.jpeg)