VCD 콘테스트에서 사용된 VCD 조작법에 대한 소개

개시하다


12월 5일에 비디오 CD 경기가 열렸는데, 경기는 비디오 CD를 사용하여 물품을 운송하는 시간을 가졌다.
자세한 내용은 다음과 같습니다. https://twitter.com/karasumayun/status/1322821429700653057
이번에는 이 같은 행사를 위해 제작된 VCD(휠체어 적재기)에 사용된 내용을 소개한다.

전체 구성


기본적으로 손변 입방체의 좌표 정보를 이용하여 수레바퀴 적재기를 조종하는 형식을 채택하였다.
이번에는 학습과 함께 다음 세 가지 기능을 다른 방법으로 조작할 수 있도록 한다.
회전 동기화
• 가감속
/팔의 승강
아래의 내용도 코드 내에서 진행하지만, 저쪽에서는 설명하지 않는다.
・조작용 큐브에 자동 장착
·'회전 조작 & 가감속'과'기계 팔 상하 이동'모드의 전환
· GetTransForm 처리 (초기화할 때 ITAM이라는 테이블에 모두 포함)

회전 동기화



이것은 아주 간단한 회전 컨트롤러의 Quaternion을 수레바퀴 적재기(MACHINE)의 Quaternion에 넣는 것일 뿐이다.
function update()
  ITEM.MACHINE.SetRotation(ITEM.ROTATE.GetRotation())
end
그러나 Y축 이외의 회전을 원하지 않기 때문에 Unity 설정을 통해 회전용 컨트롤러의 회전축을 다음과 같이 고정시켰다.

가감속



Grab의 위치를 가상 대상에 저장하고 속도 컨트롤러와 가상 대상의 y 좌표 거리에 따라 가감속을 한다.(가상 대상은gif 이미지의 반투명 구체 부분)
아니, 그랩은 가만히 있어.
local isGrabSpeed = false

function update()
  if isGrabSpeed then
    move()
  end
end

function move()
  --コントローラーとダミーオブジェクトの位置から移動量の計算(上限下限あり)
  local distY = (ITEM.CONTROLLER_SPEED.GetPosition().y - ITEM.DUMMY_SPEED.GetPosition().y)
  local distPerSec = math.max(math.min(distY*15,5),-5)*0.02
  local addVector = ITEM.MACHINE.GetForward().normalized*distPerSec

  --MACHINEの位置更新
  local machinePos = ITEM.MACHINE.GetPosition()
  ITEM.MACHINE.SetPosition(machinePos+addVector)
end

function onGrab(target)
  if target == ITEM.CONTROLLER_SPEED.GetName() then
    --Grabした位置をダミーオブジェクトに保存
    ITEM.DUMMY_SPEED.SetPosition(ITEM.CONTROLLER_SPEED.GetPosition())
    isGrabSpeed = true
  end
end


function onUngrab(target)
  if target == ITEM.CONTROLLER_SPEED.GetName() then
    --放した時に位置を同期させる必要はないがなんとなく実施
    ITEM.DUMMY_SPEED.SetPosition(ITEM.CONTROLLER_SPEED.GetPosition())
    isGrabSpeed = false
  end
end

팔 위 아래



좌우 컨트롤러 Y 좌표의 위치 관계에 따라 팔의 각도를 바꿉니다.
function updateAll()
  local x = (ITEM.CONTROLLER_ARM_LEFT.GetPosition().y - ITEM.CONTROLLER_ARM_RIGHT.GetPosition().y)*100
  x = math.max(math.min(x,10),-60)
  ITEM.ARM.SetLocalRotation(Quaternion.Euler(x,0,0))
end

끝맺다


이번에는 VCC 경기용 기계의 조작 방법에 대한 사고방식을 소개했다.
다른 처리가 있어서 이번에 큐브를 사용해서 손의 좌표를 얻어도 돼요.

좋은 웹페이지 즐겨찾기