superkerni 1 Posted January 13 Report Share Posted January 13 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 Quote Link to post Share on other sites
chrische5 25 Posted January 13 Report Share Posted January 13 hallo kannst du mal den entsprechenden abschnitt zeigen? Christoph Quote Link to post Share on other sites
superkerni 1 Posted January 13 Author Report Share Posted January 13 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); } } ...... Quote Link to post Share on other sites
Sascha 2,509 Posted January 13 Report Share Posted January 13 Dann stimmt was mit deinem Unity-Plugin in Visual Studio nicht. Ich empfehle Deinstallation und Neuinstallation von VS über Unity Hub. Quote Link to post Share on other sites
superkerni 1 Posted January 13 Author Report Share Posted January 13 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 ! Quote Link to post Share on other sites
Sascha 2,509 Posted January 13 Report Share Posted January 13 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. Quote Link to post Share on other sites
Jog 28 Posted January 13 Report Share Posted January 13 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 Quote Link to post Share on other sites
Sascha 2,509 Posted January 13 Report Share Posted January 13 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. Quote Link to post Share on other sites
superkerni 1 Posted January 13 Author Report Share Posted January 13 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 ??? Quote Link to post Share on other sites
Sascha 2,509 Posted January 13 Report Share Posted January 13 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. Quote Link to post Share on other sites
Jog 28 Posted January 13 Report Share Posted January 13 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 Quote Link to post Share on other sites
chrische5 25 Posted January 13 Report Share Posted January 13 Hallo Das void bedeutet einfach nur, dass es sich um eine Methode ohne Rückgabewert handelt. Nix verrücktes. Christoph Quote Link to post Share on other sites
superkerni 1 Posted January 13 Author Report Share Posted January 13 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 Quote Link to post Share on other sites
gombolo 5 Posted January 13 Report Share Posted January 13 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 Quote Link to post Share on other sites
superkerni 1 Posted January 13 Author Report Share Posted January 13 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. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.