티스토리 뷰

Unity

Unity_ TD_ osc 통신_VFXgraph:scrip

잉_민 2022. 11. 14. 18:12

개념 설명 :

OSC 데이터 통신 프로토콜

OSC 라고 하는 오픈 사운드 컨트롤(Open Sound Control) 은 오디오 업계의 여러 분야에서 널리 사용되는 개방형 프로토콜입니다. 주로 클라이언트 간에 일반 오디오 데이터를 네트워킹하는 데 사용하지만 오디오 이외의 데이터에도 사용할 수 있습니다. (websocket : udp 로 통신하고 ip주소와 포트 넘버만 있으면 된다.)

 


이거 됨 !

https://thomasfredericks.github.io/UnityOSC/

 

UnityOSC - Open Sound Control (OSC) for Unity 3D

UnityOSC Open Sound Control (OSC) for Unity 3D. Get It! The example The download (and Github projet)  is an actual Unity project. Open the folder in Unity and everything is ready to run. The following instructions are for using UnityOSC in your own projec

thomasfredericks.github.io

 

여기서 유니티 페키지를 다운받았다.

포트번호만 수정했는데


딱히 상관없는 오류였음.. 암튼 고치려면

오류:

No Cloud ProjectID Found for Analytics
UnityEngine.Debug:LogError (object)

해결

https://docs.unity3d.com/kr/2020.3/Manual/UnityAnalyticsMismatchedProjectId.html

 

프로젝트 ID가 일치하지 않는 경우 수행할 작업 - Unity 매뉴얼

서비스 창 설정에서 프로젝트 ID를 찾을 수 없거나 프로젝트 ID가 일치하지 않는 것으로 확인될 경우, 이전 버전의 Unity를 사용하여 프로젝트를 업그레이드했거나 오프라인 상태에서 새 프로젝트

docs.unity3d.com

구름 누르면 Sercices 생긴다.

대충 여기에서 새로운 아이디 만들어서 해줌뎀...


 

터디는 프로젝트 파일 들어있음 !

나는 다른 값을 보내고 싶은데

CubeX

CubeY

와 같은 채널의 이름에 반응하는 것같음

따라서 채널이름을 저것처럼 맞춰주고  oscout.해주니까 값 프린트 됐음

oscin 해서 다른 컴터 maxmsp에서 값 받아왔음

테이블 arg0번에 내가 원하는 값있으므로 여기서 값 뽑아서 사용했다

dat -> 초록색으로 변경해줘야해서  datto써줬다.

 

셀렉트를 사용해서 채널이름을 변경해주었다


[유니티]

나는 받기만 할거

 

ReceivePosition.cs

여기서 로그 출력했다.

 

[결과]

 

 

--> 응용

이거를 이제 VFX 그래프의 인자로 받아서 사운드 반응 파티클을 만들거다 !


최종. 2024.05.05 업데이트 . 

TD 

1.OSC In

 

2.받아온 값 정리

**여기서 Name이 중요하다.

3.osc out으로 값내보낸다. 여기서 localhost의 주소가 중요하고, 포트번호 역시 중요하다. 

 

유니티.

OSC를 받아오는 스크립트가 있고

받아온 값을 처리하는 스크립트가 있다. 여기서 우리가 건드려야할 코드는 아래의 스크립트이다.

Receive Position.cs

using UnityEngine;
using UnityEngine.VFX;
using System.Collections;

public class ReceivePosition : MonoBehaviour {
    
   	public OSC osc;
    public VisualEffect vfx;


    // Use this for initialization
    void Start () {
        //osc 신호가 올 때 함수 실행 됨(이벤트 실행 함수) 여기서 채널 네임이"/"다음 *문자
	   //osc.SetAddressHandler( "/CubeXYZ" , OnReceiveXYZ );
       osc.SetAddressHandler("/CubeX", OnReceiveX);
        osc.SetAddressHandler("/CubeY", OnReceiveY);
        osc.SetAddressHandler("/CubeZ", OnReceiveZ);

        //vfx graph 불러오기
        vfx = GetComponent<UnityEngine.VFX.VisualEffect>();
        
    }
	
	// Update is called once per frame
	void Update () {
	
	}


    void OnReceiveX(OscMessage message) {
		//OnReceiveX함수가 불릴때 즉 "CubeX" 채널의 값이 들어올때 실행됨.
        // Cube X 가 보낸 message는 bit로 들어온다 -> 플로어트 값으로 변경하는 함수 (0)번째 인자.
        float x = message.GetFloat(0);

        //Debug.Log(x);
        //####### 받아온 값 여기서 적용하면됨 !!!!!!!!!!!!!!!!
        //브이에프엑스 그래프에 값넣기 (vfx의 블랙보드의 내가 만든 변수이름 , 적용하고 싶은 값 입력)
        vfx.SetFloat("X", x);
        print("xxxxx"+x);

    }

    void OnReceiveY(OscMessage message)
    {
    	//OnReceiveY함수가 불릴때 즉 "CubeY" 채널의 값이 들어올때 실행됨.
        // Cube Y 가 보낸 message는 bit로 들어온다 -> 플로어트 값으로 변경하는 함수 (0)번째 인자.
        float y = message.GetFloat(0);
        //Debug.Log(message + "y");
        vfx.SetFloat("Y", y);

        print("YYYYYY"+y);

    }

    void OnReceiveZ(OscMessage message)
    {
        //OnReceiveZ함수가 불릴때 즉 "CubeZ" 채널의 값이 들어올때 실행됨.
        // Cube Z 가 보낸 message는 bit로 들어온다 -> 플로어트 값으로 변경하는 함수 (0)번째 인자.
        float z = message.GetFloat(0);
        //Debug.Log(message + "z");
        vfx.SetFloat("Z", z);
        print("ZZZZZ"+z);

    }


}

VFX 그래프의 속성에 x,y,z 추가해줘야한다.

'Unity' 카테고리의 다른 글

Unity_ animation _trigger  (0) 2022.12.14
Unity _ Shader : hololens 2 MRTK UI  (1) 2022.12.09
unity_ 타임라인 영상 기록 추출  (0) 2022.11.11
unity_TD_udp통신  (0) 2022.11.07
Unity 2020: 시네머신 ///// Timeline  (0) 2022.10.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함