Unity3D / C#: "GetComponent" von Liste?

Hallo liebe Unity3D- und C#-Freunde da draußen!

Ich arbeite gerade an einem Ich-bin-ein-Ball-und-sammle-kleine-Würfel-ein-Spiel, bin aber leider ein totaler Anfänger, wenn es um das Skripten geht und jetzt auf ein Problem gestoßen.

Und zwar habe ich, wie in meiner letzten Frage schon erwähnt, mein Spiel mithilfe des PostProcessingStack-Pakets, etwas "aufgehübscht". Jetzt dachte ich mir, es wäre es ein tolles Feature, wenn ich bei Berührung einiger Objekte ein anderes PostProcessingStack-Profil aufrufen könnte. Zum Beispiel beim Durchfahren meiner giftigen Wolken hätte ich gerne ein leichtes Rauschen usw..

Also habe ich ein zweites PPS-Profil erstellt und mit folgendem Skript die Berührung "beobachtet" und das neue PPS-Profil verwendet (dieses Skript hat die Kamera!).

GameObject Player;
GameObject Gas;
Collider PlayerCollider;
Collider GasCollider;

void Start()
{
  Player = GameObject.FindGameObjectWithTag("Player");
  GameObject Gas = GameObject.FindGameObjectWithTag("Gas");
  PlayerCollider = Player.GetComponent<Collider>();
  GasCollider = Gas.GetComponent<Collider>();
}

void LateUpdate()
{
  if (PlayerCollider.bounds.Intersects(GasCollider.bounds))
  {
    GetComponent<PostProcessingBehaviour>().profile = GasProfile;
  }
  else if (!PlayerCollider.bounds.Intersects(GasCollider.bounds))
  {
    GetComponent<PostProcessingBehaviour>().profile = CCProfile;
  }
}

So, das funktioniert auch wunderbar. Aber leider immer nur bei einer Wolke.

Ich würde jetzt gerne die Wolken (im Skript "Gas" genannt) in eine Liste umwandeln. Ich habe da ein bisschen mit den eckigen Klammern herumgespielt, jedoch mehr Fehler als Erfolge erzielt. Ich hoffe, mir kann jemand da draußen helfen.

Vielen Dank schon mal im Voraus!

Beste Grüße KomischerLappen. 😊

Computer, programmieren, Programmierung, CSharp, Liste, Unity, unity3d
2 Antworten
Unity3d Scriptübergreifende Liste?

Hallo liebe Programmierfreunde da draußen :)

Ich arbeite gerade an einem Ich-bin-ein-Ball-und-sammle-kleine-Würfel-ein-Spiel, bin aber noch ziemlicher Anfänger. Vor allem was das Coden angeht.

Ich komme gerade aber nicht weiter, da das Scriptübergreifende Arbeiten recht schwer für mich ist. Ich weiß, dass ich so:

 GameObject Gem;
 PlayText PlayTextGem;
 void start { Gem = GameObject.FindGameObjectWithTag("Gem");  PlayTextGem = Gem.GetComponent<PlayText>(); }


einerseits auf das GameObject mit dem Tag "Gem" und auf dessen Component, in diesem Fall ein Script, mit dem Namen "PlayText" zugreifen kann.

Jetzt habe ich aber mehrere "Gem" Objekte in meiner Szene und alles was ich jetzt mit dem oben genannten Code im "PlayText" Script ändere, passiert nur für einen einzigen "Gem".

Also dachte ich, mache ich aus dem GameObject "Gem" eine Liste, um meine Änderungen an allen "Gem" Objekten vorzunehmen. Dabei brauche ich aber Hilfe. So weit bin ich schon:

 GameObject[] Gem;
 PlayText PlayTextGem;
 void start {
 Gem = GameObject.FindGameObjectsWithTag("Gem");
 ???????
 }

Da wo die "???????" stehen weiß ich nicht mehr weiter, da VisualStudio mir da einen Fehler markiert, wenn ich nach einem "Coponent" suche.

Ich hoffe ihr könnt mir weiter helfen :)

Vielen Dank schonmal
KomischerLappen :)

PC, Computer, programmieren, Coding, Programmiersprache, programmiersprache C, Liste, Unity, unity3d, Spiele und Gaming
1 Antwort
Unity3D ArgumentException: The Object you want to instantiate is null?

Hallo liebe Programmierfreunde da draußen. :)

Ich arbeite gerade an einem Ich-bin-ein-Ball-und-sammle-kleine-Würfel-ein-Spiel, bin aber noch ziemlicher Anfänger. Vor allem was das Coden angeht.

Ich möchte gerne, dass beim Einsammeln der Würfel ein Licht, also ein neues GameObject entsteht. Dafür habe ich dieses Script geschrieben:

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

public class CreateObject : MonoBehaviour
{
  public Transform Spawnpoint;

  public GameObject Prefab;

  private void Start()
  {
  }

  void OnTriggerEnter()
  {
    Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation);
  }
}

