유니티 자격시험 Unity GameDeveloper)8. SendMessage/람다함수와 이벤트함수(Delegate,Action,Fun)/as형변환

2021. 12. 8. 15:43유니티 & C# 공부

반응형

1. 스레드 함수(SendMessage 등)

      스레드 함수   SendMessage

      SendMessage("YouWin",SendMessageOptions.DontRequireReceiver); 

                          "함수명", 을 타 스크립트 안에 가져와서 실행해줘, 근데 없으면 무시하고, 있으면 실행해줘

                    "함수명"은 public 안 붙어 있어도 가져와서 실행 가능하다!

 

  1) SendMessgae와 Delegate 차이

      Delegate함수가 내부적으로 처리하고, 속도가 좀 더 빠르다고 함

        관련 출처  http://1st.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&no=2070

 

유니티 사용시 delegate event와 sendmessage 어떤걸 사용하시나요...

유니티로 네트워크 게임을 만들고 있는데..유니티를 처음 접한상태에서 만들다보니 간단한거에서 고민이 생기네요 ㅠ.ㅠ유니티에서 기본적으로 SendMessage로 다...

1st.gamecodi.com

 

   2)  스레드 함수 (SendMessage함수)

        관련 출처  https://flowerexcel.tistory.com/11

 

[프로그래밍 원리 007] SendMessage & PostMessage in MultiThreading (1)

