#06 (보너스) 살짝 프로그램을 보자

프로그래밍은 어렵다고 생각할지도 모르지만, 조금 익숙해지면 괜찮습니다!
샘플 코드를 약간 해설했으므로 관심이 있다면 이 기회에 프로그래밍을 시작해 보세요.


   샘플 코드 해설

(1)Unity 화면에서 Live2D 모델을 선택하고 SimpleModel을 더블 클릭합니다


(2)MonoDevelop가 시작됩니다. 여기에서 프로그램을 보거나 수정할 수 있습니다.


100줄에 가까운 프로그램 코드이지만 크게 3 개의 처리로 나눠져 있습니다.

처리의 실행 순서는 Start() → Update() → OnRenderObject() 입니다.
렌더링은 그림을 그리는 것으로, Update()와 OnRenderObject()는 매 프레임마다 호출됩니다.

먼저 Start처리부터 살펴봅시다!


【 Start처리 】
Start 처리에서는 초기화 처리 및 load 처리를 호출합니다.
초기화 처리는 Live2D모델을 렌더링하는데 필요한 것입니다.
Load 처리에서는 moc파일이나 텍스쳐 등 파일의 로드 처리를 실행합니다.
  1. void Start()
  2. {
  3.     // Live2D 모델의 인스턴스
  4.     Live2D.init();
  5.     // 로드 처리를 호출
  6.     load();
  7. }
  8.  
  9. void load()
  10. {
  11.     // moc파일 로드
  12.     live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
  13.  
  14.     for (int i = 0; i < textureFiles.Length; i++)
  15.     {
  16.         // 텍스처 파일 연결
  17.         live2DModel.setTexture(i, textureFiles[i]);
  18.     }
  19.     // Live2D 모델 드로잉 위치를 지정
  20.     float modelWidth = live2DModel.getCanvasWidth();
  21.     live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f);
  22.  
  23.     // 물리 연산 파일 로드
  24.     if (physicsFile != null) physics = L2DPhysics.load(physicsFile.bytes);
  25. } 

【 Update처리 】
Update처리에서는 마우스 클릭을 감지하는 처리가 되어있습니다.
  1. void Update()
  2. {
  3.     var pos = Input.mousePosition;
  4.     // 마우스 왼쪽 버튼을 눌렀을 때
  5.     if (Input.GetMouseButtonDown(0))
  6.     {
  7.         // 처리 없음
  8.     }
  9.     // 마우스 왼쪽 버튼을 계속 누르고 있을 때
  10.     else if (Input.GetMouseButton(0))
  11.     {
  12.         dragMgr.Set(pos.x / Screen.width*2-1, pos.y / Screen.height*2-1);
  13.     }
  14.     // 마우스 왼쪽 버튼을 놓을 때
  15.     else if (Input.GetMouseButtonUp(0))
  16.     {
  17.         dragMgr.Set(00);
  18.     }
  19. } 



【 OnRenderObject처리 】
OnRenderObject 처리에서는 감지한 마우스 클릭 위치에 따라 얼굴의 방향이나 몸의 방향을 변화시키는 처리가 되어있습니다.

  1. void OnRenderObject()
  2. {
  3.     if (live2DModel == null)
  4.     {
  5.         load();
  6.     }
  7.  
  8.     live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);
  9.  
  10.     if ( ! Application.isPlaying)
  11.     {
  12.         live2DModel.update();
  13.         live2DModel.draw();
  14.         return;
  15.     }
  16.  
  17.     dragMgr.update();
  18.     // 얼굴의 방향
  19.     live2DModel.setParamFloat("PARAM_ANGLE_X" , dragMgr.getX(30);
  20.     live2DModel.setParamFloat("PARAM_ANGLE_Y", dragMgr.getY() * 30);
  21.     // 몸의 방향
  22.     live2DModel.setParamFloat("PARAM_BODY_ANGLE_X", dragMgr.getX() * 10);
  23.     // 눈의 움직임
  24.     live2DModel.setParamFloat("PARAM_EYE_BALL_X", -dragMgr.getX());
  25.     live2DModel.setParamFloat("PARAM_EYE_BALL_Y", -dragMgr.getY());
  26.     // 호흡
  27.     double timeSec = UtSystem.getUserTimeMSec() / 1000.0;
  28.     double t = timeSec * 2 * Math.PI;
  29.     live2DModel.setParamFloat("PARAM_BREATH"(float)(0.5f + 0.5f * Math.Sin(t / 3.0)));
  30.     // 눈 깜빡임
  31.     eyeBlink.setParam(live2DModel);
  32.  
  33.     if (physics != null) physics.updateParam(live2DModel);
  34.  
  35.     live2DModel.update();
  36.     live2DModel.draw();
  37. }


즉, 이 ID에 계산식을 설정하는 것으로 마우스로 굴리는 동작을 결정하고 있습니다.



간단한 해설이었지만, 이번은 쓰여있는 내용을 조금은 알 것 같으면 된다고 생각합니다.
처음엔 숫자 값이나 프로그램을 다양하게 만져보고 즐겨보는 게 중요합니다!