Hi!

Einfach starten und ausprobieren.

Programmieren lernt man sein Leben lang, da es immer wieder neue Sachen gibt.

Es spielt daher keine Rolle, wie lange andere gebraucht haben, Du brauchst dafür so lange, wie du eben brauchst. Wichtig ist, dass Du verstehst, was du tust und somit dann selbstständig Probleme lösen kannst.

Von den Inhalten bietet die Learning Plattform von Unity natürlich viel. Es gibt auch einige gute YouTuber, manchmal benötigt man schon etwas Vorerfahrung.

Das Wichtigste ist: einfach starten und schauen, es wird ein langer Prozess sein. 🙃

...zur Antwort

Erstell erstmal ein Spiel, dann siehst Du weiter. ;-)

Ein richtig realistisches Spiel ist verdammt schwer und dauert Jahre. Wer weiß, wie sich die Lizenzen der einzelnen Engines bis dahin weiterentwickelt haben.

Zumal: wenn du damit Geld machst, sind die Lizenzkosten für eine Engine sowieso Peanuts.

Zur Vollständigkeit der anderen Antwort mit Unity und Unreal Engine möchte ich noch Godot in den Raum werfen. Die ist komplett kostenfrei und hat keinerlei Lizenzgebühren.

...zur Antwort

Hi,

Du selbst wahrscheinlich nein, da die meisten Plattformen, wenn es um Geld geht, rechtliche Dokumente unterzeichnet haben wollen und mit 13 bist du noch nicht geschäftsfähig.

Was natürlich geht ist, dass Du das Spiel entwickelst und alle relevanten Accounts und geschäftlichen Dinge von Deinen Eltern gemacht werden.

...zur Antwort

Ach je, immer wieder die gleiche Leier. :)

IronSource hat mit Malware nichts am Hut. Deren Installer wurde damals verwendet, um Malware zu verbreiten. Das ist wie zu sagen, dass du nicht in Programmiersprache X arbeiten willst, weil die für die Entwicklung von Viren genutzt wird. Ist aber Quatsch. Es kommt ja immer auf die Verwendung an.

Gleiches gilt für die Engines, da sind alle gängigen frei von Malware und Co.

Nutz daher die, die Dir Spaß macht - am Ende können alle das gleiche.

...zur Antwort

Dein Fehler kommt unten bei GetComponent. Dort hast du Rigidbody mit kleinen R geschrieben. Du solltest bei Fehlern auch immer schauen, in welcher Zeile er auftritt.

...zur Antwort

Hi,

in deinen Screenshots ist zu erkennen, dass Du Sorting Layer nutzt.

Stelle bitte sicher im Menu unter Edit -> Project Settings -> Tags & Layers -> Sorting Layers dass dort der Layer für den Background über dem Layer für Foreground ist. Damit wird er zuerst gerendert und ist somit hinter allen Sachen.

...zur Antwort

Eine kleine Einführung zum erwähnten Git in den anderen antworten speziell in Bezug auf die von GitHub entwickelte App findest Du hier:

https://youtu.be/Vo22tnUs50o

Kannst du auch mit GitLab und anderen git-basierten Providern benutzen.

...zur Antwort

Manchmal fragt man sich über das Verständnis der anderen antwortenden hier 🙄

Prinzipiell solltest Du den alten Text nicht mehr verwenden, wenn du das aber dennoch möchtest, dann siehst du unten in deinem Screenshot die Option „Legacy“. Da drauf und dort ist der alte Unity Text.

...zur Antwort

Hi!

schau mal hier: :)

https://youtu.be/c84bf1CU1vc

...zur Antwort

Moin,

Du hast simulated deaktiviert. Ergo wird der Körper nicht mehr simuliert, keine Gravitation oder ähnlich drauf angewendet. Ergo bleibt er in der Luft stehen.

D.h. Entweder wieder einschalten oder selbst simulieren. https://docs.unity3d.com/ScriptReference/Rigidbody2D-simulated.html

