Wpis z mikrobloga

Mirki z #csharp #unity3d pomocy!

Bawię się w unity3d i mam problem.

Mam ja sobie jakas tam klasę, która ma zmienną:


public class CubeRotator : MonoBehaviour {
    
private bool isRotating = false;
``````
    
void Update () {
        
if(...) {
            StartCoroutine(RotateCube(isRotating));
        }
    }
``````
    IEnumerator RotateCube(
bool outIsRotating) {
        // tu sie cos dzieje
``````
        // robie pauze na 0.003s
        
yield return new WaitForSeconds(0.0033333f);
``````
        // tu tez sie cos dzieje
(...)
 
        // a tu jak skoncze to chce zmienic wartosc isRotating w klasie
        outIsRotating = 
false;       // <- to w ogole nie dziala :(
    }
}

i to co chciałbym osiągnąć to to, że niedość, że mam yielda, który czeka 0.0033333s to nie zmienia wartości isRotating w klasie.

Problem w tym, że nie mogę użyć ani out, ani ref. Gdzieś doczytałem, że można użyć czegoś takiego jak Action ale ja aż tak się nie znam na C# :(

Halp, ktoś poprowadzi, albo podrzuci wymowny kawałek kodu, po którym zrozumiem jak to można zrobić?

Dzięki z góry!
  • 6
// a tu jak skoncze to chce zmienic wartosc isRotating w klasie

outIsRotating = false;       // <- to w ogole nie dziala :(


@nCore: bool to typ wartościowy, a nie referencyjny, więc nie ma to prawa zadziałać w taki sposób. Dlaczego nie możesz użyć ref?
Poza tym, skoro RotateCube jest w tej samej klasie, co isRotating, to dlaczego po prostu nie nadpiszesz isRotating w tej metodzie?
@ZjedliMiRogale: teraz zauważyłem, że napisałem to wszystko w cały świat. Chodzi mi głównie, by po wykonaniu się IEnumeratora zmienić wartość zmiennej w klasie, do której nie mam dostępu i nie mogę jej nawet przekazać jako referencje.

Aktualnie robie implementacje z Action i pewnie będzie zaraz działać. Dam znać.