상세 컨텐츠

본문 제목

[Unity] 유니티 SerializeField 인스펙터 오브젝트 연동 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 11. 18. 01:59

본문

반응형

 

 

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://happycodebox.blogspot.com/2015/12/public-serializefield.html

Public 필드 선언과 [SerializeField] 선언의 차이

유니티 스크립트에서 public 으로 변수를 선언한 경우 자동적으로 인스펙터창에서 공개 된다.
또한 변수에 [SerializeField] 속성을 지정했을 때에도 마찬가지로 같은 결과를 볼 수 있다.
둘 중에 어떤

일반적으로, 항상 변수를 생성할 때 가능한 최소의 접근 레벨을 갖도록( i.e.private ) 해야 한다.
이에 대한 많은 근거들이 있지만, 그 중에 하나는 여러분이 큰 팀에서 협업을 하거나 또는 혼자서 작업할지라도,
실수로 다른 클래스에서 작성된 코드로 인해 변경되지 않아야 하는 변수들이 변경되기 쉽기 때문이다.
여러분이 선언한 대부분의 클래스 내에서 필요한 변수들은 private 여야 한다.

public 변수 선언으로 유니티가 자동적으로 인스펙터창에 띄워주는 편리한 면이 있지만, 그보다
private 선언 후 [SerializeField] 속성을 지정해 주는 것이 좋다. 어떻게 보면 private 선언의 목적을 깨는 것이지만,
이것은 그나마 다른 스크립트의 오류를 찾는 것보다 훨씬 수월할 것이다.

유니티 공식 문서


유니티 공식 문서를 보면 [SerializeField] 를 거의 사용할 일이 없을 것이라고 나오고, public 변수의 선언을 권장하지만,
다른 여러 프로그래머의 의견은 이것이 나쁜 OOP 습관이라고 주장한다.

한편, 아래는 Unite 2015 Europe 에서
Public 선언이 Private 선언보다 더 나은 성능을 낼 수 있다는 주장을 하고 있는 동영상이다.

유튜브 링크


성능이 중요시 되는 저사양 디바이스에서는 이 점을 고려해서 개발에 참고하면 좋을 듯 하다.

 

 

 

 

=======================

=======================

=======================

 

 

 

반응형

 

728x90

 

 

 

출처: https://blueasa.tistory.com/847

 

우선 그냥 임의로 한 방법이라..

더 좋은 방법이 있을진 나중에 알아보기로 하고..

 

1) 아래와 같은 다차원 배열에 사용 될 클래스를 하나 만든다.

view plaincopy to clipboardprint?

 

using UnityEngine;  
using System.Collections;  
  
[System.Serializable] //<== MonoBehaviour가 아닌 클래스에 대해 Inspector에 나타납니다.  
public class Testitem  
{  
    public int[] variable;    // 하위에 넣어질 배열 변수  
}  

 

※ Serializable 참조 : http://docs.unity3d.com/Documentation/ScriptReference/Serializable.html

※ Inspector 구조체 배열 참조 : http://answers.unity3d.com/questions/175835/array-of-structures-not-viewable-in-inspector.html

※ Inspector 구조체 배열 참조 : http://korea.unity3d.com/board/index.php?db=qnalist&no=780&mari_mode=view%40view&cate=&page=1&listURL=http%3A%2F%2Fkorea.unity3d.com%2Fboard%2F%3Fdb%3Dqnalist%26cate%3D%26stat%3D%26search%3Dtitle%26search_str%3D%25B9%25E8%25BF%25AD%26x%3D0%26y%3D0&search=title&search_str=%B9%E8%BF%AD&temp=

 

2) GameObject에 링크 된 스크립트에 아래와 같이 변수 선언을 한다.

view plaincopy to clipboardprint?

  1. public Testitem[] arrayTestItem;  

 

3) 그리고 해당 GameObject의 Inspector를 보면 'Array Test Item'이 보인다.

 

4) Size에 1이상의 숫자를 넣어보면 Element가 생기면서 화살표(▶)가 있는게 보인다.

 

5) 화살표(▶)를 눌러보면 1)에서 만든 Testitem의 변수인 variable이 추가돼 있는게 보인다.

 

6) 원하는 사이즈 넣고 입력..

 

7) 결과는 아래 스샷과 같음..



출처: https://blueasa.tistory.com/847 [Try & Error]

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

#기타관련링크

- https://ronniej.sfuh.tk/unity3d-serialization/

 

- https://dev-youngil.tistory.com/1

 

- https://nitr0.tistory.com/271

 

- https://ssscool.tistory.com/349

 

- https://adolys.tistory.com/entry/C-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%82%B4-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B0%9D%EC%B2%B4%EB%A5%BC-%EC%9D%B8%EC%8A%A4%ED%8E%99%ED%84%B0%EC%97%90-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0

 

- https://lianes.tistory.com/52

 

- https://wergia.tistory.com/165

 

- https://treeofimaginary.tistory.com/132

 

 

 

=======================

=======================

=======================

 

 

반응형


관련글 더보기

댓글 영역