...zur Antwort
Sound abspielen Unity?

Hallo,

also ich versuche die ganze Zeit eine Audio Source spielen zu lassen allerdings funktioniert das nicht so ganz... Ich habe eine Münze im Game und wenn diese eingesammelt wird soll ein Sound gespielt werden. Ich habe der Münze also eine Komponente Audio Source hinzugefügt und eine Audio Datei eingefügt. Jetzt sollte ich doch einfach auf diese Komponente zugreifen können und diese abspielen können oder nicht?(Mute ist auch aus)

Einmal der Code:

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






public class Interaction : MonoBehaviour
{
    public int coinCounter;
    public bool collisionFlag;
    


    // Start is called before the first frame update
    void Start()
    {
        coinCounter = 0;
        collisionFlag = false;
        
    }


    // Update is called once per frame
    void Update()
    {
       
    }


    public void OnCheckCollection()
    {
        string text = "Die Anzahl ist:" + coinCounter.ToString();
        Debug.Log(text);
    }


    public void OnControllerColliderHit(ControllerColliderHit hit)
    {
        GameObject coinAsGameObject = hit.gameObject;
        Collectable coinAsScript = hit.gameObject.GetComponent<Collectable>();
        AudioSource ding = hit.gameObject.GetComponent<AudioSource>();
  
        if (coinAsScript != null & collisionFlag == false)
        {
            collisionFlag = true;
            
            ding.Play();


            coinCounter = coinCounter + 1;
            Destroy(coinAsGameObject);
            
            
        } else if(coinAsScript != null & collisionFlag == true)
        {
            collisionFlag = false;
        }


  
    }

Vielen dank schonmal.)

...zum Beitrag

Moin!

Wenn ich das richtig sehe, liegt deine AudioSource auf dem Coin. Wenn du das Coin sammelst zerstörst du auch das GameObject und damit auch die AudioSource. Ergo wird’s nicht mehr abgespielt, da es schlicht nicht mehr existiert.

Mehrere Möglichkeiten:

  1. Du deaktivierst nur den Renderer und Collider und lässt das GameObject so lange leben, bis der Sound angespielt wurde. Erst dann löscht Du das GaneObject. Ein zeitverzögertes Löschen kann Destroy mit einem zweiten Parameter (https://docs.unity3d.com/ScriptReference/Object.Destroy.html). An die Länge der Sounddatei kommst du so: https://docs.unity3d.com/ScriptReference/AudioClip-length.html
  2. Du hinterlegst auf dem Coin nur welcher Clip abgespielt werden soll und machst das eigentliche Abspielen auf einem anderen GameObject, was nicht zerstört wird.
  3. Ausbaustufe von 2 wäre ein kleines AudioCueSystem. Da verweise ich dich mal auf ein kleines Projekt, wo das implementiert ist: https://github.com/BoundfoxStudios/community-project/tree/develop/CommunityProject/Assets/_Game/Scripts/Runtime/Systems/AudioSystem und hier etwas Doku dazu: https://boundfoxstudios.github.io/community-project/docs/docs-technical/systems/audiocue-system/
...zur Antwort

Also mal ehrlich. Es steht exakt drin. Du musst schon die Fehlermeldung auch lesen. Im Zweifel hilft deepl zum übersetzen

Unity Collab gibt’s nicht mehr. PlasticSCM ist die Zukunft.

...zur Antwort
Könnt ihr mir helfen folgenden Unity C# Script zu lösen?

Ich habe vor kurzem die Idee gehabt eine Art Tower Defense Spiel (Erstmals nur für mich zur Übung) in Unity zu programmieren.

Zum einen werden mir folgende Fehler angezeigt:

3× Error CS0246: The type or namespace name 'GizmoType', 'DrawGizmoAttribute' und 'DrawGizmo' could not be found (are you missing a using directive or an assembly reference?)

3× Error CS0103: the name 'GizmoType does not exist in the current context.

Hier erstmal der Code:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class WaypointGizmos : MonoBehaviour

{

private static readonly float Width = 0.5f;

private static readonly float HalfWidth = Width/ 2;

[DrawGizmo(GizmoType.NonSelected I GizmoType.Selected I GizmoType.Pickable, typeof(Waypoint))]

public static void DrawSceneGizmos(Waypoint waypoint, GizmoType gizmoType)

{

DrawStartPoint(waypoint);

DrawOrientation(waypoint);

}

private static void DrawStartPoint(Waypoint waypoint)

{

if (waypoint.PreviousWaypoint)

{

return;

}

Gizmos.color = Color.yellow;

Gizmos.DrawSphere(waypoint.transform.position, HalfWidth);

}

private static void DrawOrientation(Waypoint waypoint)

{

// Code zur Zeichnung der Orientierung

}

}

Zusätzliche Informationen: ich wollte ein Wegpunktsystem programmieren, habe folgendes Tutorial angeschaut: https://youtu.be/33ls0i7FX4o

Also entweder bin ich blind weil ich habe eigentlich alles so gemacht. Ich nutze Visual Studio von Microsoft zum Coden. Vielleicht da ein Problem was ich mir nicht vorstellen kann. Habe den Code von einer KI ( Open AI ChatGPT) überprüfen lassen die hat lediglich folgendes hinzugefügt:

// Code zur Zeichnung der Orientierung

Ich hoffe ihr könnt mir helfen danke im voraus.

Gruß Manuel

...zum Beitrag

Hi Manuel,

Dir fehlt noch ein

using UnityEditor;

ganz zu Beginn der Datei. :)

