Eine einfache und schnelle Möglichkeit hat regex9 vorgestellt. Mit Eigenschaften kannst du kontrollieren, wie mit einem Objekt "von außen" umgegangen werden soll, beispielsweise ob man den Wert in der Variable lesen oder schreiben darf, sowie auf welche Art und Weise.

Eine weitere Möglichkeit wäre das Einführen einer eigenen Klasse. In C# kann man nämlich eine Operatorüberladung vornehmen. Du könntest dann für deine Klasse nur den "+" einführen, aber nicht die anderen arithmetischen Operatoren, sodass man den Wert in einer Instanz dieser Klasse immer nur erhöhen könnte (ist etwas komplizierter als das, weil man dann Objekte miteinander "verrechnet"). Das führt aber an dieser Stelle meiner bescheidenen Meinung nach zu weit, gerade wenn du nicht mehr mit dieser Variable machen möchtest als diese Einschränkung, dass man den Wert in der Variable nur erhöhen darf.

...zur Antwort

Schau mal in den Terrain Settings nach der Einstellung "Tree Distance". Diese Einstellung entscheidet darüber, ab welcher Distanz zur Kamera die Bäume nicht mehr zu sehen sind.

...zur Antwort

C# Programm Zweidimensionales Array?

Moin,

sitze schon ne Weile an einem Programm, das einen Integer (nennen wir ihn Zahl ) vom Benutzer einlesen soll. Ausgehend von Zahl soll dann wie folgt ein zweidimensionales Array erstellt werden:

  • das Array ist Zahl x Zahl groß
  • das Element oben links im Array (also [0, 0] ) hat den Wert Zahl x Zahl
  • jedes weitere Element rechts daneben hat jeweils -1 weniger
  • anders beschrieben: es wird von links nach rechts abwärts gezählt beginnend vom Wert Zahl x Zahl

Da ich mir den Lösungsweg Stück für Stück erarbeiten möchte, könnt Ihr auf die komplette Lösung/ bzw. Erklärung verzichten.

Ich weiß, dass man Zeilen und Spalten bei dieser Aufgabe beide mit for-Schleifen erstellen kann, doch der Einfachheit halber möchte ich erst verstehen, wie ich mit den Spalten vorgehen muss.

Ohne for-Schleife bekomme ich die erste Spalte problemlos erstellt und das sieht dann so aus:

oder:

Console.WriteLine("Geben Sie eine Zahl ein, bei der nach dem"+ "Schema Zahl*Zahl ein Array erstellet werden soll:");
            string eingabe = Console.ReadLine();
            int intEingabe = Convert.ToInt32(eingabe);
            Console.WriteLine("\n");
            int[,] eingabeArray = new int[intEingabe,intEingabe];
            int eingabeArrayLänge = intEingabe * intEingabe;

            //Erste Spalte:
            eingabeArray[0, 0] = eingabeArrayLänge;
            eingabeArray[1, 0] = eingabeArray[0, 0] - 1;
            eingabeArray[2, 0] = eingabeArray[1, 0] - 1;
            Console.WriteLine(eingabeArray[0, 0] + "\n" + eingabeArray[1, 0] + "\n" + eingabeArray[2, 0]);

Bis dahin kein Problem doch wie schaffe ich es nun, dass ich die erste Spalte nicht "von Hand" ausfüllen muss? Das muss doch irgendwie mit ner for-Schleife zu machen sein?

Doch ich komme da nicht weiter - egal wie ich es drehe und wende.. Wäre nett wenn jemand mir die passende for-Schleife zeigen könnte.

LG

...zur Frage

Schau zum Beispiel mal hier, wie man in C# durch einen multidimensionalen Array iteriert: How do you loop through a multidimensional array?

Dann musst du es nicht von Hand ausfüllen.

...zur Antwort

Das dürfte die Serie Shaolin Wuzang sein, das lief mal auf Kika. Auch die Beschreibung der ersten Folge auf der Wikia-Seite klingt sehr ähnlich.

...zur Antwort

Das ist ein bekanntes Problem, schau mal hier, die Person hatte das gleiche Problem. Es gibt verschiedene Lösungsansätze, die beispielsweise hier gelistet sind.

...zur Antwort

Wenn du in Start() die Position der Mouse dir einmal holst, dann bleibst die für den Rest des Spiels gleich, egal wo der Spieler seine Mouse hinbewegt. Du musst die Position der Mouse jedes Mal neu berechnen, bevor du dein Objekt bewegst.

private void FixedUpdate()
{
    mousePosition = camera.ScreenToWorldPoint(Input.mousePosition);
    transform.Translate(mousePosition.normalized  * Stats.BulletSpeed * Time.deltaTime);
}

oder direkt als lokale Variable, ohne Objektfeld in der Klasse:

private void FixedUpdate()
{
    var mousePosition = camera.ScreenToWorldPoint(Input.mousePosition);
    transform.Translate(mousePosition.normalized  * Stats.BulletSpeed * Time.deltaTime);
}

...zur Antwort
10-15 Stunden

Einmal habe ich das gemacht, welchen Anime weiß ich nicht mehr, könnte Soul Eater gewesen sein, morgens um 10 Uhr angefangen und abends so um 9-11 Uhr wieder aufgehört.

...zur Antwort

Löschen von nicht sichtbaren Objekten ist vielleicht der falsche Ansatz beziehungsweise ein Optimierungsdetail, was schlussendlich viel Aufwand mit wenig Nutzen bedeutet.

Schau dir beispielsweise Occlusion Culling an. Das macht schon so was in der Art, es "versteckt" Objekte, die nicht im sichtbaren Bereich sind.

