2016-07-06 12 views
2

私は、動作に関して同じことをする2つのオブジェクトを持っていますが、唯一の違いは、処理されるダメージです。今は、私はお互いからコピー貼り付けされている2つのスクリプトを持っています。同じ機能がすべて同じです。私は自分の仕事を最適化し、私のものを複製しないために1つのスクリプトを作ることができますか?ありがとう。Unity3D最適化コード

using UnityEngine; 
using System.Collections; 


public class Script1 : MonoBehaviour { 

private float attackDamage = 5; 

空隙OnCollisionEnter(衝突アイテム) {item.gameObject.GetComponent()ダメージ(attackDamage)。 disableObs(); }

public void disableObs() 
{ 
    gameObject.SetActive(false); 
} 

}

スクリプト2と同じことです。私はダメージ変数を変更するだけです

答えて

1

を使用して変数を飾る:

[SerializeField] private int damage; 

今これはプライベート変数でありますインスペクタでの露出。

ワークフローに関して、Script1の多くを多くのオブジェクトにドラッグすることができます。これらのオブジェクトには独自のScript1アクションセットがあります。しかし、目的は、歩兵を1に、歩兵を100にして歩兵を持つことができるということです。あなたがする必要があるのは、プレハブの値を設定することだけです。それらすべてを設定する1つの場所。次に、プレハブをインスタンス化し、与えられた値を使用します。

1

ダメージ変数をパブリックに変更することができ、異なるオブジェクトにスクリプトを追加すると、インスペクタを介してその変数を設定できます。それとも、インスタンス化上のコードでその変更を行っている場合だけ、特定のオブジェクトにsetDamage(ダメージ)関数を呼び出します。

gameobject.GetComponent<Script1>().setDamage(damage1); 
gameobject2.GetComponent<Script1>().setDamage(damage2); 
+0

私の影響はどうですか?パーティクルシステムと同じもの? – John

+0

はい異なる構成の異なるオブジェクトに同じスクリプトとパーティクルシステムを持つことができます。それが役に立つなら、答えとしてupvoteしてください。 –

+0

真。しかし、私の質問にはない小さな問題が1つあります。 On Destroyはオブジェクトを無効にし、パーティクルシステムはオブジェクトの子です。その効果は無効になるので再生されません。とにかく無効にする効果を遅らせることはありますか?私はそれが無効になる効果をしたい。 – John