Unity에서 C #이 다른가요?


18

Unity는 다른 버전의 C #을 사용합니까, 아니면 모두 동일합니까? 일반적인 C #과 다르게 보이지만 거기에는 일정한 C # 요소가 있습니다.


4
어떤 차이점이 있습니까?
Anko

나는 당신이 말하는 변경 사항이 C # 언어가 아닌 프레임 워크 차이점이라고 생각합니다. Unity3d에서는 C # 언어와 함께 .Net 프레임 워크 (Via Mono) 및 Unity 특정 프레임 워크 요소를 사용하고 있습니다.
Mike B

아주 오래된 버전 일뿐입니다. 최신 버전의 C # 및 Mono를 원하고 사전 제작 된 엔진을 스크립팅하는 대신 프로그래밍하려는 경우 monogame.net
Den

예를 들어 Unity에는 Math 클래스 대신 Math 함수에 Mathf 클래스가 있습니다. 다른 차이점이 있으면주의를 기울이지 않았지만 그 점이 눈에 띄었습니다.
Alex

@Alex System.Math 는 여전히 사용 가능하며 실제로 UnityEngine.Mathf 보다 빠릅니다 . 따라서 Unity 버전을 사용하는 유일한 이유는 성능 저하로 많은 (float) 캐스트를 피하기 위해서입니다.
FlintZA

답변:


9

다른 답변에서 언급했듯이 Unity 4.x는 Mono 2.6 기반 의 수정 된 버전의 Mono를 사용합니다.

Mono 2.6 관련 호환성 목록을 추적하지는 못했지만 대부분 .Net 2.0 과 호환됩니다.

일반적인 C #과 다르게 보이지만 거기에는 일정한 C # 요소가 있습니다.

귀하의 질문에 대한 의견 중 하나에서 언급했듯이 이는 언어 자체가 아닌 Unity의 특정 스크립팅 API 때문일 수 있습니다.

예를 들어, 일반적인 Unity 프로젝트의 많은 코드가 MonoBehavior라는 클래스의 하위 클래스에 포함되어 있습니다. Unity 에디터 환경에서 게임 오브젝트에 드롭되는 컴포넌트입니다. 이 아키텍처는 여러 가지 방법으로 일반적인 C # 코드와 다르게 보이는 C # 코드로 이어집니다.

  • Unity 4가 출시 될 때까지 이러한 오브젝트는 네임 스페이스에 포함될 수 없었으므로 항상 글로벌 네임 스페이스에 있습니다.
  • 공개 필드를 만들거나 SerializeField 속성을 사용하여 필드를 편집기 환경에 노출합니다. 그러나이 필드를 사용하는 사람은 거의 없습니다.
  • 유니티의 프라이버시와 케이스 컨벤션은 마이크로 소프트를 따르지 않으므로 "전통적인"C # 개발자에게는 이상하게 보일 수 있습니다.
  • 시작 및 업데이트와 같은 이러한 구성 요소에서 일반적으로 예상되는대로 재정의되지는 않지만 대신 리플렉션을 통해 액세스되는 여러 가지 특수 방법을 사용합니다.

실제로 Unity의 현재 C # 버전에서 놓친 가장 큰 C # 언어 기능은 비동기 및 관련 키워드 및 기능에 대한 지원입니다 . Unity의 비슷한 개념은 코 루틴 입니다. 이것들은 메인 스레드에서 실행되므로 진정한 비동기는 아니지만 오래 실행되는 코드가 여러 프레임에서 분리되도록합니다. 하위 레벨 멀티 스레딩은 여전히 ​​지원됩니다.


2
명확히하기 위해 asyncC #에서는 멀티 스레드와 마찬가지로 비동기가 아닙니다. 메인 스레드에서도 실행됩니다. 사용 관점에서 코 루틴과 비동기의 가장 큰 차이점은 코드가 실행되는 시간입니다.
rhughes

감사. 예, async! = 멀티 스레드 방식이지만 비동기식을 사용하여 멀티 스레드 작업을 숨기거나 상호 작용하는 것이 코 루틴과 동일하게 수행하는 것보다 훨씬 일반적입니다. 나는 매우 유사한 수준의 유연성을 얻는 스레드 풀에서 델리게이트 작업을 시작하는 래퍼 코 루틴을 작성했지만 여전히 "적절한"비동기 지원이 마음에 들지 않습니다. 물론 괜찮은 현대식 GC가 더 나을 것입니다.)
FlintZA