Natürlich habe ich mehrere aufsammelbare Würfel im Level. Jeder von ihnen hat dieses Script und jeweils ein eigenes EmptyGameObject als SpawnPoint. Das Licht ist ein Prefab und alle Würfel nutzen dieses eine.

Ich habe also einen Original-Würfel erstellt, den dann per Copy & Paste vervielfacht, alle in der Welt verteilt und jeder Kopie einen eigenen SpawnPoint für sein Licht gegeben.

So, wenn ich jetzt aber das Spiel starte, werden bei allen Würfeln, außer dem ersten Original-Würfel, unendlich Klone des Licht-Prefabs erstellt, ohne, dass ich irgendetwas mache. Dabei bekam ich diese Fehlermeldung:

UnassignedReferenceException: The variable Spawnpoint of CreateObject has not been assigned.

Nach ein bisschen Recherche habe ich diese Zeile in void start hinzugefügt:

Prefab = GameObject.FindGameObjectWithTag("SpawnLight");

So, jetzt war diese Fehlermeldung weg, aber leider auch meine Lichter. Wenn ich jetzt einen Würfel aufsammle, bleibt es dunkel. Dafür bekomme ich eine nette Fehlermeldung, welche mich wissen lässt:

ArgumentException: The Object you want to instantiate is null.

Ich habe leider keine Ahnung, was ich machen muss, um meine netten, kleinen Lichter zurückzubekommen... 😟

Ich freue mich über Hilfe jeglicher Form und bin mir sicher, dass es irgendwo da draußen jemanden gibt, der mir den Weg zum Licht zeigen und ebnen kann.

Vielen Dank schon einmal

KomischerLappen 😃

PC, Computer, programmieren, Programmierung, Coding, Error, Programmiersprache, Unity, unity3d, Spiele und Gaming
2 Antworten
Unity3d C# Collider?

Hallo liebe Coding-Freunde!