...zur Antwort

Hi,

irgendeine Art von Tool benötigst Du, damit du gemeinsam mit jemandem entwickeln kannst.

Sei es Git, Perforce, PlasticSCM oder andere Tools. Das spielt keine Rolle.

Ohne Tools bleibt nur das ständige hin und her kopieren vom Unity übrig, das wird aber nicht sinnvoll funktionieren.

...zur Antwort

Hi,

in deinem ersten Screenshot sieht man den SpriteRenderer, mit einem Sorting Layer default und Sort Order von 0.

Es kann sein, dass das Handy in einer anderen Reihenfolge sortiert und man es daher nicht mehr mehr sieht.

Am besten wäre es einen eigenen Layer für den Hintergrund zu machen, sodass dieser automatisch immer ganz hinten ist und alles andere „oben drauf“ gerendert wird.

Mehr Info zu Layern findest du hier: https://docs.unity3d.com/Manual/class-SpriteRenderer.html -> Sorting Layer

...zur Antwort

Hi,

Du musst es für die Scene View einschalten, siehe hier https://docs.unity3d.com/Manual/ViewModes.html etwas weiter unten bei „Effects Button and Menu“

...zur Antwort
Unity namspace "SerializedObject" could not be found?

Ich habe mich jetzt schon einige Stunden damit abgemüht herauszufinden, warum ich diese Fehlermeldung bekomme, wenn ich versuche, mein Programm zu Exportieren. Wenn jemand vielleicht weiß, was der Fehler in dieser Klasse ist, schreib es mir bitte

Hier der wichtige Teil des Codes:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq.Expressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;


public class Ore : MonoBehaviour
{
    public double value;
    public double exp;
    public int upgradeLevel;
    public double upgradeMultiplyer;
    public double marketMultiplier;
    SerializedObject halo;
    double currenttime;
    double currenttime2;
    public bool isDestroyed;
    public bool moveableByBelt;


