VCD 콘테스트에서 사용된 VCD 조작법에 대한 소개
8355 단어 가상 배우VirtualCastVCI
개시하다
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 경기용 기계의 조작 방법에 대한 사고방식을 소개했다.
다른 처리가 있어서 이번에 큐브를 사용해서 손의 좌표를 얻어도 돼요.
Reference
이 문제에 관하여(VCD 콘테스트에서 사용된 VCD 조작법에 대한 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lightjug/items/3d9ac01eb8d3f65b7108
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
기본적으로 손변 입방체의 좌표 정보를 이용하여 수레바퀴 적재기를 조종하는 형식을 채택하였다.
이번에는 학습과 함께 다음 세 가지 기능을 다른 방법으로 조작할 수 있도록 한다.
회전 동기화
• 가감속
/팔의 승강
아래의 내용도 코드 내에서 진행하지만, 저쪽에서는 설명하지 않는다.
・조작용 큐브에 자동 장착
·'회전 조작 & 가감속'과'기계 팔 상하 이동'모드의 전환
· 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 경기용 기계의 조작 방법에 대한 사고방식을 소개했다.
다른 처리가 있어서 이번에 큐브를 사용해서 손의 좌표를 얻어도 돼요.
Reference
이 문제에 관하여(VCD 콘테스트에서 사용된 VCD 조작법에 대한 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lightjug/items/3d9ac01eb8d3f65b7108
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function update()
ITEM.MACHINE.SetRotation(ITEM.ROTATE.GetRotation())
end
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
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 경기용 기계의 조작 방법에 대한 사고방식을 소개했다.
다른 처리가 있어서 이번에 큐브를 사용해서 손의 좌표를 얻어도 돼요.
Reference
이 문제에 관하여(VCD 콘테스트에서 사용된 VCD 조작법에 대한 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lightjug/items/3d9ac01eb8d3f65b7108텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)