Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

RoughGuenni

Frischling

  • »RoughGuenni« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Ochtendung

  • Private Nachricht senden

1

16.09.2017, 14:46

Unity3D: 2 Materials auf einem GameObject?

Hallo zusammen,

ich habe hier ein kleines Problem, bei dem auch eifriges Googlen nicht zu einem wirklich zufriedenstellenden Ergebnis führt, da die meisten Lösungsvorschläge ihre unangenehmen Negativseiten haben.

Das Ergebnis soll folgendermaßen aussehen:

Gegner bei 100% Health = Default Material
Gegner bei 75% Health = Blutspritzer auf dem Material
Gegner bei 50% Health = mehr Blutspritzer auf dem Material
Gegner bei 25% Health = Material ist mit Blut vollgesudelt

Ich kaue da schon eine ganze Weile darauf rum und folgende Lösungsmöglichkeiten erscheinen mir sinnvoll:

3 Blutmaterials, die zur Laufzeit je nach Healthwert auf das Default-Material des Enemys gepinselt werden. Aber ich glaube, das ist performancetechnisch eine Katastrophe (oder?).

2 Materials auf dem GameObject Enemy. Das zweite (Blut-) Material wird je nach Healthwert prozentual eingeblendet. Ich las allerdings öfter, dass man prinzipiell keine zwei Materialen auf ein GO packen soll. Außerdem hat man ja durch das zusätzliche Material einen weiteren DrawCall.

1 Substance auf dem Enemy. Über einen Float-Regler die Blutmap einblenden. Vorteil: Nur ein Material. Nachteil: Ändere ich das Material selbst, ändert es sich auch bei allen anderen Instanzen des GOs ebenfalls. Das hieße: Ein Gegner blutet = alle Gegner bluten. Sieht bestimmt witzig aus, ist aber nicht das, was ich möchte. :D

Man sieht das, was ich vorhabe, ja nicht selten in Games. Weiß einer, ob es da so was wie ein Best Practise gibt?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

17.09.2017, 00:28

Mach dir doch einen Shader, der das Blut einblendet. Jede Instanz kann natürlich ihren eigenen „Regler“ haben.

RoughGuenni

Frischling

  • »RoughGuenni« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Ochtendung

  • Private Nachricht senden

3

17.09.2017, 23:02

'nen eigenen Shader schreibseln? o.O
Bislang hielt ich das noch für eine Stufe zu hoch für mich - aber irgendwann muss ich mich wohl damit auseinandersetzen, hm? :)

Nun kann ich bei Unity im Inspector den Objekten ja ein Material zuweisen, inkl. einem Shader. Aber wenn ich Einstellungen am Shader vornehme, wirkt sich das auf alle Objekte aus, die dieses Material haben.
Ich nehme an, es gibt dann skripttechnisch einen Weg, dem Shader mitzuteilen, dass die Änderung nur die ausgewählte Instanz betrifft? Nicht falsch verstehen, ich möchte jetzt nicht das Thema Shader-Schreiben erklärt bekommen (das krieg ich schon selber raus); nur die Frage, ob es theoretisch möglich ist, Änderungen am Shader vorzunehmen, die sich nur auf die betreffende Objektinstanz auswirken.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

17.09.2017, 23:14

Du kannst einem Shader Parameter geben. Die Werte dafür kannst du für deine Instanzen passend wählen. Das kann zum Beispiel der Lebenswert sein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Tiles

Treue Seele

Beiträge: 168

Wohnort: none

  • Private Nachricht senden

5

18.09.2017, 10:22

Wieso machst du dir nicht einfach vier verschiedene Texturen, und tauschst die entsprechend der Health Punkte aus? Das geht auch während Runtime.

https://docs.unity3d.com/ScriptReference…SetTexture.html
Free Game Graphics, Freeware Games https://www.reinerstilesets.de

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

18.09.2017, 10:23

Das ginge natürlich auch, ist aber unschön, wenn es sehr viele Abstufungen geben soll. Ein regelbares Material finde ich da schöner.

Tiles

Treue Seele

Beiträge: 168

Wohnort: none

  • Private Nachricht senden

7

18.09.2017, 10:25

Ja, das stimmt wohl. Wäre aber eben die einfachste Lösung ^^
Free Game Graphics, Freeware Games https://www.reinerstilesets.de

RoughGuenni

Frischling

  • »RoughGuenni« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Ochtendung

  • Private Nachricht senden

8

20.09.2017, 18:45

Da ich den Shader dann später auch für andere Zwecke gut gebrauchen könnte, werde ich mir einen schreiben. Das ist zwar erheblich aufwändiger, als die Texturen zu tauschen (vielen Dank für den Hinweis!), zumal mir da noch 'ne Schippe Basiswissen fehlt, aber irgendwann muss ich mich ja mit dem Thema auseinandersetzen.

Danke für alle Tipps und Hinweise!

Superwayne

Treue Seele

Beiträge: 242

Beruf: Student & App Entwickler (Xamarin)

  • Private Nachricht senden

9

21.09.2017, 11:58

Kleiner Hinweis: Die Default Shader aus Unity findet man auch irgendwo im Netz, falls du auf denen aufbauen möchtest.

RoughGuenni

Frischling

  • »RoughGuenni« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Ochtendung

  • Private Nachricht senden

10

22.09.2017, 10:46

Ach, kiek an! Danke!

Werbeanzeige