Ich sitze gerade an einem kleinen Unity3d Game bei welchem man mit einer Kugel herum rollt und lustig rotierende Würfel aufsammeln muss (Hab nach einer Tutorialreihe gearbeitet https://www.youtube.com/watch?v=ubmVc6hZEVg&t=130s ).

Um die Berührung zwischen Spieler und Würfel zu erkennen, diese aufzusammeln, zu deaktivieren und meinem Score einen Punkt hinzuzufügen nutze ich unter anderem diese Zeilen:

void OnTriggerEnter(Collider collider) {
		if (collider.gameObject.CompareTag ("Gem")) {
			collider.gameObject.SetActive (false);
			count++;
			UpdateScoreText (); 
        }

Das funktioniert auch genau so wie es sollte.

Jetzt möchte ich noch Objekte hinzufügen, welche bei Berührung 10 Punkte von einer 100 Punkte großen HP Leiste abziehen. Dafür habe ich unter anderem diesen Code verwendet:

void OnTriggerEnter(Collider enemyHit) {
		if (enemyHit.gameObject.CompareTag ("Enemy")) {
			hp = hp - 10;
			UpdateHPText ();
		}

Jedoch sieht das Unitys Console gar nicht gerne und bestraft mich mit dieser Fehlermeldung:

error CS0111: A member `PlayerController_New.OnTriggerEnter(UnityEngine.Collider)' is already defined. Rename this member or use different parameter types

Leider kenne ich mich mit Coding genauso gut aus wie mit Chinesisch. Bei "ni hao" fängt es nicht nur an, da hört es auch schon wieder auf. Ich dachte, dass "Collider" ein normaler Befehl bzw. eine Definition sei, aber irgendwie stimmt das wohl nicht so ganz...Außerdem verstehe ich nicht ganz, was ich hinter den Collider in die Klammern schreiben muss (Collider collider). Ist das zweite, kleingeschriebene "collider" der Name dieser Kollision oder was? Ist mein (Collider enemyHit) sowieso falsch, weil es "enemyHit" einfach nicht gibt? Und was muss ich ändern, wo ich doch genau den selben Ablauf wie beim Würfel aufsammeln haben will, mit dem einzigen unterschied, dass das Objekt NICHT deaktiviert wird und Punkte abgezogen, statt dazugezählt werden.

Ich bin verwirrt, hoffe aber, dass es ein paar clevere Leute gibt die gerade überlegen lächelnd leicht ihren Kopf schütteln und sich meiner erbarmen, mich bei der Hand nehmen und mir die Welt erklären.

Vielen Dank schon mal

KomischerLappen :)


Computer, Games, programmieren, Coding, Programmiersprache, programmiersprache C, unity3d, Spiele und Gaming
1 Antwort
Unity3d vs WebGL, langfristige Entwicklung?

Ich weiß, dass hier niemand eine Glaskugel hat, aber von Leuten, die beide Technologien kennen, würde mich mal ihre Einschätzung interessieren, wie sich Unity3d und WebGL in 5 bis 10 Jahren entwickeln könnten.

Der Punkt ist der: Wenn ich mich etwas tiefgehender befasse, dann möchte ich nicht irgendwann so schnell vor Auslaufware stehen. Eine Garantie gibt es natürlich nirgends.

Meine Punkte sind bisher folgende:

Pro WebGL

  • Open Source, ausnahmenslos kostenlos und alle möglichen Features verfügbar
  • Echte Plattformunabhängigkeit
  • Updates zumeist unauffällig im Hintergrund (Aktualisierung einer Webseite)
  • Mit three.js und babylon.js starke Frameworks
  • Kein Plugin notwendig, aber kann auch Nachteil sein
  • Seit 2011 in sämtlichen Browsers etabliert und verbessert (hat sich zwar nicht etabliert, aber stets gehalten)

Pro Unity

  • Eingeschränkte Basisversion kostenlos, jedoch nur für den kleinen Betrieb
  • Regelmäßige Weiterentwicklung und Verbesserung da Profit, im Gegensatz zu WebGL, was Non-Profit ist und sich lansamer entwickelt
  • Semi-Plattformunabhängigkeit, Umwandlungsmaßnahmen können je nach Plattform gewaltigen Overhead erzeugen
  • Im Gegensatz zu WebGL hat sich Unity im App-Store mit unzähligen Spielen etabliert
  • Leistungsfähiger und reicher an Features
  • Plugin bietet Unity eine abgeschlossene Umgebung und stellt damit besser sicher, dass alle Produkte auf allen Plattformen gleich laufen

Kritik an obigen Punkten gerne gesehen.

unity3d, WebGL
1 Antwort
Als Spieleentwickler kaum Chancen?

Hallöchen :) Bin 20 Jahre alt und mit meinem Abitur(Mit Schwerpunkt auf Elektrotechnik, volles Abi) bald fertig und stehe vor einem Problem.

Ich bin schon seit Jahren begeistert für die Spieleentwicklung und habe sau viel Erfahrung gesammelt in zB C#, Unity3D, gml und diverse andere programmiersprachen (zB auch html), da ich sehr oft und lange in meiner Freizeit programmiert habe, was mir auch recht viel Spaß macht, habe hier und da auch mal an kleineren Projekten mitgemacht.

Bald muss ich allerdings wissen, ob ich als Spieleentwickler in irgendeinem Unterbereich eine Ausbildung anfange, oder doch eher in Richtung Elektrotechnik, Ingenieurswesen oder Informatik eingehe. Das sind Themengebiete wo ich die Möglichkeiten dazu habe dort reinzusteigen und letzendlich hat man dort ziemlich gute Aussichten auf die Zukunft durch die wichtige Rolle der Technik.

Nur leider begeistert mich am meisten einfach das Programmieren, gerade was Spiele angeht. Mir ist bewusst wie die Anforderungen sind, habe jedoch auch ein sehr gutes Händchen dafür und bin schon sau weit was die eine oder andere Programmiersprache angeht.

Die Zwickmühle für mich entsteht durch die eher schlechteren Erfolgschancen als SE in Europa, oder auch gerade in Deutschald, was auf den Gehalt und die Arbeitsplätze bezogen ist was das Arbeiten in Studios/Unternehmen angeht die in Deutschland/EU sitzen. Natürlich kann man versuchen sein Geld als Indie-Entwickler zu verdienen, nur das scheint eine noch schlechtere Wahl zu sein und lohnt sich wohl eher als Nebenbeschäftigung. Ganz anders sieht es zB in den USA oder anderen Orten aus, wo man mit genug Wissen/Können bei den dort vorhandenen größeren Firmen letzendlich auch mehr erreichen kann.

Mir steht nur zur Wahl wendern in Deutschland als SE mein Glück zu versuchen, einen anderen Beruf anzusteuern oder echt auszuwandern.

Klar könnte man sagen, dass ich was das Programmieren angeht auch einfach Hobbymäßig erledigen kann, allerdings sehe ich dort aus persönlichen Gründen kaum Interesse.

Von daher frage ich nach, ob jemand mir sagen kann wie es vllt wirklich aussieht (zB durch Erfahrung), wenn man als SE/Indie in Deutschland/ausserhalb tätig ist, wie die Arbeit/Chancen aussehen oder welche Möglichkeiten mir da noch offen stehen würden, Danke :)

Beruf, Ausbildung, Programmierung, auswandern, Spieleentwicklung, unity3d
6 Antworten

Meistgelesene Fragen zum Thema Unity3d

Unity3D Dateien öffnen und bearbeiten

2 Antworten

Unity3D Entfernung zwischen zwei Objekten messen?

3 Antworten

Wie kann man in Unity3D ein Objekt bewegen, mit Berücksichtigung der Rotation?

1 Antwort

Unity 3d spielfigur soll dem mauszeiger folgen?

1 Antwort

Wie kann ich Blender files in unity importieren?

1 Antwort

Wo kann ich Objekte für unity3d Downloaden?

3 Antworten

Unity3D Drehpunkt einer Tür verschieben?

1 Antwort

Unity3d Treppensteigen

4 Antworten

soll ich Unity oder Unreal Engine lernen?

4 Antworten

Unity3d - Neue und gute Antworten