게임 프로그래밍 ( 이제 안함 )/일에 대한 끄적끄적
Final IK - VRIKAvatarScaleCalibrationSteamVR.cs 주석 작성
Nerd_Lee
2019. 11. 14. 14:10
반응형

이 글은 절대 정확한 주석이 아닙니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RootMotion.FinalIK;
using Valve.VR;
namespace RootMotion.Demos
{
// scale을 보정하는 클래스
public class VRIKAvatarScaleCalibrationSteamVR : MonoBehaviour
{
public VRIK ik; // VRIK 클래스 변수
public float scaleMlp = 1f; // 조정해줄 스케일 값
public SteamVR_Action_Boolean grabPinch; // 어떤 버튼을 누르는 가를 확인하는 변수
public SteamVR_Input_Sources inputSource = SteamVR_Input_Sources.Any; // 어떤 컨트롤러에서 누르는가를 확인하는 변수. Any는, 모든 컨트롤러를 뜻함.
private bool calibrateFlag; // 켈리브레이트를 실행할 지 안할 지의 대한 bool값 변수.
void OnEnable()
{
if (grabPinch != null) // grabPinch가 정의가 되어있다면
{
grabPinch.AddOnChangeListener(OnTriggerPressedOrReleased, inputSource); // 게임오브젝트가 켜지면, grabPinch에 Listener를 교체한다. OnTriggerPressedOrReleased 함수와, inputSource를 함께 넘긴다.
}
}
private void OnDisable()
{
if (grabPinch != null) // grabPinch가 정의가 되어 있다면
{
grabPinch.RemoveOnChangeListener(OnTriggerPressedOrReleased, inputSource); // grabPinch의 리스너를 삭제한다. OnTriggerPressedOrReleased에 대한 이벤트를 삭제한다.
}
}
/// <summary>
/// grabPinch에 붙일 리스너 함수, Trigger버튼을 눌렀거나 땠을 때의 함수.
/// </summary>
/// <param name="fromAction">액션에 관련 된 매개변수. grabPinch와 같은 액션</param>
/// <param name="fromSource">컨트롤러 관련 변수</param>
/// <param name="newState">상태관련 변수</param>
private void OnTriggerPressedOrReleased(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource, bool newState)
{
// 트리거가 해제되었다면, 반환.
if (!newState)
{
return;
}
// SteamVR_Settings 파일에서 "입력 업데이트 모드"를 "OnLateUpdate"로 설정 한 경우에만 여기에서 직접 보정 할 수 있습니다. 라고 번역이 되는데. 그냥 trigger를 누르면, LateUpdate에서, calibrateFlag가 true라면, false로 만들고
// 해당 카메라의 위치에 따라, scale을 보정한다.
calibrateFlag = true;
}
// -0.143 , 0.158, -0.338
private void LateUpdate()
{
// LateUpdate에서, 보정이 완료되었는 지 확인한다?
if (!calibrateFlag)
{
return;
}
calibrateFlag = false;
// 머리 타겟의 높이와, root의 높이를 비교하고 그 값을 스케일링 한다.
float sizeF = (ik.solver.spine.headTarget.position.y - ik.references.root.position.y) / (ik.references.head.position.y - ik.references.root.position.y);
ik.references.root.localScale *= sizeF * scaleMlp;
}
}
}
반응형