Unity – grundlegende Methoden zur Verwendung verschiedener Spezialeffekte

Spezialeffekte sind ein unverzichtbarer Bestandteil der Spieleproduktion. Als Spieleentwickler besteht die wichtigste Aufgabe darin, dem Spiel Spezialeffekte hinzuzufügen und diese zur richtigen Zeit und am richtigen Ort abzuspielen. Gleichzeitig müssen Sie auch aufmerksam sein zur Verwaltung und Zerstörung von Spezialeffekten. .

Bestimmte Arten von Spezialeffekten, wie z. B. Bewegungseffekte und Abziehbilder, erfordern zur detaillierteren Steuerung auch das Schreiben von Skriptcode. Daher wird in diesem Artikel kurz erläutert, wie verschiedene Spezialeffekte verwendet werden.


Die Wiedergabe von Spezialeffekten und Animationen stellt keine Schwierigkeit dar. In vielen Fällen müssen Sie lediglich Objekte instanziieren.

1. Partikeleffekte erstellen

Im Asset Store gibt es eine Reihe kostenloser Partikelressourcen, die sich zum Lernen und Verwenden eignen und Unity Particle Pack heißen. Nach dem Import dieses Materialsatzes werden Sie möglicherweise aufgefordert, Unity neu zu starten. Befolgen Sie einfach die Anweisungen. Dieser Materialsatz wird im Folgenden zur Erläuterung verwendet.

Suchen Sie nach dem Import des Ressourcenpakets nach dem Fertigteil des Partikelmaterials, z. B. EarthShatter. Ziehen Sie es in die Szene, um den Effekt sofort in der Vorschau anzuzeigen. Wenn ein Spezialeffektobjekt ausgewählt wird, erscheint in der Szene ein kleines Werkzeugfenster, mit dem Sie Partikel einfach anhalten, abspielen und erneut abspielen sowie die Vorschaugeschwindigkeit anpassen können.

Überprüfen Sie diese Ressourcendatei und stellen Sie fest, dass ihre Erweiterung „.prefab“ ist. Nachdem Sie sie ausgewählt haben, können Sie sehen, dass es sich tatsächlich nur um eine gewöhnliche vorgefertigte Datei handelt. Auf diesem Objekt ist ein Partikelsystem (Partikelkomponente) montiert, und es verfügt über 5 Unterobjekte, auf denen jeweils eine Partikelkomponente montiert ist. Indem Sie jedes Unterobjekt einzeln deaktivieren, können Sie sehen, was jedes Unterobjekt tut. Zum Beispiel ist Rock Spike der Hauptkörper des erzeugten Felsens, Fire Embers sind die fliegenden Funken, Fire Ball ist der Feuerball, der sich entlang des Pfades bewegt usw. Wenn Sie weitere Partikeleffekte analysieren, werden Sie feststellen, dass Spezialeffektdesigner oft wunderschöne und komplexe Spezialeffekte durch die Überlagerung mehrerer kleiner Spezialeffekte erzielen.

Aus der Perspektive der Verwendung von Spezialeffekten besteht die einzige Möglichkeit darin, das Spezialeffektmaterial zu instanziieren, da es sich lediglich um ein vorgefertigtes Material handelt, was sich nicht von der Erstellung eines beliebigen Objekts unterscheidet.

Erstellen Sie ein leeres Objekt und mounten Sie den folgenden Code. Drücken Sie beim Ausführen des Spiels die Leertaste, um Partikel abzuspielen.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreatParticle : MonoBehaviour
{
    public GameObject prefabParticle;
    void Update()
    {
        if(Input.GetButtonDown("Jump"))
        {
            GameObject particle = Instantiate(prefabParticle);
        }
    }
}

2. Lebenszyklus von Partikeleffekten

Der Lebenszyklus eines Objekts bezieht sich hauptsächlich auf den Prozess von der Entstehung bis zur Zerstörung des Objekts. Als technischer Entwickler müssen Sie sich nicht um die Produktion von Ressourcen kümmern, sondern um die Verwaltung des Ressourcenlebenszyklus.

