[VCSI] 영구 애니메이션을 나중에 튀어나온 점으로 동기화하는 방법 고려
개시하다
추가 캘린더[VCC] 테마파크 만들기 Advent Calendar 2020에서
왜냐하면 저는'영구적으로 재생되는 애니메이션과 훗날의 애니메이션을 동기화하는 것'에 대한 고민이 좀 있었어요.
나는 서로 다른 모델의 애니메이션 재생 방법을 총결하고 싶다.
하고 싶은 거.
현재 다음과 같은 애니메이션을 생성하여 회전을 지속하고 있습니다.
봐라!마천륜이 돌고 있어, 귀여워pic.twitter.com/VYeuSn8fL4-가볍게 (쓸고 당기기)(@lightjug)December 24, 2020
현재 다음과 같은 애니메이션을 생성하여 회전을 지속하고 있습니다.
봐라!마천륜이 돌고 있어, 귀여워pic.twitter.com/VYeuSn8fL4-가볍게 (쓸고 당기기)(@lightjug)December 24, 2020
이번에 우리는 상술한 애니메이션을 나중에 내놓은 사람과 어떻게 동기화시킬 것인가를 연구할 것이다p>
또한, 앞으로 이동 대상인 봉황꼬리선의 수량을 증가하기 위해
SubItem을 함부로 추가하지 않기 위해 케이블카를 서브 프로젝트로 제작하였습니다.br/>
이러한 제한 없이 이동 객체를 SubItem으로 설정할 수 있는 경우 SubItem 자체에 동기화 기능이 있으므로 동기화를 다시 신경 쓸 필요가 없습니다.p>
애니메이션 함수의 특징
애니메이션 함수에 대한 자세한 설명은 아래 공식 페이지에 있습니다.br/>
・vci.assets(ExportAnimation)
위의 페이지에는 표시되지 않지만 애니메이션에는 다음과 같은 규칙이 있습니다.br/>
· 재생 과정에서 같은 애니메이션을 다시 재생해도 처음부터 재생하지 않는다.(계속 재생 중인 애니메이션)
• 재생 중 다른 애니메이션을 재생할 때 재생 중인 애니메이션을 정지하고 다른 애니메이션을 덮어씁니다
(Blend와 CrossFade를 사용하면 다를 수 있습니다. 이번에는 시간 관계상 Blend와 CrossFade를 접촉하지 않습니다.)
이번에 상술한 법칙이 중점입니다. 기억하세요
[NG] loop에서 애니메이션 재생
먼저 나중에 온 사람들로 하여금 현지에서 애니메이션을 순환하게 합니다.
VCD를 내보낸 사람(Owner)과 나중에 튀어나온 사람(Gustet)의 애니메이션 재생 시간은 다음과 같습니다.br/>
(세로 사각형은 애니메이션의 한 번 길이라고 생각하십시오.)
코드는 아래와 같습니다.
local animationLoop = vci.assets.GetTransform("AnimationLoop").GetAnimation()
animationLoop.PlayFromName("Rotate",true)
여기서 VCC가 나올 때부터 동시 재생이 되는데 뒤에서 튀어나온 사람은 동시 재생이 안 돼요.p>
위치 동기화를 할 필요가 없다면 상술한 것도 문제없지만
이번에는 어느 정도 봉미선의 위치를 동기화하고 싶었기 때문에 상술한 방법은 요구를 만족시키지 못했다p>
참고로 확인은 안 했지만 All을 가지고 방송하면 다음과 같은 몇 가지만 하면 동작상 기본적으로 똑같습니다.br/>
[NG] once로 재생, 끝나고 재생.
다음에 once로 애니메이션을 재생하고 끝난 후에 다시 재생하는 방법으로 애니메이션을 만듭니다br/>
이 방법은 뒤에서 오는 볼록자부터 애니메이션이 재생되지 않지만, Owner가 다시 재생성될 때 동기화됩니다.(통신의 영향을 받아 약간의 오차가 발생할 수 있습니다.)
코드는 아래와 같습니다.
local animationOnce = vci.assets.GetTransform("AnimationOnce").GetAnimation()
if vci.assets.IsMine then
animationOnce._ALL_PlayFromName("Rotate",false)
end
function update()
--終了してたら再実行する
if not animationOnce.IsPlaying() then
animationOnce._ALL_PlayFromName("Rotate",false)
end
end
언뜻 보기엔 이 방법으로 문제 없이 이동하는 것 같다br/>
그러나 실제로 이 방법을 시도한 후, 때로는 재방송할 때 몇 번 애니메이션을 재생하지 않는다br/>
아마도 선로 속도 등의 떨림으로 인해 다음과 같은 현상이 일어난 것 같다
[OK?]once 재생, 종료 후 재생 중지
위 방법은 재생 과정 중 다음 재생을 순조롭게 완성할 수 없기 때문에 명확히 정지한 후 재생해야 한다br/>
애니메이션 재생 시간은 다음과 같습니다.br/>
코드는 다음과 같다
local animationOnce = vci.assets.GetTransform("AnimationOnce").GetAnimation()
if vci.assets.IsMine then
animationOnce._ALL_PlayFromName("Rotate",false)
end
function update()
--終了してたら再実行する
if not animationOnce.IsPlaying() then
animationOnce._ALL_Stop()
animationOnce._ALL_PlayFromName("Rotate",false)
end
end
통신의 영향으로 stop과play가 앞뒤로 이동할 수 있을 거라고 생각했는데, 지금 위의 코드로 정확하게 돌아가고 있습니다.p>
보태다
내가 확인했을 때 스톱과 플레이가 공교롭게도 바뀌지 않았을 수도 있다. 순서가 바뀌어 순조롭지 않을 수도 있다.p>
이 경우 애니메이션을 두 부분으로 나누거나 같은 애니메이션을 복사해서 번갈아 재생하면 끝난 후에 재생하는 방법에서 다음 애니메이션을 재생해도 서로 다른 애니메이션은 덮어쓰는 규칙에 따라 정확하게 작동합니다p>
코드는 다음과 같다
local animationDivede = vci.assets.GetTransform("AnimationDivide").GetAnimation()
if vci.assets.IsMine then
vci.state.Set("rotateIndex",1)
animationDivede._ALL_PlayFromName("Rotate_1",false)
end
function update()
--終了してたら次のアニメーションを実行する
if not animationDivede.IsPlaying() then
local index = vci.state.Get("rotateIndex")
if index then
index = index%2+1
animationDivede._ALL_PlayFromName("Rotate_"..index,false)
vci.state.Set("rotateIndex",index)
end
end
end
(솔직히 방송 정지 방법이 순조롭게 진행될 줄은 몰랐어요.)
끝맺다
어때요?
이번에 실험을 통해 이론적으로 모르는 부분이 많다는 것을 확인하였다br/>
이 방법으로 안 풀리면 알려주세요.br/>
、
또 이번에 소개한 관람차를 비롯해'VCC로 테마파크 만들기'라는 광고도 적혀 있으니 꼭 가보세요.br/>
[VCC] 테마파크 만들기 Advent Calendar 2020
Reference
이 문제에 관하여([VCSI] 영구 애니메이션을 나중에 튀어나온 점으로 동기화하는 방법 고려), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lightjug/items/2aabce99fb525431a820텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)