質問編集履歴

3

問題が起こる状況を書き加えました。また、予想も立ててみました。

2021/01/31 10:34

投稿

ActionStudio
ActionStudio

スコア39

test CHANGED
File without changes
test CHANGED
@@ -62,7 +62,13 @@
62
62
 
63
63
  Nomal Enemyも同じように吹き飛ばされるスクリプトを書いてありますが、Nomal Enemyにはこのようなことがありません。
64
64
 
65
- また特に、Big Enemyが登場するとき、上空から落下してくるのですが、落下しGroundに着地した瞬間にPlayerがBig Enemyに触れているとこの問題が起きやすいように感じます。
65
+ また特に、Big Enemyが登場するとき、上空から落下してくるのですが、落下しGroundに着地した瞬間にPlayerがBig Enemyに触れているとこの問題が起きやすいように感じます。さらに、BigEnemyが出現した瞬間に、それの下に潜り込むように接触しに行くと、それ以降PlayerがBigEnemyから離れなくなりました。
66
+
67
+
68
+
69
+ ######予想
70
+
71
+ 敵の下に潜り込んだ時に起こっているため、BigEnemyから下向きの力が加わって、弾き飛ばされるはずが、地面に押し付けられているようになっているのかもしれません。
66
72
 
67
73
 
68
74
 

2

補足:Playerのscriptを追加しました。時数の制限によって、不要だと思われる部分は省略しました。

2021/01/31 10:34

投稿

ActionStudio
ActionStudio

スコア39

test CHANGED
File without changes
test CHANGED
@@ -294,6 +294,354 @@
294
294
 
295
295
 
296
296
 
