OnCollisionEnter()のInstantiate関数でc.transformつまり当たった先の座標を引数にしてる場合でエフェクトが実行されませんこれは何が原因なのでしょうか?コメントしてるtransform.positionを引数に取っている場合は上手くエフェクトが表示されます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Weapon : MonoBehaviour { public GameObject player; private Player p; public ParticleSystem ps; private bool isParticle; private float timelimit = 1.0f; private float time; // Use this for initialization void Start () { p = player.GetComponent<Player>(); isParticle = false; time = 0; } // Update is called once per frame void Update () { // Debug.Log("weapon script"); if (!ps.IsAlive()) { // Destroy(ps); } // Debug.Log(time); } private void OnCollisionEnter(Collision c) { if (c.gameObject.tag == "Enemy" && p.isAttack_now) { Vector3 v = c.transform.position; Instantiate(ps,c.transform);///////////////////////////////////////////////// //Instantiate(ps,transform.position,transform.rotation);/////////////////////////////////////////// Debug.Log("Weapon Collision !"); Destroy(c.gameObject); } else { } } }
c.transformは当たった先の座標ではなく、当たったオブジェクトのTransformクラスです。
この表記の場合、Instantiateは「c.transformの子としてpsオブジェクトのインスタンスを生成」します。
なので「Instantiate関数が実行されない・エフェクトが実行されていない」のではなく「想定と違う場所で生成されているので見えない(等)」だと思います。確認してみてください。
c.transformの子としてとありますがつまりcの場所に実行するということですよね?w
親から見た相対座標に生成されるので、もしも生成元のプレハブのTransformのposition値が(0,0,0)でなかった場合はcとは違う位置に生成されます。((0,0,0)だったらcと同じ位置にはなりますが)
あなたの回答
tips
プレビュー