Die Partikelkomponente hat eine bestimmte Wiedergabezeit und es werden lebenszyklusbezogene Optionen hinzugefügt, um die Schleifenwiedergabe festzulegen, die Wiedergabe zu stoppen oder sich nach Abschluss der Wiedergabe selbst zu zerstören. Diese Optionen befinden sich im Allgemeinen in der ersten Bearbeitungsleiste der Partikelkomponente.

Die meisten Optionen der Partikelkomponente beeinflussen den Wiedergabeeffekt der Partikel und liegen in der Verantwortung des Spezialeffektdesigners. Einige Optionen beziehen sich auf den Partikellebenszyklus und erfordern die Verantwortung des technischen Entwicklers.

  1. Dauer, die Gesamtzeit der Partikelwiedergabe
  2. Schleife, ob eine Schleife ausgeführt werden soll. Diese Option wird für bestimmte dauerhafte Effekte verwendet, beispielsweise für Freudenfeuer
  3. „Play On Awake“ wird sofort nach der Erstellung abgespielt. Wenn diese Option nicht aktiviert ist, muss die Play-Funktion aufgerufen werden, nachdem das Skript das Unterobjekt erstellt hat.
  4. Stoppaktion, das Verhalten nach Abschluss der Partikelwiedergabe
  5. Ringpuffermodus, ob der Ringpuffer aktiviert werden soll. Der Ringpuffer ist eine Technologie zur Programmoptimierung, die einem Objektpool ähnelt und das Recycling und die Wiederverwendung von Ressourcen realisieren kann, wodurch die Kosten für die Erstellung und Zerstörung von Ressourcen erheblich gesenkt werden. Diese Option bezieht sich auf Max. Partikel (maximale Anzahl von Partikeln) und ist eine Optimierung für eine große Anzahl von Partikeln im aktuellen Partikelobjekt.

Wenn die Partikel nach ihrer Erstellung nicht automatisch abgespielt werden, lautet der Code für die Skriptwiedergabe wie folgt:

GameObject particle = Instantiate(prefabParticle);
//如果粒子没有勾选Play On Awake选项,就需要手动调用Play
ParticleSystem ps = particle.GetComponent<ParticleSystem>();
ps.play();

Die Stop-Aktion in den Partikeloptionen hat die folgenden Optionen:

  1. Keine, nichts tun
  2. Deaktivieren: Deaktivieren Sie das aktuelle Objekt. Wenn Sie es später noch einmal abspielen möchten, können Sie die Partikel zunächst automatisch deaktivieren lassen
  3. Zerstöre, zerstöre das aktuelle Objekt. Dies ist die einfachste und einfachste Möglichkeit, Partikel zu zerstören, ohne ein Skript zu schreiben.
  4. Rückruf, ruft die Skriptmethode auf, damit das Skript mit dem nächsten Schritt fortfahren kann. Das Skript muss auf dem Objekt der Partikelkomponente montiert werden. Die Rückrufmethode des Partikels lautet wie folgt
    public void OnParticle SystemStopped() {
    Debug.Log("粒子停止");
    }

 Wenn die Partikel nach einmaligem Abspielen unbrauchbar sind, sollte die häufigste Methode im Allgemeinen darin bestehen, die Option „Aktion stoppen“ auf „Zerstören“ zu setzen, um das Objekt automatisch zu zerstören. Wenn es andere besondere Bedürfnisse gibt, gibt es viele Möglichkeiten, diese zu zerstören. Darüber hinaus können Sie das Skript auch regelmäßig zerstören lassen, und die Zeit ist Dauer. Sie können auch Rückruf auswählen, um das Skript zu benachrichtigen, nachdem die Partikelwiedergabe abgeschlossen ist, und es in der OnParticleSystemStopped-Methode des Skripts weiter verarbeiten.