297
+ ######補足 Playerのscript
298
+
299
+ ```C#
300
+
301
+ using System.Collections;
302
+
303
+ using System.Collections.Generic;
304
+
305
+ using UnityEngine;
306
+
307
+ using UnityEngine.SceneManagement;
308
+
309
+ using UnityEngine.UI;
310
+
311
+
312
+
313
+ public class PlayerController : MonoBehaviour
314
+
315
+ {
316
+
317
+ private GameObject focalPoint;
318
+
319
+ public GameObject powerupIndicator;
320
+
321
+ public GameObject specialWeaponIndicator;
322
+
323
+ public GameObject nomalEnemyPrefab;
324
+
325
+
326
+
327
+ private Rigidbody playerRb;
328
+
329
+ private Rigidbody nomalEnemyPrefabRb;
330
+
331
+
332
+
333
+ public float powerUpStrengh = 15.0f;
334
+
335
+ public float defaltSpeed = 5.0f;
336
+
337
+
338
+
339
+ public bool hasPowerup = false;
340
+
341
+ public bool readyToRanchSpecialWeapon = false;
342
+
343
+ public bool hasSpecialWeapon = false;
344
+
345
+ public bool gameOver = false;
346
+
347
+ public static bool cameraForwardType = false;
348
+
349
+ public bool onGround;
350
+
351
+ public bool blownAwayByPlayerWithSpecialWeapon = false;
352
+
353
+
354
+
355
+
356
+
357
+ public ParticleSystem bigShockParticle;
358
+
359
+ public ParticleSystem smallShockParticle;
360
+
361
+
362
+
363
+ private AudioSource playerAudio;
364
+
365
+ public AudioClip highBounceSound;
366
+
367
+ public AudioClip coinSound;
368
+
369
+ public AudioClip lowBounceSound;
370
+
371
+ public AudioClip BigBounceSound;
372
+
373
+ public AudioClip getSpecialWeaponSound;
374
+
375
+
376
+
377
+ // Start is called before the first frame update
378
+
379
+ void Start()
380
+
381
+ {
382
+
383
+ Time.timeScale = 1.0f;
384
+
385
+
386
+
387
+ focalPoint = GameObject.Find("Focal Point");
388
+
389
+
390
+
391
+ playerRb = GetComponent<Rigidbody>();
392
+
393
+ nomalEnemyPrefabRb = nomalEnemyPrefab.GetComponent<Rigidbody>();
394
+
395
+
396
+
397
+ playerAudio = GetComponent<AudioSource>();
398
+
399
+ }
400
+
401
+
402
+
403
+ // Update is called once per frame
404
+
405
+ void Update()
406
+
407
+ {
408
+
409
+ Move();
410
+
411
+
412
+
413
+ Jump();
414
+
415
+
416
+
417
+ Destroy();
418
+
419
+ }
420
+
421
+
422
+
423
+ private void Move()
424
+
425
+ {
426
+
427
+ if (!readyToRanchSpecialWeapon)
428
+
429
+ {
430
+
431
+ float speed;
432
+
433
+ if (cameraForwardType)
434
+
435
+ {
436
+
437
+ float forwardInput = Input.GetAxis("Vertical");
438
+
439
+
440
+
441
+ if (onGround)
442
+
443
+ {
444
+
445
+ speed = defaltSpeed;
446
+
447
+ }
448
+
449
+ else
450
+
451
+ {
452
+
453
+ speed = defaltSpeed * 0.3f;
454
+
455
+ }
456
+
457
+
458
+
459
+ playerRb.AddForce(focalPoint.transform.forward * speed * forwardInput);
460
+
461
+ }
462
+
463
+ else
464
+
465
+ {
466
+
467
+ float verticalInput = Input.GetAxis("Vertical");
468
+
469
+ float horizontalInput = Input.GetAxis("Horizontal");
470
+
471
+
472
+
473
+ if (onGround)
474
+
475
+ {
476
+
477
+ speed = defaltSpeed;
478
+
479
+ }
480
+
481
+ else
482
+
483
+ {
484
+
485
+ speed = defaltSpeed * 0.3f;
486
+
487
+ }
488
+
489
+ playerRb.AddForce(focalPoint.transform.forward * speed * verticalInput);
490
+
491
+ playerRb.AddForce(focalPoint.transform.right * speed * horizontalInput);
492
+
493
+ }
494
+
495
+ }
496
+
497
+ }
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+ private void OnTriggerEnter(Collider other)
508
+
509
+ {
510
+
511
+ if (other.CompareTag("Powerup") && !hasPowerup)
512
+
513
+ {
514
+
515
+ hasPowerup = true;
516
+
517
+ Destroy(other.gameObject);
518
+
519
+ StartCoroutine(PowerupCountdownRoutine());
520
+
521
+ StartCoroutine(SetPowerupIndicatorPosition());
522
+
523
+
524
+
525
+ playerAudio.PlayOneShot(coinSound, 0.4f);
526
+
527
+ }
528
+
529
+
530
+
531
+ if (other.CompareTag("Special Weapon") && !hasSpecialWeapon && onGround)
532
+
533
+ {
534
+
535
+
536
+
537
+ hasSpecialWeapon = true;
538
+
539
+ Destroy(other.gameObject);
540
+
541
+
542
+
543
+ StartCoroutine(SetSpecialWeaponIndicatorPosition());
544
+
545
+
546
+
547
+ StartCoroutine(SetSpecialWeapon());
548
+
549
+
550
+
551
+ playerAudio.PlayOneShot(getSpecialWeaponSound, 1f);
552
+
553
+ }
554
+
555
+ }
556
+
557
+
558
+
559
+ IEnumerator PowerupCountdownRoutine()
560
+
561
+ {
562
+
563
+ powerupIndicator.gameObject.SetActive(true);
564
+
565
+ yield return new WaitForSeconds(7);
566
+
567
+ hasPowerup = false;
568
+
569
+ powerupIndicator.gameObject.SetActive(false);
570
+
571
+ }
572
+
573
+
574
+
575
+ IEnumerator SetPowerupIndicatorPosition()
576
+
577
+ {
578
+
579
+ while (hasPowerup)
580
+
581
+ {
582
+
583
+ powerupIndicator.transform.position = transform.position + new Vector3(0, -0.5f, 0);
584
+
585
+
586
+
587
+ yield return null;
588
+
589
+ }
590
+
591
+ }
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+ private void OnCollisionEnter(Collision collision)
600
+
601
+ {
602
+
603
+ if ((collision.gameObject.CompareTag("Nomal Enemy") || collision.gameObject.CompareTag("Mitosis Enemy")) && hasPowerup)
604
+
605
+ {
606
+
607
+ Rigidbody nomalEnemyRigidbody = collision.gameObject.GetComponent<Rigidbody>();
608
+
609
+ Vector3 awayFromPlayer = collision.gameObject.transform.position - transform.position;
610
+
611
+
612
+
613
+ nomalEnemyRigidbody.AddForce(awayFromPlayer * powerUpStrengh, ForceMode.Impulse);
614
+
615
+ smallShockParticle.Play();
616
+
617
+ //Debug.Log("Player collided with: " + collision.gameObject.name + " with powerup set to " + hasPowerup);
618
+
619
+
620
+
621
+ playerAudio.PlayOneShot(highBounceSound, 4f);
622
+
623
+ }
624
+
625
+ else if ((collision.gameObject.CompareTag("Nomal Enemy") || collision.gameObject.CompareTag("Mitosis Enemy")) && !hasPowerup)
626
+
627
+ {
628
+
629
+ playerAudio.PlayOneShot(lowBounceSound, 0.6f);
630
+
631
+ }
632
+
633
+
634
+
635
+
636
+
637
+ }
638
+
639
+
640
+
641
+ }
642
+
643
+ ```
644
+
297
645
 
298
646
 
299
647
  ### 補足情報(FW/ツールのバージョンなど)

1

どのようなときにエラーが起こるのか詳しく書きました。

2021/01/31 10:30

投稿

ActionStudio
ActionStudio

スコア39

test CHANGED
File without changes
test CHANGED
@@ -14,8 +14,12 @@
14
14
 
15
15
  Player
16
16
 
17
+
18
+
17
19
  がここでは登場しますが、
18
20
 
21
+
22
+
19
23
  Massは
20
24
 
21
25
  Big Enemy   1500
@@ -24,10 +28,16 @@
24
28
 
25
29
  Player 5
26
30
 
31
+
32
+
27
33
  です。
28
34
 
35
+
36
+
29
37
  それぞれColliderのMaterialは
30
38
 
39
+
40
+
31
41
  Dynamic Friction 0.6
32
42
 
33
43
  Static Friction 0.6
@@ -38,6 +48,8 @@
38
48
 
39
49
  Bounce Combine Multiply
40
50
 
51
+
52
+
41
53
  となっています。
42
54
 
43
55
 
@@ -48,6 +60,12 @@
48
60
 
49
61
 
50
62
 
63
+ Nomal Enemyも同じように吹き飛ばされるスクリプトを書いてありますが、Nomal Enemyにはこのようなことがありません。
64
+
65
+ また特に、Big Enemyが登場するとき、上空から落下してくるのですが、落下しGroundに着地した瞬間にPlayerがBig Enemyに触れているとこの問題が起きやすいように感じます。
66
+
67
+
68
+
51
69
  ### 該当のソースコード
52
70
 
53
71