public class GameData
{
public int level = 15;
}
public class Manager : MonoBehaviour
{
public GameData gamedata = new GameData();
debug.log(gamedata.level);
}
이거랑
public class GameData
{
public int level = 15;
}
public class Manager : MonoBehaviour
{
public GameData gamedata;
debug.log(gamedata.level);
}
이거랑 다른점이 무엇인가요?
new GameData()로 인스턴스를 생성하는것과 그냥 저렇게 변수선언하는것의 차이
둘다 값이 15가 찍힙니다
변수초기화
new를 해줘야 인스턴스가 생성됩니다 아래 코드대로면 gameData 인스턴트가 없어서 null 에러 뜨는 게 맞을텐데 실행이 된다구요? 아래 코드에 int aaa = gamedata.level 코드 추가해보고 정상 실행 되는 지 확인해보세여
public class GameData { public int level = 15; } public class Manager : MonoBehaviour { public GameData gameData; int level = 15; debug.log(gamedata.level); }
코드가 너무 길어서 본글에서는 많이 생략했었는데 댓글코드대로 했던거였고 본글코드대로라면 당연히 null이 뜨는게 맞았네요.
GameData클래스에 level 을 _level로 이름바꾸고 해보니까 null이 뜨네요. 저는 클래스가다르면 변수이름이 같아도 다르게 인식되는줄 알았는데 아닌가봅니다...
클래스가 다르면 변수를 공유할 수 없죠 인스턴스가 다르면 변수 이름이 같아도 다르게 인식되는 게 맞아요 거기서 null이 뜬 건 level 때문에 아니라 gameData의 인스턴스가 생성되지 않아서 그래요 레시피(클래스)만 있고 요리(인스턴스)는 안 만들었는데 요리 가져와! 하면 엥? 무슨 요리? 아직 안 만들었는데?(null) 하는 거죠
public class GameData { public int level = 1; } public class Manager { public GameData gameData1 = new GameData(); public GameData gameData2 = new GameData(); public void Test() { gameData1.level = 10; gameData2.level = 20; Debug.Log(gameData1.level); // 10 출력 Debug.Log(gameData2.level); // 20 출력 } }
글자 수 제한 때문에 제대로 안 쳐졌는데 저거 복사해서 비쥬얼 스튜디오에 넣고 보면 이해 갈거에여
2번은 null아냐? 대체 왜;
null맞습니다 제실수였네요 훠훠
덕분에 하루종일 꽁꽁싸매던 오류 드디어 해결했습니다. 감사합니다 형님들~!!
저도 씹초보지만 두번째거가 실행됐다면 필시 퍼블릭에다가 수동으로 뭔가를 할당하지 않았을까 싶습니다. 그렇지 않다면 null이 나올텐디..
그런거 같습니다. 첫번째 class에 level=15; 두번째 class에 level=15; 이렇게 했는데 이름만 살짝 _level이라고 바꾸니까 null뜨네요. 두번째 class level에 마우스올렸을때 Manager.level 이라고 떠서 첫번째 class랑은 상관없는줄 알았던것이죠
이름을 바꾸면 안대져