Das Löschen von Objekten macht dann Sinn, wenn du beispielsweise ein fortlaufendes Level hast mit pseudo-unendlich vielen Objekten, so dass irgendwann keine Objekte mehr erstellt werden können. Das dauert allerdings sehr lange, bis man den Punkt mal erreicht hat.

...zur Antwort

Das ist ein bekanntes Problem, schau mal hier, die Person hatte das gleiche Problem. Es gibt verschiedene Lösungsansätze, die beispielsweise hier gelistet sind.

...zur Antwort

Probier mal die Lösungsvorschläge hier: Mouse cursor is invisible in unity

...zur Antwort

Schau dir mal Timelines an. Creating Timelines könnte auch hilfreich sein. Die erlauben es dir, eine Bewegung graphisch darzustellen.

...zur Antwort

Wie behebe ich in Unity den Fehler CS1061 ('Player' does not contain a definition for 'GetPosition' ...)?

Ich programmiere erst seit ein paar Wochen und habe mithilfe von YouTube und dem Internet mich durch Stunden des Codens und ähnlichem geboxt.

Doch nun, nachdem ich mein erstes wirkliches Projekt gestartet habe, stoppt mich nun der Fehler

CS1061:Assets/LevelGenerator.cs(28,45): error CS1061: 'Player' does not contain a definition for 'GetPosition' and no accessible extension method 'GetPosition' accepting a first argument of type 'Player' could be found (are you missing a using directive or an assembly reference?).

Es wäre superduper megamäßig cool, wenn sich jemand meganettes meinen Code ansehen könnte, um mir zu sagen was mein Fehler ist.

Dankeschön an jeden, der sich die Zeit nimmt, um mir zu helfen. Dankeschön. 😃

Hier nun mein Code (er soll eine unendliche Welt generieren):

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

public class LevelGenerator : MonoBehaviour {
  private const float PLAYER_DISTANCE_SPAWN_LEVEL_PART = 200f;

  [SerializeField]
  private Transform levelPart_1;

  [SerializeField]
  private Transform levelPart_Start;

  [SerializeField]
  private Player player;

  private Vector3 lastEndPosition;

  private void awake()
  {
    lastEndPosition = levelPart_Start.Find("EndPosition").position;
    int startingSpawnLevelParts = 5;

    for (int i = 0; i < startingSpawnLevelParts; i++)
    {
    }
  }

  private void Update()
  {
    if (Vector3.Distance(player.GetPosition(), lastEndPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART)
    {
      // Spawn another level part
      SpawnLevelPart();
    }
  }

  private void SpawnLevelPart()
  {
    Transform lastLevelPartTransform = SpawnLevelPart(lastEndPosition);
    lastEndPosition = lastLevelPartTransform.Find("EndPosition").position;
  }

  private Transform SpawnLevelPart(Vector3 spawnPosition)
  {
    Transform levelPartTransform = Instantiate(levelPart_1, spawnPosition, Quaternion.identity);
    return levelPartTransform;
  }
}

PS.: Danke an jeden, der hilft oder sich das hier auch nur wenigstens durchliest. 😃

...zur Frage

Kannst du bitte deine Implementierung von "Player" posten? Die Fehlermeldung bedeutet, dass es diese Methode in der Klasse "Player" nicht gibt. Falls du die Klasse selber geschrieben hast, musst du eine solche Methode auch selber implementieren.

Alternativ, wenn "Player" von MonoBehaviour erbt, kannst du auch das hier machen, sofern es inhaltlich das Gleiche bedeutet:

player.gameObject.transform.position
...zur Antwort

Die Game View verwendet die Kamera, die in der Szenenhierarchie konfiguriert ist, wohingegen die Scene View eine eigene Kamera verwendet. Ich würde vermuten, dass deine Objekte so in deiner Welt liegen, dass die Kamera der Game View diese einfach nicht im Bild hat.

Um das zu testen, schau dir genau an, wie deine Kamera im Spiel liegt und erstell dann einfach ein primitives Objekt wie einen Cube so, das dieser auf jeden Fall im Bereich der Kamera ist. Wird der Cube dann nicht angezeigt, ist es was anderes. Alternativ kannst du deine Prefabs natürlich auch so instantiieren, um das zu überprüfen.

Eine andere Idee wäre noch, dass die Normalen deiner Meshes in die falsche Richtung zeigen. Was dann nämlich passiert, wird beispielsweise hier gezeigt.

...zur Antwort

Das ist leider nicht so einfach, wie es auf Anhieb klingt.

Eine Kopie eines Prefab kannst du mit einer Überladung (=Variante) von Object.Instantiate an einer bestimmten Position instantiieren, die Schwierigkeit ist aber, an diese Position zu kommen.

Ein Ansatz wäre es, einen sogenannten Raycast mit der gewünschten Richtung zu verwenden und dann über eine Eigenschaft "points" des resultierenden RaycastHit die Position zu bestimmen. Ein Beispiel dafür findest du unter Rays from the Camera.

Da es bei dir aber um die Maus geht und nicht die Kamera, suche mal nach "getting mouse coordinates on a plane", dort findest du, wie man das mit beispielsweise einem Crosshair macht. Ein Beispiel ist How to convert the mouse position to world space in Unity (2D + 3D).

...zur Antwort

Hier einige meiner Favoriten, bei denen man locker den Soundtrack rauf und runter hören kann, ohne den Anime zu schauen:

  • Death Parade
  • Zankyou no Terror
  • Berserk
  • Kizumonogatari
  • Puella Magi Madoka Magica
  • Umineko no Nako Koro ni
  • My Hero Academia
  • Attack on Titan
  • Devilman Crybaby
  • Cowboy Bebop

Als Komponisten kann ich dir insbesondere empfehlen:

  • Yuki Kajiura
  • Susumu Hirasawa
  • Kenji Kawai
...zur Antwort