3. Erstellen Sie animierte Spezialeffekte

Sie müssen lediglich ein Skript verwenden, um das entsprechende Objekt zu erstellen.

4. Zerstören Sie regelmäßig Animationen oder Animationen

Damit Animationen oder Animationen nach einem bestimmten Zeitraum zerstört werden können, können Sie mithilfe der Komponentisierung ein universelles Skript entwerfen, die Zerstörungszeit im Voraus festlegen und alle erstellten Partikel oder Animationen bereitstellen.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeDestroy : MonoBehaviour
{
    public float time = 1;
    void Start()
    {
        invoke("Destroy", time);
    }
    void Destroy()
    {
        Destroy(gameObject);
    }
 
}

Der obige Code verwendet die Invoke-Methode, um den Aufruf zu verzögern, und kann auch mithilfe von Coroutinen implementiert werden. Diese Idee ist sehr allgemein und kann auf verschiedene Objekte wie Partikel und Kugeln im Spiel angewendet werden.

Natürlich können Sie für die Animation auch die Methode „Animationsrahmenereignis“ verwenden. Fügen Sie dem letzten Frame der Animation ein Frame-Ereignis hinzu und rufen Sie das Skript auf, um die Animation zu zerstören. Das Bearbeiten einer großen Anzahl von Animationen ist jedoch umständlich.

5. Passen Sie die Animations- und Partikelparameter an

 In den meisten Fällen ist es nicht erforderlich, die Parameter der Animation und der Partikel anzupassen, sondern sie einfach direkt abzuspielen. Manchmal gibt es spezielle Anforderungen, wie z. B. die Beschleunigung und Verzögerung der Animationswiedergabe, die Änderung der Gesamtzeit durch Partikel usw. Aktuelle Beispiele sind wie folgt

GameObject particle = Instantiate(prefabParticle);
//如果粒子没有勾选Play On Awake选项,就需要手动调用Play
ParticleSystem ps = particle.GetComponent<ParticleSystem>();
//注意!不要再播放后修改参数,不支持
//因此测试本脚本必须取消勾选粒子的Play On Awake选项

//获取主参数,即粒子组件界面上的第一组参数
ParticleSystem.MainMoudle main = ps.main;
main.duartion = 1;      //改变总持续时间
main.startSpeed = 40;   //改变初始速度
main.stopAction = ParticleSystemStopAction.Destroy;   //改变播放一次后的行为

//同理,获取发射参数
ParticleSystem.EmissionModule emission = ps.emission;
emission.rateOverTime = 1000;    //加大发射频率

ps.Play();

Wie im obigen Code gezeigt, können die meisten Parameter von Partikeln über Skripte geändert werden. Aufgrund von Änderungen an zugehörigen Funktionen sind bei vielen Entwicklern Kompilierungsfehler aufgetreten.

Im obigen Code muss jede Parametergruppe einer temporären Variablen (z. B. Haupt- oder Emissionsvariable) zugewiesen werden, bevor die Variable geändert wird. Parameter können jedoch nicht direkt mit einem einzeiligen Ausdruck geändert werden. Dies liegt wahrscheinlich daran, dass Typen wie MainModule und Emmision Strukturen sind und das Partikelsystem eine spezielle Syntax verwendet, um Strukturdaten und Partikelkomponenten zu binden, was zu dieser seltenen Syntax führt. Phänomen.

Das Ändern der Wiedergabegeschwindigkeit von Animationen stellt ebenfalls eine häufige Anforderung dar. Der Beispielcode lautet wie folgt

//创建动画prefab
GameObejct obj = Instantiate(prefab);
//给都规划加上定时销毁脚本,并定时1秒
obj.AddComponent<TimeDestroy>.time = 1;

//修改动画播放速度为2倍速
Animator anim = obj.GetComponent<Animator>();
anim.speed = 2;

 

 

Supongo que te gusta

Origin blog.csdn.net/m0_63024355/article/details/132274296
Recomendado
Clasificación