SendMessage & PostMessage in MultiThreading (1) 윈도우가 다른 OS에 비해서 특별한 점이 많이 있지만 가장 특별한 점을 꼽으라고 하면 필자는 주저없이 메시지 기반의 이벤트 구동형(Eve..

flowerexcel.tistory.com

 

 

 

 

 

  2. 람다 함수와 대리자(Delegate, Action<> 등)

      람다 함수  (매개변수, 예 int...) =>{이름없이 즉석 생성된 함수}

      - Delegate나 Action 이벤트 함수와 같이 사용가능하며, 실시간으로 즉석 함수를 실행해서 코드간결화

 

 

      대리자 Delegate<변수타입> , Fun<>    

        메서드를 대신 호출,   콜백CallBack 메서드를 정의할 수 있다 

       사용되는 델리게이트 타입을 미리 정해야 함.

       (이를 극복 위해 C#에서는 모든 타입 형태로 미리 정의된 델리게이트인 Action,Fun를 제공)

     

        delegate int 이름Ex1 (int a, int b)    먼저 선언 해주고

        이름Ex1 오브젝트명 생성 후 

        start 함수 등에 delegate 오브젝트명에 함수 연결 해주는 식으로 사용

 

       예시는 아래 사이트들  확인 참고

    https://velog.io/@zero9657/TIL-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EB%8D%B8%EB%A6%AC%EA%B2%8C%EC%9D%B4%ED%8A%B8-%EC%9D%B4%EB%B2%A4%ED%8A%B8

 

[Unity_03] 유니티 델리게이트, 이벤트

델리게이트이벤트👉 어떤 기능을 목록에 추가하면 델리게이트가 그 목록들을 대신 실행시켜 준다.어떤 계산을 할지, 계산하는 순간에 알고 있어야함👉 계산하는 내용이 달라졌을 때, 코드를

velog.io

 

 

      https://coderzero.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-C-%EA%B0%95%EC%A2%8C-17-%EC%9D%B4%EB%B2%A4%ED%8A%B8Event-%EB%8C%80%EB%A6%AC%EC%9E%90-%EB%8D%B8%EB%A6%AC%EA%B2%8C%EC%9D%B4%ED%8A%B8-Delegate

 

[유니티 C# 강좌] 17. 이벤트(Event), 대리자 (델리게이트, Delegate)

1. 이벤트(Event) 이벤트는 개체에서 작업 실행을 알리기 위해 보내는 메시지입니다. 이벤트는 외부 이벤트 가입자(Subscriber)에게 특정한 일을 알려 줍니다. 이벤트는 event라는 키워드를 사용하여

coderzero.tistory.com

 

       Delegate와 Action,Fun<>의 차이점 설명 나오는 사이트

      https://m.blog.naver.com/hana100494/221577502489

 

[C#] Action과 Func : 미리 정의 된 Delegate

저번에는 옵저버 패턴에 관련해서 delegate와 event에 대해 얘기했다면, 이번에는 실제로 더 다양하게 많이...

blog.naver.com

 

 

        Action<변수타입> , Fun<>   별도의 Delegate선언 없이 한 줄 표현 가능함

        사용 전 using.system 입력 필요함 ,  C# 자체에서 제공

        Action은 파라미터 값 받을 수 있으며(없을수도 있음) 리턴값x, 

        Fun은 리턴 return도 무조건 있어야 한다 함

 

https://reqres.tistory.com/20

 

[C#] Action, Func 그리고 Task

C#의 대리자(delegate)와 Task에 대해서 알아보겠습니다. 대리자와 Task는 항상 따라다니는 기술이며, 수많은 오픈소스도 이 두개의 개념을 적극적으로 사용하여, 비동기 로직을 구현하고 있습니다. A

reqres.tistory.com

https://nomad-programmer.tistory.com/196

 

[C#] Func 대리자, Action 대리자

Func와 Action을 사용하는 이유? Func와 Action으로 더 간편한 무명 함수를 만들 수 있다. 익명 메소드와 무명 함수는 코드를 보다 간결하게 만들어주는 요소들이다. 하지만 대부분의 경우 단 하나의

nomad-programmer.tistory.com

 

 

 

       람다함수와 Action 혼합된 것을 보자.

          (개인정보를 php MySQL에 저장 후 로그인 할 때 사용하는 부분 일부임)

        

        예)     Action<string> _creatItemsCallback; 으로 Action<타입> 먼저 선언 후 

 

           start함수 등 안에            * ()=>{}자체가 람다함수임

          _creatItemsCallback= (jsonArrayString) => {
            StartCoroutine(CreatItemsRoutine(jsonArrayString));  이렇게 변수로 사용하거나 

 

 

        StartCoroutine(Main.instance.web.GetItemsIDs(userId,_creatItemsCallback)); 로 

         함수의 매개변수로도 넣을 수 있는데,

       이 때 GetItemsIDs라는 함수의 Action 매개변수 정보를 받아서 사용함. 

 

       public IEnumerator GetItemsIDs(string userID,System.Action<string>callback)

       {  // 유저 아이디에 따른 아이템 번호를 UnityWebRequest 함수 및 개인 데이터관리(PHP MySQL이용)

          Simpe제이슨 값으로 받아낸다.

      

          yield return www.Send(); //어느시점에서 서버의 응답을 기다려야 하므로 코루틴 사용
                                     // 한 프레임에서 모두 완료할 수는 없음

 

          if (www.isNetworkError || www.isHttpError)  에러있으면 에러 디버깅하고
            {  Debug.Log(www.error);    }

 

         else
            { //IEnumerator 는 Json을 문자열로 반환 불가능 하므로 콜백함수 쓴다
                // Call callback function to pass results

               string jsonArray = www.downloadHandler.text;

                callback(jsonArray);

             }

      }

 

       람다식 관련 사이트 https://ansohxxn.github.io/unity%20lesson%201/chapter8-5/

 

Unity Chapter 8-5. C# 프로그래밍 [고급] : 람다 함수

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀 🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!

ansohxxn.github.io

 

 

   -유니티 로그인, 회원가능,아이템 인벤토리, DB 데이터베이스, PHP언어 및 MySQL 서버 외국영상,

     SampleJson은 구글 검색 후 깃허브 사이트 찾아서 쓰면 된다.

      https://www.youtube.com/watchv=utwSPVGZiiw&list=PLTm4FjoXO7nfn0jB0Ig6UbZU1pUHSLhRU

 

 

 

  3. 형변환 as, is

    monsterPrefab = Resources.Load("Monster") as GameObject; //as로 형변환 필요함, 요즘에는 안쓰는 방식

 

    is는 강제적으로 형 변환 할 때 사용한다고 함. as는 object형을 int로 변경할 때 안되고 is는 가능하다고 한다.

    https://inasie.tistory.com/14

 

강제 형 변환(cast)보다는 as, is 연산자를 사용하는 것이 좋다

강제 형 변환보다는 as, is가 좋다! <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> C#에서도 C, C++, Java등에서 사용하던 강제 형 변환을 할 수 있다. 형 변환 예) void EventH..

inasie.tistory.com

 

반응형