VRChat SDK U# 코딩 (1)

최 소 금·2023년 12월 22일

VRChat World 제작

목록 보기
1/4


[사진 출처. Steam]

내가 왜 시작했을까?

군 전역 후 기초부터 다시 배우자는 마음으로 C#의 이론 (살짝) 그리고 실습을 해보며 4년간 주로 했던 게임인 VRCHAT(이하 브챗 또는 VRC)
VRC는 내가 4년전 2019년~2020년 하반기까지 SDK 2.0을 사용하였던 걸로 기억하고 2.0과 3.0 SDK를 함께 쓰다
결국 SDK 2.0 지원이 중단되며 모든 World와 Avatar는 SDK 3.0만 지원하게 되었다.

SDK 2.0 시절.

[사진출처: VRchat 사이트 캡처]

지금 생각하면 상당히 부끄럽지만 SDK 2.0을 사용하며 간단한 World 제작을 하며 놀았다.
상당히 재밌었지만 VRchat SDK 2는 C# script를 지원하지 않기에 프로그래밍 연습을 하지 못하였다.

DK 3.0 지원 이후

처음에는 블럭코딩처럼 생긴...? Udon Graph 라는 코딩만 가능한 줄 알았지만
U# Script(C#을 기반으로 하는 코딩이라지만... 그냥 C#인 것 같다.)도 가능하다는 걸 최근에 알았다.

C# 처음부터 배우고 있는 입장이다보니 나쁘지 않을 것 같다고 생각하여 옛 제작한 World를 리메이크(?) 형식으로 다시 제작하려고 한다.

VRChat Udon은?

VRchat 개발팀이 완전히 자체적으로 구축한 프로그래밍 언어.
Nodes(노드)와 Wires(와이어)를 사용하여 흐름, 입력, 출력을 연결하여 내장 시각적 프로그래밍 인터페이스인 VRchat Udon Node Graph를/을 통해 사용하기 쉽도록 설계되었다.

[출처: VRchat Creation]

U#은?

Udon Sharp는 C#을 Udon 어셈블리로 컴파일 해주는 컴파일러이다.
UdonSharp는 현재 C# 언어 사양의 어떤 버전에도 부합하지 않아 구현되지 않거나 작동하지 않는 것들이 많다.

[출처 UdonSharp}

첫 단추

조금 정보를 알아보려 검색하다보니 VRchat에서 상당히 유명하신 KIBA님의 Tistory를 보았다.
총 7개의 글이 있지만 일단 첫번째 블로그 글만 읽어보았다.

"깃헙에서 그냥 패키지 임포트하면 되겠지? 😃"

상당히 끔찍했다.

최근 VRChat은 Unity 2019.4.31f1에서 2022.3.6f1으로 업데이트 하였다.
VRChat Avatar를 Unity 2019.4.31f1에서 2022.3.6f1 업그레이드를 나는 성공적으로 하였지만 주변인들은 2022.3.6f1으로 업데이트하지 말라고 하였다.
자만심에 못이겨

"난 아바타도 잘 적용했으니 월드도 2022버전으로 해야지~"

라는 '아주 멋진' 생각으로 2022버전으로 Project를 생성하였다.
생성 후 2022.3.6f1는 '반응없음'만 3~4번 반복하여
2019.4.31f1으로 다운그레이드 하여 다행히 실행이 되어 U#을 실행하였다.

무슨 계속 Unity 작동이 엉망이다.

"왜 WASD가 안눌려??"
" 아니 왜? 카메라 작동이 이상해??"

뭐가 이상한 건지 알고 싶었다.
지금은 해결하였지만...
아마 VCC(VRChat Creator Companion)에서의 SDK와
GitHub에서 다운 받은 U# 컴파일러끼리 충돌이 일어난 것 같다.

자세한 원인을 알게 되면 재작성.

첫 세팅

KIBA님의 Tistory를 일단 따라하자.

  • 빈 game Object를 생성.
  • Add Component에서 Udon Behaviour Script를 추가하자.
  • Script에서 Script 타입을 Udon C# Program Asset으로 변경
  • C# Script 하나 만들어 스크립트 작성을 준비한다!

프로그래밍 작동 테스트

"스크립트 하나 만들고..."
"Cube에 스크립트를 넣고..."

실행해보았다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
   //코드 생략
    }
}

결과 : 에러 팔괘 64장

왜? 라는 생각 뿐...

KIBA님의 스크립트와 비교해보자...

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;



public class Test : UdonSharpBehaviour
{
    //코드 생략
    }
}

NameSpaec도 다르고... class 부분도 제대로 확인하지 못했다...
참 바보 같은 짓🙄

다시 수정하고 실행 해보자.

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;



public class Test : UdonSharpBehaviour
{
     public float Rspeed = 100.0f; //회전, 이동 할 속도
    public float Pspeed = 1.0f;

    public Vector3 targetPosition = new Vector3(0, 0, 0); //이동할 좌표
    private Transform tf; //유니티 Transform 컴포넌트 정보
    void Start(){
        tf = gameObject.transform;
    }
    void FixedUpdate(){        
        tf.Rotate(new Vector3(0,1,1), Time.deltaTime * Rspeed); // 회전축 x:0, y:1, z:1 만큼 지속적으로 돌아감 
        tf.position = Vector3.MoveTowards(tf.position, targetPosition, Time.deltaTime * Pspeed);// 좌표
    }
}

잘 작동이 되는 것을 알았다.

내가 해보고 싶고 만들고 싶은 월드를 기획하는 단계로 가도록 하겠다.

profile
부족함이 많지만 항상 배우고 있는 학부생입니다 :>

0개의 댓글