2016-07-06 17 views
2

Ich habe 2 Objekte, die dasselbe in Bezug auf das Verhalten tun, aber das einzige, was sich unterscheidet, ist der verursachte Schaden. Im Moment habe ich 2 Skripte, die sich gegenseitig kopieren. Gleiche Funktionen, alles gleich. Wie kann ich 1 Skript machen, um meine Arbeit zu optimieren und meine Sachen nicht zu duplizieren? Vielen Dank.Unity3D Code optimieren

using UnityEngine; 
using System.Collections; 


public class Script1 : MonoBehaviour { 

private float attackDamage = 5; 

Leere OnCollisionEnter (Collision Artikel) { item.gameObject.GetComponent() Schaden (attackDamage). disableObs(); }

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

}

2 Script ist das gleiche. Ich ändere einfach die Schadensvariable

Antwort

1

Dekorieren Sie Ihre Variable mit:

[SerializeField] private int damage; 

Nun ist dies eine private Variable mit Belichtung im Inspektor.

In Bezug auf den Workflow können Sie so viele Skripte1 auf viele Objekte ziehen, dass sie ihre eigenen Script1-Aktionen haben. Aber der Zweck ist, dass man Infanterie mit Schadenswert als 1 und Tank mit Schaden als 100 haben kann. Alles, was du tun musst, ist den Wert für das Prefab festzulegen. Ein Platz, um sie alle zu setzen. Dann können Sie die Prefabs instanziieren und sie werden die angegebenen Werte verwenden.

1

Sie können die Schadensvariable in public ändern, und wenn Sie das Skript zu verschiedenen Objekten hinzufügen, legen Sie diese Variable über Inspector fest. Oder wenn Sie diese Änderung auf Instanziierung von Code tun, rufen Sie einfach die setDamage (Schaden) Funktion auf das spezifische Objekt:

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

Was ist mit meinen Effekten? Partikelsystem das gleiche? – John

+0

Ja, Sie können die gleichen Skripte und Partikelsysteme in verschiedenen Objekten mit unterschiedlichen Konfigurationen haben. Wenn es hilfreich war, bitte upvote als Antwort. –

+0

Wahr. Aber ich habe ein kleines Problem, das nicht in meiner Frage ist. Auf Destroy im Deaktivieren meines Objekts, und mein Partikelsystem ist das Kind des Objekts. Der Effekt wird also nicht abgespielt, weil er deaktiviert wird. Gibt es trotzdem eine Verzögerung um den Effekt zu deaktivieren? Ich möchte, dass der Effekt dann deaktiviert wird. – John