superkerni Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Hallo, ich arbeite beim Skripting mit Visual Studio 2019. Was mache ich beim Scripting falsch, wenn die void-Namen blass Ocker sind und nicht mehr kräftig gelb. Beim Cursor-over kommt die Meldung "Der private Member '..die void Methode ... ' wird nicht verwendet". Das betrifft alle void`s. in der Klasse. Danke Wolfgang Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chrische5 Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 hallo kannst du mal den entsprechenden abschnitt zeigen? Christoph Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
superkerni Geschrieben 13. Januar 2021 Autor Melden Share Geschrieben 13. Januar 2021 Hier ein Ausschnitt: Start und Update werden nicht verwendet ? using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ProjectileMoveScript : MonoBehaviour { public bool rotate = false; public float rotateAmount = 45; public bool bounce = false; public float bounceForce = 10; public float speed; [Tooltip("From 0% to 100%")] public float accuracy; public float fireRate; public Transform spawnPoint; public GameObject muzzlePrefab; public GameObject hitPrefab; public List<GameObject> trails; private Vector3 startPos; private float speedRandomness; private Vector3 offset; private bool collided; public Rigidbody2D rb; private RotateToMouseScript rotateToMouse; private GameObject target; //public LevelManager levelOrganisator; public GameObject vfxPrefab; private int leben; void Start () { startPos = transform.position; rb = GetComponent <Rigidbody2D> (); // Muzzle ---- Mündungsfeuer mit if (muzzlePrefab != null) { var muzzleVFX = Instantiate (muzzlePrefab, transform.position, Quaternion.identity); muzzleVFX.transform.forward = gameObject.transform.forward + offset; var ps = muzzleVFX.GetComponent<ParticleSystem>(); if (ps != null) { Destroy(muzzleVFX, ps.main.duration); } else { var psChild = muzzleVFX.transform.GetChild(0).GetComponent<ParticleSystem>(); Destroy(muzzleVFX, psChild.main.duration); } } } void Update () { GameObject vfxBullet = (GameObject) Instantiate(vfxPrefab, spawnPoint.position, Quaternion.identity); if (speed != 0 ) { // Debug.Log("Fix: "); vfxBullet.GetComponent<Rigidbody2D>().AddForce(Vector3.left * speed); } } ...... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Dann stimmt was mit deinem Unity-Plugin in Visual Studio nicht. Ich empfehle Deinstallation und Neuinstallation von VS über Unity Hub. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
superkerni Geschrieben 13. Januar 2021 Autor Melden Share Geschrieben 13. Januar 2021 vor einer Stunde schrieb Sascha: Dann stimmt was mit deinem Unity-Plugin in Visual Studio nicht. Ich empfehle Deinstallation und Neuinstallation von VS über Unity Hub. Hat leider auch nichts geholfen. Habe "Start" und "Update" zu public gemacht. Dann war alles OK ! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Solltest du aber auf keinen Fall tun. Die Dinger sind nicht ohne Grund per default private. Wenn andere Klassen die einfach so aufrufen können, kann potentiell grober Unfug passieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jog Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Hallo, Das hat mit der Code Optimierung zu tun. Wenn du eine Variable deklarierst z.b. „ int wert =10; “ wird automatisch der (Zugriffsmodifizierer) private angenommen und ist somit nur in der eigenen Klasse ansprechbar. Wird nun in der eigenen Klasse nicht auf die Variable( wert) zugegriffen z.b. „ wert =10; „ wird davon ausgegangen, dass die Variable nicht benutzt und somit unnötiger Speicherplatz verbraucht wird, und somit erhältst du einen Hinweis das keine Verwendung stattfindet, das gilt auch für Methoden wenn kein Aufruf in der eigenen Klasse erfolgt. Verwendest du aber den (Zugriffsmodifizierer) public erhältst du diesen Hinweis nicht, da der Zugriff auch von einer anderen Klasse möglich wäre. Da public im Inspector angezeigt wird, kannst du auch z.b. internal verwenden. internal wird nicht im Inspector angezeigt und gilt Innerhalb des Aktuellen Projekts Ups wie immer zu Spät... Gruß Jog Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Man muss halt dazu sagen, dass Unity viel mit Reflection... äh... Magie macht. Zum Beispiel private Methoden aufrufen oder Werte in private Felder schreiben. Und damit kommen IDEs und der Compiler nicht von Haus aus klar, weil sie da nicht nachvollziehen können. Das ist wie der TÜV, der dein Auto nicht zulässt, weil die Tür nicht aufgeht... aber du steigst immer durch die Kofferraumklappe ein, kein Problem! Das Unity-Plugin, das Unity mit VS mitinstallieren sollte, hilft VS beim "Verständnis" und sorgt dafür, dass VS nichts mehr sagt, wenn es so etwas (bei MonoBehaviour-Events wie Start und Update!) sieht. Vermutlich über Bestechung oder so. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
superkerni Geschrieben 13. Januar 2021 Autor Melden Share Geschrieben 13. Januar 2021 Danke, habe ich wieder private gestellt. Die Routinen werden trotzdem durchlaufen. Bestechen ist bei mir nicht, trinke meinen Grappa selbt und Bill trinkt Bourbon ! Zu Jog: Bei den Variablen ist das klar, aber bei den void`s , ogbwohl z.B. Update durchlaufen wird ??? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Das Programm liegt ja auch im Speicher. Ist aber echt nicht viel. Du kriegst ja auch keine Fehlermeldung, sondern eine Warnung. Die besagen immer, dass etwas zwar kompilieren und laufen wird, aber vermutlich nicht so funktionieren wird, wie du es vorhattest. Wenn du z.B. eine Variable oder eine Methode nirgendwo nutzt, dann gibt es eben eine Warnung, weil man davon ausgeht, dass du keinen Code schreibst, um ihn dann nicht zu benutzen. Es wird stattdessen davon ausgegangen, dass du es einfach nur vergessen hast, die Methode an der richtigen Stelle auch aufzurufen. Das ist der Charakter bei allen Warnungen, weswegen man sie niemals ignorieren sollte. Umso schlechter ist es, wenn etwas nicht schief geht und du eine False-positive-Warnung kriegst - wie hier. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jog Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Hallo, @superkerni vor einer Stunde schrieb superkerni: Zu Jog: Bei den Variablen ist das klar, aber bei den void`s , ogbwohl z.B. Update durchlaufen wird ??? Bin auch nur Hobby Programmierer und kenne mich auch nicht so gut mit allem aus, ich glaube zu wissen dass, Die Update Methode z.b. gehört zu den von MonoBehaviour bereitgestellten Methoden, die durch bestimmte Ereignisse ausgelöst oder in regelmäßigen Abständen von Unity aufgerufen werden. Hierbei durchläuft Unity alle GameObjects und deren Skript-Instanzen und führt dort die entsprechenden Methoden aus. Um diese void`s kümmert sich also Unity selbst. Bei selbst geschriebenen void`s muss man sich selbst darum kümmern. Gruß Jog Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
chrische5 Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 Hallo Das void bedeutet einfach nur, dass es sich um eine Methode ohne Rückgabewert handelt. Nix verrücktes. Christoph Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
superkerni Geschrieben 13. Januar 2021 Autor Melden Share Geschrieben 13. Januar 2021 Danke Leute, im wesentlichen ist das alles schon klar. In meiem vergangenen Berufsleben war ich u.a. 35 Jahre auch Programmierer (Pascal, Access und .NET). Mit C# habe ich erst jetzt angefangen. Spiele unterscheiden sich doch sehr von einem Warenwirtschaftssystem. Es ist sehr spannend das Parallelverhalten von verschiedenen Charakteren und deren Reaktionen programmtechnisch im Griff zu behalten. Somit für mich noch ein Neuland !! Gruß Wolfgang Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
gombolo Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 vor 3 Stunden schrieb superkerni: ...Somit für mich noch ein Neuland !! Naja, alle Programme....ob Spiele oder Warenwirtschaftssysteme machen nichts anderes als Daten zu verwalten. Das Eine stellt das Ergebnis als Zahlen dar und das Andere als bunte, leuchtende Objekte Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
superkerni Geschrieben 13. Januar 2021 Autor Melden Share Geschrieben 13. Januar 2021 vor 1 Stunde schrieb gombolo: Naja, alle Programme....ob Spiele oder Warenwirtschaftssysteme machen nichts anderes als Daten zu verwalten. Das Eine stellt das Ergebnis als Zahlen dar und das Andere als bunte, leuchtende Objekte Sorry, so allgemein gesehen ist das natürlich richtig. Parallele Prozesse im Warenwirtschaftssystem unterscheiden sich aber gewaltig von denen in Spielen ! --------------------------------------- Ich habe die letzte Datensicherung zurückgespielt und siehe da, alles wieder in Ordnung !! Wer weiß womit ich mein Projekt geschädigt habe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.