

Blubbi
Members-
Posts
5 -
Joined
-
Last visited
Recent Profile Visitors
703 profile views
Blubbi's Achievements

Newbie (1/3)
0
Reputation
-
Guten Abend zusammen, ich bin gerade dabei ein Schalter Rätsel zu erstellen. Am Anfang hatte ich das Problem das wenn ich den Schalter gedrückt habe meine Rote und Blaue Wegsperre sich nicht geändert hatten(Rot wird frei und Blau wird gesperrt. Beim nochmaligen Aktiviren des Schalters soll Rot gesperrt werden und Blau soll frei werden). Nach dem ich zwei neue GameObject Variablen erstellt hatte und im Inspector sie dann zugewiesen hatte funktionierte es. Wenn ich weitere Wegsperren eingefügt hatte in der Scene wurden die Ignoriert. Klar hatten keine Verknüpfung zum Schalter. Jetzt würde ich das Script erweitern. das ich weitere Sperren einfügen kann. Option 1 wäre das ich so viele GameObject Variablen erstelle so viele Sperren ich habe. aber ich müsste dann in den Script genau so viele verknüpfungen erstellen was natürlich unflexibel wäre. Habe mir dann Option 2 Überlegt das ich ein GameObject Array erstelle das ich für jede Scene wo ich mit den Sperren arbeite unterschiedliche anzahlen von Sperren nutzen kann. Sobald ich aber das Array erstelle mault mein Visual Studio das er mit den Befehl rotebox.GetComponent<rswitch>.switchred(); nichts anfangen kann bzw. blauebox.GetComponent<bswitch>.switchblue(); bswitch und rswitch sind zwei Script die bei den jeweiligen Sperren eine Animation abspielen wie die Sperre ein oder ausfährt und dementsprechend den Box Collider 2d aktiviert oder deaktiviert. using System.Collections; using System.Collections.Generic; using UnityEngine; public class RBSwitch : MonoBehaviour { private Animator anim; public GameObject[] rotebox; public GameObject[] blauebox; // Start is called before the first frame update void Start() { //rotebox = GameObject.Find("/Rot/R_Box"); //blauebox = GameObject.Find("/B_Box"); //rotebox = GameObject.FindGameObjectsWithTag("switch_r"); //blauebox = GameObject.FindGameObjectsWithTag("switch_b"); anim = GetComponent<Animator>(); } // Update is called once per frame void Update() { } public void Smash() { if (anim.GetBool("rbonoff") == true) { anim.SetBool("rbonoff", false); rotebox.GetComponent<rswitch>().switchred(); blauebox.GetComponent<bswitch>().switchblue(); } else { anim.SetBool("rbonoff", true); blauebox.GetComponent<bswitch>().switchblue(); rotebox.GetComponent<rswitch>().switchred(); } } } wo habe ich da meine Fehler drin bzw. habe ich denn falschen Ansatz für mein Rätsel? Hier unten habe ich noch ein Screen von einen alten Spiel vom Super Nintendo das man sich in etwas vorstellen kann was ich meine.
-
Hallo zusammmen, ich heiße Sven, meine Freunde nennen mich Blubbi und im Internet bin ich unter den Namen unterwegs 😀 Ich bin hier zu euch gestoßen da mir das Spieleprogrammieren viel Spaß macht. Angefangen hat es damals mit den RPG Maker 2000, mit den ich paar Projekt am laufen hatte. Ich hatte danach eine längere Pause gehabt und habe mir den RPG Maker MV geholt mit ihn zu arbeiten und herum zu Testen. Es hatte mir nicht wirklich Spaß gemacht mit den Programm zu arbeiten. Da man ja doch eingeschränkt ist. Mit Unity verspreche ich mir mehr. Ich habe schon viele Videos und paar Tutorials von Unity angesehen und bin immer mehr begeistert. Ich hoffe hier in der Community auf paar nette Leute zu treffen mit den ich mich austauschen oder Hilfe finde wenn etwas mal nicht funktioniert. Euer Blubbi
-
Hallo zusammen, ich bin seit paar Tagen dabei mich mit Unity 3D einzuarbeiten und danach C# anzueignen. Der Zeit sehe ich mir ein YouTube Tutorial für ein 2D Top-down Game an. In den Tutorial wird per Tilemap die 2D Map erstellt, das Camera Movement wurde so gescriptet das man den Bereich der Map, die Minimale und Maximale X und Y Achse einstellt damit die Camera nicht ins graue hinaus geht. Mit einen GameObject wird auf der Map wird per Trigger die Minimale und Maximale X und Y Achse eine Wert dazu addiert um in einen anderen Sektor zukommen. Da ich immer etwas herumspiele würde gerne das Trigger Script abändern. Zurzeit arbeitet das Script das er den Wert von X und Y addiert oder Subtrahiert. Ich würde es so umbauen das ich den Inspector die neuen Werte für die Camera eintrage und die dann an der Camera übertragen wird. Weis aber noch nicht wie es funktioniert. Habt ihr da für mich ein Tipp? Script für die Camera Bewegung using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraMovement : MonoBehaviour { public Transform target; public float smoothing; public Vector2 maxPosition; public Vector2 minPosition; // Start is called before the first frame update void Start() { } // Update is called once per frame void LateUpdate() { if (transform.position != target.position) { Vector3 targetPosition = new Vector3(target.position.x, target.position.y, transform.position.z); targetPosition.x = Mathf.Clamp(targetPosition.x, minPosition.x, maxPosition.x); targetPosition.y = Mathf.Clamp(targetPosition.y, minPosition.y, maxPosition.y); transform.position = Vector3.Lerp(transform.position, targetPosition, smoothing); } } } Script wenn der Player den Collider berührt und die X und Y werte addiert werden using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class RoomMove : MonoBehaviour { public Vector2 cameraChange; public Vector3 playerChange; private CameraMovement cam; public bool needText; public string placeName; public GameObject text; public Text placeText; // Start is called before the first frame update void Start() { cam = Camera.main.GetComponent<CameraMovement>(); } // Update is called once per frame void Update() { } private void OnTriggerEnter2D(Collider2D other) { if(other.CompareTag("Player")) { cam.minPosition += cameraChange; cam.maxPosition += cameraChange; other.transform.position += playerChange; if(needText) { StartCoroutine(placeNameCo()); } } } private IEnumerator placeNameCo() { text.SetActive(true); placeText.text = placeName; yield return new WaitForSeconds(0.8f); text.SetActive(false); } }