#現在行っていること
prefabから出現させたクローンに、力を加えて吹き飛ばそうとしています。
C#
1Rigidbody nomalEnemyRigidbody = nomalEnemyPrefab.GetComponent<Rigidbody>(); 2Vector3 nomalEnemyAwayFromPlayer = nomalEnemyPrefab.transform.position - transform.position; 3nomalEnemyRigidbody.AddForce(nomalEnemyAwayFromPlayer * blowOffStrengh, ForceMode.Impulse);
として、playerのスクリプトから力を加えようとしているのですが、うまく実行されません。
エラーコードは出ていません。
nomalEnemyPrefabはpabulicにして、指定しています。
はじめ、このコードをnomalEnemyのPrefabのほうに書き、実行していましたが、ほかの吹き飛ばすコードがplayerの方に書いてあったため、統一するためにplayerの方に書きました。そしたらなぜかうまくいかなくなってしまいました。
このような場合、クローンとして出現させた物体には力を加えることができないのでしょうか。
また、出現させたクローンすべてに力を加えたいため、findObjectsOfTypeをつかおうとしましたが、うまくできませんでした。
どうすればいいか教えてください。
また、あるオブジェクトに力を加えるような場合、プレイやーにアタッチされたスクリプトか吹き飛ばす方にアタッチされたスクリプトどちらに書いた方がいいのでしょうか。
##最終的に行ったこと
boolで吹き飛ばす命令をPlayerControllerから受け取り、教えていただいたAddExplosionForceで爆発の影響を受けるようにしました。
C#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class NomalEnemy : MonoBehaviour 7{ 8 private Rigidbody nomalEnemyRb; 9 private GameObject player; 10 public GameObject bigEnemyPrefab; 11 12 public float nomalEnemySpeed = 30.0f; 13 public float blowOffStrengh = 50.0f; 14 15 public float power; 16 public float radius; 17 public float upwardsModifier; 18 19 private PlayerController playerControllerScript; 20 21 // Start is called before the first frame update 22 void Start() 23 { 24 player = GameObject.Find("Player"); 25 nomalEnemyRb = GetComponent<Rigidbody>(); 26 playerControllerScript = GameObject.Find("Player").GetComponent<PlayerController>(); 27 } 28 29 // Update is called once per frame 30 void Update() 31 { 32 moveToPlayer(); 33 34 if (playerControllerScript.blownAwayByPlayerWithSpecialWeapon) 35 { 36 StartCoroutine(BlownAwayByPlayerWithSpecialWeapon()); 37 } 38 } 39 40 private void moveToPlayer() 41 { 42 if (!playerControllerScript.gameOver) 43 { 44 if (playerControllerScript.readyToRanchSpecialWeapon) 45 { 46 nomalEnemyRb.velocity = Vector3.zero; 47 } 48 else 49 { 50 Vector3 lookDirection = (player.transform.position - transform.position).normalized; 51 52 nomalEnemyRb.AddForce(lookDirection * nomalEnemySpeed); 53 } 54 } 55 } 56 57 58 IEnumerator BlownAwayByPlayerWithSpecialWeapon() 59 { 60 GetComponent<Rigidbody>().AddExplosionForce(power, player.transform.position, radius, upwardsModifier, ForceMode.Impulse); 61 yield return null; 62 playerControllerScript.blownAwayByPlayerWithSpecialWeapon = false; 63 } 64}
回答2件
あなたの回答
tips
プレビュー