Unity2018에서 직렬 통신할 수 없는 문제

4504 단어 .NETFrameworkC#Unity

소개



Arduino를 Unity와 연결하여 여러가지로 하고, LTS판이 나온 것을 계기로 Unity2018에 환경을 이행시키려고 했는데 에러가 발생했기 때문에 메모 때입니다.

2019/10/28 발생하고 있던 에러에 대해서 추기했습니다.

환경


  • OS:Windows10
  • Unity2018.4.0f1
  • Arduino Uno

  • 또한 Unity와 Arduino의 연결에 대해서는 여기 Unity와 Arduino를 시리얼 통신에 신세를지고 있습니다.

    오류 내용



    언제나처럼 직렬 통신을 수행하기 위해 API Compatibility Level을 .NET 2.0 Subnet에서 .NET2.0으로 변경
    (방법은, 여기 를 참고로 부탁합니다.)
    (Unity2018.4.0f1에서는 API Compatibility Level이 Optimization이 아닌 Configuration에 있음에 유의)

    그리고 Unity와 Arduino를 시리얼 통신 에서 빌린 "SerialHandler.cs"를 Add Component한 ...

    Console에 다음과 같은 표시가
    Assets\SerialHandler.cs(3,17): error CS0234: The type or namespace name 'Ports' does not exist in the namespace 'System.IO' (are you missing an assembly reference?)
    Assets\SerialHandler.cs(20,13): error CS0246: The type or namespace name 'SerialPort' could not be found (are you missing a using directive or an assembly reference?)



    또한 SerialHandler.cs를 VS2017에서 열면

    마음껏 오류가 나옵니다.

    요약하면 「System.IO에 Perts는 녀석이 없어!」라고 하는 것이므로, 준비해 주고 싶습니다.

    해결 방법



    조사했을 때, Microsoft의 공식으로 Unity에 .NET의 dll 파일을 새롭게 넣어주는 방법이있었습니다.

    Unity에서 .NET 4.x 사용

    위 링크의 「.NET과의 호환성을 이용한다」라고 곳을 참고로 실시합니다.

    다음 방법을 실행하기 전에 Build Settings를 열고 프로젝트 플랫폼을 UWP (Universal Windows Platform)로 변경하십시오 (2019/10/28 추가)

  • 이 링크 에서 "system.io.ports.4.6.0-preview5.19224.8"을 다운로드하고 (2019/05/24 현재 파일 이름입니다.) 확장자를 ".nupkg"에서 ".zip"으로 변경 및 해동
  • 압축을 푼 폴더의 lib/netstandard2.0로 이동하여 System.IO.Ports.dll 복사
  • Unity 프로젝트의 Assets 폴더에 Plugins라는 새 폴더를 만들고 System.IO.Ports.dll 파일을 붙여 넣습니다
  • 이전과 동일한 Assets 폴더에 link.xml이라는 다음 파일을 만듭니다

  • link.xml
    <linker>
      <assembly fullname="System.Core">
        <type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
      </assembly>
    </linker>
    

    이상입니다.

    결과



    또 한번 "SerialHandler.cs"를 VS2017에서 열면

    오류 표시가 사라졌습니다 ~

    Unity의 Console에도 표시가 사라지고 있다고 생각합니다!
    아니, 무사히 해결할 수 있어서 좋았다!

    또한, 빌드한 상황에서 이용하지 않기 때문에, 빌드한 경우 어떻게 될지는 불명합니다.

    (추기 1)
    사실 Edit> Project Setting> Player> Inspector> Other Settings> Configuration의 Scripting Runtime Version을 .NET 3.5 Equivalent로 변경해도 오류는 사라집니다.
    .NET 4를 고집할 필요가 없는 분은 그쪽이라도 좋을지도 모르겠네요 (-_-;)

    (추기 2)
    현재 다음과 같은 오류가 확인되었습니다.
    해결책 등 있으면 교수해 주시면 도움이 됩니다. . . (-_-;)
    PlatformNotSupportedException: System.IO.Ports is currently only supported on Windows.
    2019/7/12
    코멘트란에서 해결책을 가르쳐 주셨습니다!
    읽어 주셔서 감사합니다.

    2019/10/28
    코멘트를 근거로 내용을 수정했습니다.

    좋은 웹페이지 즐겨찾기