C# - Error CS8025 Feature ‘local functions’ is not available in C# 4

0

Nie znam sie zbytnio na tym języku programowania a więc zaczełam sie uczyc. Jednakże już z początku mam ogromne problemy. Ktoś mi powie co jest w tym kodzie nie tak? Wyskakuje mi taki error jak w tytule wątku, a jak w edytorze nie wyskakuje error to za to wyskakuje on w unity co uniemożliwia uruchomienie gry.
Poniżej zamieszczam kod:

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

public class Klikacz : MonoBehaviour {
    public Color NowyKolor;
    public Renderer RendererKuli;

	void Start () {
		
	}

    void Update() {

        private void OnCollisionEnter(Collision collision)
        {
            RendererKuli.material.color = NowyKolor;
        }
    }
}
1

W metodzie Update() stworzyłeś metodę lokalną OnCollisionEnter() a pewnie nie o to Ci chodziło.
Przenieś metodę OnCollisionEnter(Collision collision) poza zakres metody Update() (czyli klamrę niżej).

0

@wielki_bebzon:

void Start () {
	
}


void Update () {
   private void 
    {          
        RendererKuli.material.color = NowyKolor;
    }

}
OnCollisionEnter(Collision collision);
}

Chodzi o cos takiego? Teraz mam 17 errorów...

3

@Adewo: polecam Ci żebyś zrobił jakiś kurs z podstaw C# zanim ruszysz z unity, bo będziesz miał wiele takich problemów.

wielki_bebzon napisał(a):

poza zakres metody Update()

Czyli

void Start () { }
void Update () { }
void OnCollisionEnter(Collision collision) 
{          
    RendererKuli.material.color = NowyKolor;
}
0

@wielki_bebzon: wiem wlasnie sie ucze i przepisalam ten kod z książki slowo w slowo i nie mialam pojecia czemu nie działał

0

@Adewo Upewnij się, jakiej wersji języka uczy ta książka + jaką wersję języka wspiera pobrane przez Ciebie Unity. W C# możesz tworzyć metody w metodach (funkcje w funkcjach), czyli local functions, ale jest to wspierane od C# 7.0 i wygląda trochę inaczej, niż wyżej napisałaś, więc upewnij się, czy na pewno przepisujesz wszystko dobrze. W C# 7+ możesz zrobić to tak :

private void Update()
{
// jakiś kod w metodzie/funkcji Update

void OnCollisionEnter()
{
// jakiś kod w metodzie/funkcji OnCollisionEnter
}

// wywołanie OnCollisionEnter może być tylko wewnątrz Update w tym przypadku
OnCollisionEnter();
}

Ale jako, że OnCollisionEnter to dość powszechna metoda w unity, to na pewno nie powinna być zdefiniowana wewnątrz metody Update, powinno to wyglądać jak wyżej opisał @wielki_bebzon

0

@Akinwoktyzuawzan: ciezko mi cokolwiek z tego zrozumieć ale wiem że jak przepisałam slowo w slowo tak jak jest w ksiazce to na pewno wyświetliło mi error o tym ze powinnam zmienic C#4 na C#7 czy cos takiego. co to dokładniej znaczy?

0

@Adewo: Można wiedzieć co to za książka ? Wydaje się, jakby był w niej błąd, jeśli przepisałaś kropka w kropkę. Nie rozumiem trochę, jak to możliwe, że w książce nie uczą czym jest klasa i metoda lub funkcja, jak się definiuje funkcje i już przedstawiają jak zaimplementować zachowanie po zetknięciu się ze sobą 2 lub więcej obiektów (do tego służy OnCollisionEnter).

Polecam zacząć od podstaw C#, jak napisał @wielki_bebzon.

Jeśli chodzi o błąd odnośnie zmiany c#4 na C#7, wystarczy, że pobierzesz jakieś nowe unity (wersja z roku 2018+ lub nowsza) i wersja C#7 będzie wspierana automatycznie.

0

@Akinwoktyzuawzan: ksiazka sie nazywa unity i c# podstawy programowania gier.

1 użytkowników online, w tym zalogowanych: 0, gości: 1