MonoBehaviorから派生し、GameObjectに関連付けられているクラスに問題があります。このGameObject( "発射物")が何かに衝突すると、コンポーネント "Effect"は捨てられ、ヒットしたターゲットのList()に格納されます。割り当て後、発射物は破壊されるべきである。クラスのコピー/複製/複製をリストに入れようとしています
私がこれを実行すると、リストに「欠落(効果)」しか表示されません。私はリストに参照を割り当てていると思います。そして、発射物が削除されると参照が失われてしまいます。
プロジェクタイルゲームオブジェクトが結合成分としての効果及びプロジェクタイルのクラスがあります
public class Effect : MonoBehaviour {
public float dps = 2f;
public float duration = 2f;
public operatingDelay = 0.1f;
public bool freezing = false;
void Start(){
StartCoroutine("DamageHealRoutine");
}
IEnumerator DamageHealRoutine() {
int goalCount = (int)(duration/operatingDelay);
float partialDamage = dps * operatingDelay;
for (int i = 0; i < goalCount; i++) {
if (dps > 0)
stats.TakeDamage(partialDamage);
else if (dps < 0)
stats.GetHeal(partialDamage);
yield return new WaitForSeconds(operatingDelay);
}
}
}
public class Projectile : MonoBehaviour {
public Effect effect;
private void Awake() {
effect = GetComponent<Effect>(); // not null
}
public void hittedSomething(GameObject go) {
go.GetComponent<Stats>().effects.Add(effect);
// Without destroying, the List entry is assinged accordingly.
Destroy(this.gameObject);
//Became Missing when destroying the Projectile
}
}
ターゲットゲームオブジェクトが結合成分としての統計クラスを有している:それは必要があるため
public class Stats : MonoBehaviour {
public List<Effect> effects;
}
効果は、MonoBehaviorからの相続を有しますCoroutinesを開始することができると私はそれの値を変更したい。
ターゲットにコンポーネントとしてエフェクトを追加せずにこれを達成する可能性はありますか?
EDIT1:コルーチンを開始する ことができるはずと私はそれが値をです変更したいので Missing
はい、可能です。 * "効果はMonoBehaviorからの継承者にあります。なぜなら、それはCoroutinesを開始することができ、その値を変更したいからです" *あなたは、コルーチン部分を含めることができますか? – Programmer
発射の効果は何ですか?それはプレファブリファレンスですか?それは子供ですか?またはプール内のような多くの他のエフェクトの中の1つのオブジェクト? – Bijan
@Programmerコルーチン部分を追加しました。 –