質問編集履歴
3
問題が起こる状況を書き加えました。また、予想も立ててみました。
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を追加しました。時数の制限によって、不要だと思われる部分は省略しました。
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
どのようなときにエラーが起こるのか詳しく書きました。
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
|
|