Jump to content
Unity Insider Forum

KaBau

Members
  • Posts

    174
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by KaBau

  1. Hi, kann man ein zweites Scene View Fenster einschalten? Ich kenne dieses von meinem CAD Arbeitsplatz im Büro. Dort habe ich eine Aufsicht und im Fenster daneben eine Seitenansicht oder 3D Ansicht. In Unity kann ich aber scheinbar immer nur ein Scene Fenster aktuell haben. Was ich machen will: meine Camera zeigt meinen Space Shooter von oben. Nun habe ich ein Raumschiffwrack, bei dem ich verschiedene Prefabs immer wieder positioniere. Ich habe auch Prefabs, welche von unten am Wrack hängen. Da es aber ein Wrack ist, kann man natürlich ab und zu durchschauen. Nun wäre es toll, wenn ich aus meiner Kameraperspective von oben auf das Wrack blicke und in einem weiteren Fenster von unten das Prefab hin- und herschiebe. Nur so kann ich prüfen, ob das Prefab ja überhaupt sichtbar ist oder ob ich es nicht weiter beachten muss. Im Game View sehe ich immer nur den Startpunkt des Level. Und dort immer wieder zu meiner Stelle zu fliegen an der ich am Wrack arbeite um zu sehen ob die Position des Prefab gut ist, dass dauert halt etwas lange. Im Scene View immer hin und her zu wechseln ist auf die Dauer auch nervig.
  2. Hi, hat von euch schon jemand ifc Architekturmodelle (auch gerne als BIM Modelle bezeichnet) in Unity importiert? Wenn ja, welche Möglichkeiten ergeben sich bei der Nutzung der Daten? Damit meine ich folgendes: viele CAD Zeichenprogramme für Architekten haben ja entweder einen internen Renderer (wie z.B. EliteCad) oder eine direkte Anbindung an ein eigenständiges Renderprogramm (wie z.B. ArchiCad mit Cinema 4D). Damit kann ich auch (selbst mit VR) durch die Gebäude laufen. Welcher Vorteil ergibt sich durch die Nutzung von Unity als weiteres Werkzeug im Architekturbüro? Ach Mist: ich habe dieses Thema ins falsche Forum gesetzt. Sollte natürlich in "Asset Importing" gelegt werden. Kann mir jemand mitteilen, wie ich das verschieben kann? Danke.
  3. Gelöst: Es blieb mir nichts anderes übrig, als Visual Studio komplett zu deinstallieren. Danach musste ich beim neu Installeren von Unity das Visual Studio mit auswählen (ich hatte Visual Studio vorher manuell installiert). Wenn ich nun aus Unity ein Script öffne ist alles wieder so wie vorher. Das hatte aber beim ersten mal nicht geklappt, weil er zur Seite von Microsoft keine Verbindung aufbauen konnte.
  4. Hi, nach meinem vorletzten Update von Unity erschien beim Start von Visual Studio 2017 folgende Fehlermeldung: "Das Projekt "mein Projektname" kann der aktuellen Projektmappe nicht hinzugefügt werden, da ein Projekt mit demselben Projektdateinamen bereits in der Projektmappe vorhanden ist." Nach zweimaligen klicken auf "OK" konnte ich aber normal arbeiten. Beim nun letzten Update von Unity auf die Version 2018.2.3f1 muss ich 4x auf "OK" klicken. Und im Projektmappen-Explorer werden mir nun auch nicht mehr meine Scripts angezeigt. Wenn ich nicht 4x auf "OK" klicke, sondern einfach nichts mache, öffnet irgendwann MonoDevelop mit der Fehlermeldung "Invalid solution file. There are two projects with the same GUID. The project F:\...... will be ignored". Da ich vor der Arbeit mit Unity noch nie programmiert habe (ok, Basic in der Schule an einem alten IBM mit 5,25 Zoll Disketten und danach etwas auf meinem alten C64, aber nie etwas richtig) weis ich hier nicht, was gemeint ist. Ich schätze einmal, dass beim Update irgendeine Datei mit einer Art Inhaltsverzeichnis doppelt erstellt wurde und ich somit eine Datei löschen muss - aber welche? Gruß, Kurbau
  5. Sieht gut aus. Ich finde es nur etwas verwirrend, dass beim Springen der Charakter immer nach oben schaut. Das sieht bei Sprüngen welche nach vorne gehen dann doch nicht so gut aus, weil hier gar nicht das Ziel anvisiert wird. Bei Sprüngen, welche direkt nach oben gehen ist es aber natürlich richtig.
  6. Nach vielen Probieren habe ich doch selber die Lösung gefunden: Bei den Import Setting der Textur habe ich unter "Wrap Mode" die Einstellung "Clamp" gewählt. Nun liegen meine einzelnen Flächen ohne Flimmern aneinander.
  7. Hi, ich möchte über die Saturnringe fliegen. Dafür habe ich mir eine großes Bild mit einer Höhe von 20480 Pixel erstellt. Nun wollte ich einzelne Quad erstellen und diese mit Teilabschnitten des großen Bild als Textur belegen (somit kann ich nach der Hälfe des Überflug einfach die Objekte spiegeln). Dabei kommt es am Rand der einzelnen Quad immer zu einem Flimmern. Ich denke mir dass liegt daran, dass die Textur hier nun endet und die letzte Pixelreihe manchmal gezeigt wird, und manchmal nicht. Je nach Lage des Objekt zur Camera. Im Bild ist die Schnittkante zwischen zwei Flächen etwas oberhalb des Schiffes zu erkennen. Was kann ich tun?
  8. Ich bin gegenüber anderen Mitgliedern hier noch ein Anfänger, würde aber meinen, dass du noch keinen Input abfragst, um danach etwas zu bewegen. Anbei ein Script zum Bewegen meiner Camera (nur nach links und rechts): void Update () { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { touchYes = true; cameraMoveHorizontal = Input.GetTouch(0).deltaPosition.x; } else { touchYes = false; } } private void FixedUpdate() { if (touchYes) { if (cameraMoveHorizontal > 0 && transform.position.x <= cameraXMax || cameraMoveHorizontal < 0 && transform.position.x >= cameraXMin) { Vector3 cameraMovement = new Vector3(cameraMoveHorizontal, 0.0f, 0.0f); transform.Translate(cameraMovement * cameraMoveSpeed * Time.deltaTime); } } } } Mit "Input.touchCount > 0" frage ich ab, ob eine Berührung des Bildschirm (also ein Tuoch) erfolgt. Danach Frage ich die Phase ab. Siehe dazu auch https://docs.unity3d.com/ScriptReference/Touch-phase.html Dann wandle ich die Toucheingabe in eine Variable um: "cameraMoveHorizontal = Input.GetTouch(0).deltaPosition.x;" um diesen Wert weiter unten in eine Bewegung umzusetzen. Ups, habe eben meine Variablen des Script vergessen. Hier sind sie: float cameraMoveHorizontal =0.0f; public float cameraMoveSpeed = 4.5f; int cameraXMin = -2; int cameraXMax = 2; bool touchYes = false; Geht sicher auch eleganter, soll dir aber ersteinmal einen Anstoß zum Denken geben.
  9. Wie oben geschrieben, habe ich nun den Controller geändert. Hierzu habe ich einem Cube erstellt, als Target für den Player, damit ich diesen mit private void FixedUpdate() { if (plyTarget != null) { transform.position = Vector3.Lerp(transform.position, plyTargetPos.position, plyMoveSpeed); } } zum Cube bewegen kann. Den Cube selber habe ich folgendes Script angehängt public class PlyTouchTargetMove : MonoBehaviour { Vector3 plyTargetPos; Vector3 touchOldPos; Vector3 touchNewPos; Vector3 diff; float plyXMin = -8.0f; // Spielfeldgrenze links float plyXMax = 8.0f; // Spielfeldgrenze rechts float plyZMin = -4.4f; // Spielfeldgrenze unten float plyZMax = 21f; // Spielfeldgrenze oben float posStartX = 0.5f; // Verhältnis Startposition Player beim Start zur Screenbreite float posStartZ = 0.175f; // Verhältnis Startposition Player beim Start zur Screenhöhe float PlyTargetMoveSpeedHorizontal = 16.0f; // plyXMin bis plyXMax float plyTargetMoveSpeedVertical = 25.5f; // plyzMin bis plyZMax void Update() { // if (Input.GetButtonDown("Fire1")) if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) { touchOldPos = Camera.main.ScreenToViewportPoint(Input.GetTouch(0).position); float tOPX = (touchOldPos.x -= posStartX) * PlyTargetMoveSpeedHorizontal; float tOPY = (touchOldPos.y -= posStartZ) * plyTargetMoveSpeedVertical; float tpx = transform.position.x; float tpz = transform.position.z; diff = new Vector3(tpx -= tOPX, 0f, tpz -= tOPY); return; } // if (Input.GetButton("Fire1")) if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { touchNewPos = Camera.main.ScreenToViewportPoint(Input.GetTouch(0).position); touchNewPos.x = (touchNewPos.x -= posStartX) * PlyTargetMoveSpeedHorizontal; touchNewPos.z = (touchNewPos.y -= posStartZ) * plyTargetMoveSpeedVertical; touchNewPos.y = 0.0f; plyTargetPos = touchNewPos += diff; if (plyTargetPos.x >= plyXMax) { plyTargetPos.x = plyXMax; } if (plyTargetPos.x <= plyXMin) { plyTargetPos.x = plyXMin; } if (plyTargetPos.z >= plyZMax) { plyTargetPos.z = plyZMax; } if (plyTargetPos.z <= plyZMin) { plyTargetPos.z = plyZMin; } transform.position = plyTargetPos; } } } Unter "if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)" ermittle ich den Abstand zwischen der aktuellen Position des Cube und der ersten Toucheingabe, damit ich diese später als Variable "diff" nutzen kann. Somit hängt der Cube nicht direkt an meiner Touchposition. Unter "if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)" lege ich als neue Position des Cube die aktuelle Toucheingabe zugrunde, mit der zuvor genannten "diff" Variable. Zudem prüfe ich, ob der Cube innerhalb der Spielfeldgrenzen (Variablen "plyxMin"...) liegt. Zur Ermittlung der Cube Position in Verbindung zur Toucheingabe: Die Auswertung des Touchposition passiert mit "Camera.main.ScreenToViewportPoint(Input.GetTouch(0).position);", wobei nach meinem Wissen ein Wert zwischen 0,0 und 1,1 (x und y Richtung) ausgegeben wird. Zuerst setzte ich mit "touchOldPos.x -= posStartX" den Toucheingabewert 0.5 in X Richting auf 0 (also der Spielfeldmitte). Danach multipliziere ich mit "... * PlyTargetMoveSpeedHorizontal" diesem Wert mit der maximalen Spielfeldausdehnung. Ergibt beispielhaft für die Toucheingabe 0.25 in X Richtung: 0.25 - 0.5 = -0.25 * 16 = -4 als Spielfeldwert, was bei einem Spielfeld von -8 bis +8 Richtig ist. Da ich die Toucheingabe direkt auf die Position des Cube umsetze habe ich alles in der Update Methode belassen. Was mir Anfangs Kopfzerbrechen bereitete war die Umrechnung der Y Richtung der Toucheingabe in die Z Richtung des Spiel, da ich von oben auf das Spiel schaue und ich somit den Player gar nicht in Y Richtung der Spielwelt bewege.
  10. Hi, mein Touch Controler unter welchen in am Ende dort beigefügt habe hat im Nachgang doch Probleme: ab und zu verschwindet der Player bei zu schnellen Bewegungen. Und das Raumschiff bewegt sich nie parallel zur Touch Position. Ich denke mir, das liegt daran, dass "Input.GetTouch(0).deltaPosition" den Pixelabstand ermittelt, aber nicht den World Abstand im Spiel. Da die Touch Steuerung für mich neu ist, habe ich nun die gesamten Abende in der Woche versucht einen besseren Controller zu programieren. Ich versuche nun mit "Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position)" die Touchposition in die World Position umzuwandeln und dann weiter zu bearbeiten. Leider ohne Ergebnis. Hier mein aktueller Stand Da das Script nicht funktionierte, habe ich es gelöscht. Die lauffährige Version ist in einem eigenen Treat eingetragen. Ich denke mir, dass ich mit Vector3 und Vector2 Fehler erstelle. Bin mir aber nicht sicher. Derzeit fliegt mein Raumschiff immer nur nach oben, egal wie ich meinen Finger bewege. Früher flog es nur nach oben rechts. Eventuell ist aber auch das Problem, dass mein Game eine 3D Camera hat, welche von oben auf die Spielwelt schaut. Ich versuche aber ein auf einer Y-Ebene 0 liegendes Raumschiff in die X-Richtung (links und rechts), bzw. Z-Richtung (hoch und runter) zu bewegen. Da "ScreenToWorldPoint" aber ein Vector3 ausgibt kann es ja irgendwie auch nicht klappen. Oder muss ich mit "ScreenToViewportPoint" arbeiten? Wobei mir hierbei nicht der Unterschied zu "..WorldPoint" und "...ViewportPoint" klar ist. Da verlässt mich mein Englisch.
×
×
  • Create New...