
[사진 출처. 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만 지원하게 되었다.
[사진출처: VRchat 사이트 캡처]
지금 생각하면 상당히 부끄럽지만 SDK 2.0을 사용하며 간단한 World 제작을 하며 놀았다.
상당히 재밌었지만 VRchat SDK 2는 C# script를 지원하지 않기에 프로그래밍 연습을 하지 못하였다.

처음에는 블럭코딩처럼 생긴...? Udon Graph 라는 코딩만 가능한 줄 알았지만
U# Script(C#을 기반으로 하는 코딩이라지만... 그냥 C#인 것 같다.)도 가능하다는 걸 최근에 알았다.
C# 처음부터 배우고 있는 입장이다보니 나쁘지 않을 것 같다고 생각하여 옛 제작한 World를 리메이크(?) 형식으로 다시 제작하려고 한다.
VRchat 개발팀이 완전히 자체적으로 구축한 프로그래밍 언어.
Nodes(노드)와 Wires(와이어)를 사용하여 흐름, 입력, 출력을 연결하여 내장 시각적 프로그래밍 인터페이스인 VRchat Udon Node Graph를/을 통해 사용하기 쉽도록 설계되었다.
[출처: VRchat Creation]
Udon Sharp는 C#을 Udon 어셈블리로 컴파일 해주는 컴파일러이다.
UdonSharp는 현재 C# 언어 사양의 어떤 버전에도 부합하지 않아 구현되지 않거나 작동하지 않는 것들이 많다.
조금 정보를 알아보려 검색하다보니 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);// 좌표
}
}

잘 작동이 되는 것을 알았다.
내가 해보고 싶고 만들고 싶은 월드를 기획하는 단계로 가도록 하겠다.