21

Unity 4 C # 언어를 포함하여 .NET 프레임 워크의 전체 구현 인 Mono 2.6을 사용 합니다.

어떻게 다른지 잘 모르겠지만 Unity는 여러 언어를 지원하며 모든 언어가 동일한 Mono 런타임에서 작동한다는 점을 명심하십시오. C #과 UnityScript를 혼동 할 수 있습니까?


10
또한 Mono 2.6은 언어 기능면에서 C # 3.0과 같습니다. Mono 2.6.1은 C # 4.0 기능을 추가하기 시작했습니다.
Cooper

다음은 v4.1.2부터 Unity의 모노 호환성에 대한 개요입니다.
Kelly Thomas

: 그것은 단지 작은하지만 주요 버전 증가하지 지연 mono-project.com/Release_Notes_Mono_3.4

3

Unity는 일반 C #을 사용합니다.

그런 다음 Unity에서 C #을 작성할 때 많은 라이브러리를 사용하지만, 아는 한 C #에서 가능한 모든 것은 아래 나열된 차이점을 제외하고 Unity에서 가능합니다.

  • Windows Forms 및 ASP와 관련된 .Net의보다 구체적인 영역은 Unity를 통해 제한되지 않습니다.

  • 편집 및 컴파일 타임 오류에 Visual Studio를 사용할 수 있지만 Unity IDE에서 빌드하고 실행해야합니다.

  • Unity는 .Net의 오픈 소스 구현 인 Mono를 사용하므로 약간의 차이가 있습니다.


두 번째 글 머리 기호를 확장하려면 UnityVS 를 사용하여 Visual Studio 내에서 디버깅 할 수도 있습니다 . Microsoft는 최근 개발자를 인수하여 가까운 시일 내에 플러그인을 무료로 출시 할 예정입니다.
mrohlf

죄송하지만 일반 C # 근처에는 없습니다.
Alper

0

Unity에서 사용하는 C # 버전이 "일반"C #과 다른지 여부에 대한 질문은 다른 게시물에 의해 답변되었습니다. 명시 적으로 유니티의 특정 (높은 비주얼 스튜디오 2010, 즉 C # 4.0) 내가 직장에서 C # I 사용을 비교할 때 내가 발견하는 유일한 작은 차이를 공유하는 등 일반 버전과 다를 수 있습니다 요소와 C #을 요구하고 있기 때문에 어떤 함수 정의에서 매개 변수에 기본값을 사용할 수 없다는 것입니다. 최신 버전의 C #을 사용하려면 프로젝트를보다 신중하게 설정해야합니다. 자세한 설명 은 링크를 참조하십시오 .

편집 : 나는 이것이 많은 사람들에게 오해라는 것을 알고 있기 때문에이 대답을 남깁니다.


이 기능은 버전 4.0에서 C #에만 추가되었으며 이전에는 없었으므로 "C #"과 "차이"라고 할 수는 없습니다.
또는 매퍼

1
C # 버전 4는 2010 년에 출시되었습니다. 많은 사람들이이 프로그램을 사용하고 있고 Unity에서 프로그래밍 할 때의 부재 감을 느낍니다.
Nessuno

기본값을 사용할 수 없습니까? 나는 확신하고있다.
NPSF3000

글쎄, 시도하고 기본값을 사용할 수 없다는 메시지가 컴파일되지 않습니다. 특별한 버전의 Unity를 사용하고 있습니까? 프로 버전처럼?
Nessuno

1
기본값을 절대적으로 사용할 수 있으며 pro 또는 not-pro와는 아무런 관련이 없습니다. Unity와 MonoDevelop는 이상한 관계입니다. MonoDevelop에서 자동 생성 된 프로젝트는 종종 기본값을 지원하지 않는 이전 버전의 C #으로 설정됩니다. 그러나 프로젝트에서 해당 설정을 변경하면 제대로 작동합니다. MonoDevelop에서 컴파일을 무시하고 Unity로 돌아 가면 Unity가 기본 파라미터에 대해 불평하지 않습니다.
MrCranky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.