[V CAST] 기획 중인 카메라 조작을 참가자들에게 해줄 수 있었으면 좋겠어요.
14528 단어 VCIVirtualCast가상 배우
요즘 V 캐릭터에서'밤에도 정해!'(링컨은 아침까지 정답인 패러디) 참가자들이 칠판에 쓴 것을 순서대로 전시하는 형식으로 기획했다.
이와 함께 간담회과 기획에 활용할 수 있는 아래 테이블을 제작했다.
사용 방법은 참가자를 상술한 책상 주위에 서도록 하는 것이다
진행을 할 때 여러분과 이야기를 할 때 영상을 찍습니다.
특정한 누군가가 말을 할 때 그 사람의 클로즈업 영상
를 참고하십시오.
처음에는 운영진에게 카메라를 겨누고 싶었지만 다음과 같은 과제가 나왔다.
• 다른 작업이 진행 중이어서 카메라를 조작할 수 없습니다
• 누가 말하고 있는지 판별하고 카메라를 전환해야 한다
(목소리가 비슷하거나 처음 보는 사람이 잘못 바뀐다)
• 참가자들의 버튼을 준비해야 하기 때문에 번거롭다
좋은 방법이 없을까 고민 중인데 원래 좌담회와 대희리의 형식은 한 사람이 많이 말하는 것이기 때문에 카메라는 참가자가 말을 할 때 참가자가 스스로 하면 된다!이렇게 생각하면서 이런 형식의 VCD를 만들었다.
말하는 사람이 카메라를 마주하는 장치를 만들어주세요.
따라서 이번에는 상기 표의 VCD를 대상으로 참가자가 직접 카메라를 조작할 수 있다.
시나리오(제한 사항)
unity
유닛의 구성은 다음과 같다.
・ArcTable: 탁자.이걸 잡으면 카메라를 바꿀 수 있어요.
・RefCamera_UP(파란색 구 부분): 업로드할 때 카메라의 이동 위치
・RefCamera_All(붉은 공 부분): 신축할 때 카메라의 이동 위치
(※ 이해하기 쉽게 파란색이나 빨간색 공을 넣었지만, 실제 VCD에는 공이 없었다)
코드(lua)
다음 순서에 따라 설명한다.
① 특정인의 위상 처리
② 카메라 뽑기 처리
③ 카메라를 손잡이로 돌리기
(※ 설명 외에 정의된 변수는 코드 내에서 사용됩니다. 적당히 다시 읽어 주십시오.)
① 특정인의 위상 처리
주로 다음과 같은 3가지 처리를 진행한다
・시야각 변경(적절한 고정값)
• 매개변수로 전송된 좌표에 카메라를 향합니다(Y 좌표는 평행)
• 카메라 리프Camera_위로 이동
실제로 이동하고 싶은 사용자의 위치를 매개 변수에 맡기는 형식입니다.
function SetCameraUp(targetPos)
local camera = vci.studio.GetHandiCamera()
if camera then
-- カメラの画角設定(値は適当)。システム設定のGetMinFieldOfViewが変わるとちゃんと動かなくなるかもしれないので一応maxとってる
local fov = math.max(38,camera.GetMinFieldOfView())
camera.SetFieldOfView(fov)
if targetPos then
local direction = targetPos - ITEM.RefCameraUp.GetPosition()
--カメラの向く向きを計算。y軸の傾きは0にする
local up = Vector3.__new(direction.x,0,direction.z)
local lookAt = Quaternion.LookRotation(up,Vector3.up)
camera.SetRotation(lookAt)
end
-- カメラを移動する
camera.SetPosition(ITEM.RefCameraUp.GetPosition())
end
end
② 카메라 뽑기 처리주로 다음과 같은 3가지 처리를 진행한다
・시야각 변경(적절한 고정값)
・카메라를 탁자의 좌표로 향하게 (Y 좌표는 평행으로 유지)
• 카메라 리프Camera_All로 이동
Up에서 사용하는 함수를 요약할 수 있을 것 같지만 잠시 분리합니다.
function SetCameraAll()
local camera = vci.studio.GetHandiCamera()
local targetPos = ITEM.DonutsTable.GetPosition()
if camera then
-- カメラの画角設定。システム設定のGetMinFieldOfViewが変わるとちゃんと動かなくなるかもしれないので一応maxとってる
local fov = math.max(40,camera.GetMinFieldOfView())
camera.SetFieldOfView(fov)
local direction = targetPos - ITEM.RefCameraAll.GetPosition()
if targetPos then
local direction = targetPos - ITEM.RefCameraAll.GetPosition()
--カメラの向く向きを計算
local up = Vector3.__new(direction.x,0,direction.z)
local lookAt = Quaternion.LookRotation(up,Vector3.up)
camera.SetRotation(lookAt)
end
-- カメラを移動する
camera.SetPosition(ITEM.RefCameraAll.GetPosition())
end
end
③ 카메라를 손잡이로 돌리기주로 다음과 같은 방식으로 실현된다.카메라 조작은 차주만 할 수 있기 때문에 정보를 사용했다
・ 사용자 id로 현재 누구를 대상으로 관리하는지 (소유자의 변수로 관리)
• 표 디자인 후 정보를 통해 사용자의 ID와 좌표를 증정
• 정보를 받은 후 id 정보를 보고 현재 사용 중인 사용자인지 판단한 후 축소 여부를 전환합니다
function onUse(use)
-- テーブルuse
if use == ITEM.DonutsTable.GetName() then
local avatar = vci.studio.GetLocalAvatar()
if avatar then
-- メッセージで押した人の情報変換してを送る。変換関数は後述
vci.message.Emit(MESSAGE.USE_CAMERA_SWITCHER,convertAvatarToJson(avatar))
end
end
end
function MS_UseCameraSwitcher(sender, name, data)
-- 受け取ったデータをアバター情報に変換(後述)
local avatar= convertJsonToAvatar(data)
---今誰を向いているかはtargetNoにIDを入れることで管理
if Owner.targetNo == avatar.id then
SetCameraAll(avatar.pos)
Owner.targetNo = nil
else
SetCameraUp(avatar.pos)
Owner.targetNo = avatar.id
end
end
vci.message.On(MESSAGE.USE_CAMERA_SWITCHER, MS_UseCameraSwitcher)
정보는 가상 이미지 정보를 직접 보낼 수 없기 때문에 보내고 받을 때 다음과 같은 내용으로 전환된다.function convertAvatarToJson(avatar)
local targetPos = avatar.GetLocalPosition()
return {
id = avatar.GetId(),
pos = {
x = targetPos.x,
y = targetPos.y,
z = targetPos.z
}
}
end
function convertJsonToAvatar(json)
return {
id = json.id,
pos = Vector3.__new(json.pos.x,json.pos.y,json.pos.z)
}
end
끝맺다이번에는 소개를 안 했지만 운영하면서 반납하고 싶은 일이 있어 테이블 이외에 진행자는 카메라를 자유롭게 돌려받을 수 있는 버튼만 만들었다.
이번에 제작된 VCC가 공개될 예정이니 참가자 여러분의 협조를 부탁드리며 좋은 기획을 이루도록 하겠습니다!!
Reference
이 문제에 관하여([V CAST] 기획 중인 카메라 조작을 참가자들에게 해줄 수 있었으면 좋겠어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lightjug/items/81e633a25d10f7fa4a73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)