    // Start is called before the first frame update
    void Start()
    {
        moveableByBelt = true;
        upgradeLevel = 0;
        upgradeMultiplyer = 0;
        halo = new SerializedObject(this.gameObject.GetComponent("Halo"));
    }
    // Update is called once per frame
    void Update()
    {
        upgradeMultiplyer = 1 + 0.5 * upgradeLevel;


        if (moveableByBelt == true)
        {
            currenttime2 = Time.time;
        }
        if (currenttime2 + 3 < Time.time)
        {
            Destroy(this, 10f);
            gameObject.SetActive(false);
        }
        try
        {
            {
                if (upgradeLevel == 1)
                    halo.FindProperty("m_Color").colorValue = new Color(0, 100, 0);
                halo.FindProperty("m_Size").floatValue = 2f;
                halo.FindProperty("m_Enabled").boolValue = true;
            }
            if (upgradeLevel == 2)
            {
                halo.FindProperty("m_Color").colorValue = new Color(0, 0, 200);
                halo.FindProperty("m_Size").floatValue = 2.1f;
                halo.FindProperty("m_Enabled").boolValue = true;
            }
            if (upgradeLevel == 3)
            {
                halo.FindProperty("m_Color").colorValue = new Color(140, 0, 200);
                halo.FindProperty("m_Size").floatValue = 2.2f;
                halo.FindProperty("m_Enabled").boolValue = true;
            }
            if (upgradeLevel > 0)
            {
                halo.ApplyModifiedProperties();
            }
        }
        catch { }
    }
}
...zum Beitrag

Hi!

Unity unterscheidet, ob ein Spiel im Editor läuft oder exportiert läuft.

Nur innerhalb vom Editor hast Du Zugriff auf den UnityEditor Namespace (siehe „using UnityEditor“). Sobald Du exportierst, hast Du darauf keinen Zugriff mehr (dein Spiel läuft ja nicht im Editor, sondern alleine).

Wenn ich mir dein Script oben anschaue, dann nutzt Du in einem MonoBehaviour Dinge aus UnityEditor. Ich nehme an, dass das ein Skript ist, was eines Deiner GameObjects nutzt.

Und da fängt das Problem an: Es ist ein Skript, was nachher exportiert werden soll, aber beim Export hast Du eben kein Zugriff mehr auf den UnityEditor-Namespace und damit auch kein Zugriff mehr auf SerializedObject.

Du hast jetzt drei Möglichkeiten, die miteinander kombinierbar sind:

  1. Falls Dein Script wirklich im Spiel (und nicht nur im Editor) gebraucht wird, musst Du es umbauen, sodass es nichts mehr aus dem UnityEditor-Namespace nutzt.
  2. Manchmal fügt man einem Script ein paar Debug-Dinge hinzu, die man nur im Editor nutzt, aber für das Spiel nicht relevant ist, dann kannst Du Compiler-Direktiven nutzen, um Teile vom Code beim Export auszuschließen: https://docs.unity3d.com/Manual/PlatformDependentCompilation.html
  3. Du kannst einen Editor-Ordner (https://docs.unity3d.com/Manual/SpecialFolders.html) oder ein Editor-Assembly (https://youtu.be/meyPJzj5DEs) nutzen. Beide Dinge werden automatisch beim Export nicht mehr im Spiel inkludiert. Hier hast du natürlich auch Zugriff auf den UnityEditor-Namespace

Solange Du im Unity-Editor bist und dort auch in den PlayMode wechselst, funktionieren Deine Scripts, da du ja innerhalb vom Editor bist und somit auch Zugriff auf den Namespace hast. Dein Fehler kommt daher leider nur beim Export.

...zur Antwort

Ganz uneigennützig 😜

https://github.com/BoundfoxStudios/community-project

...zur Antwort

Hi,

mit Namen von Children solltest du nicht arbeiten, Stichwort: Magic Strings.

Viel besser ist es:

  1. Entweder, falls das Child eine bestimmte Komponente hat, die man braucht, mit GetComponentInChildren zu arbeiten oder
  2. Noch viel besser ist, da dir die Hierarchie bekannt ist, ein serialisertes Feld für ein GameObject oder eine konkrete Komponente anzulegen und es dann im Editor zu verknüpfen.

Falls Du Children dynamisch erzeugst, dann hast Du im Code ja sowieso durch Instantiate eine Referenz auf das erzeugte Kind und kannst direkt damit arbeiten.

...zur Antwort