====== vci(ExportVci) ======
You can access various information and functions in VCI.\\
----
===== List of member variables and functions =====
**For the complete list, refer to "types.lua" file in "EmbeddedScriptWorkspace" folder. **
---vci module
---@class ExportVci
---@field StartCoroutine fun(coroutine: usertype)
---@field studio ExportStudio
---@field me ExportMe
---@field assets ExportAssets
---@field state ExportState
---@field message ExportMessage
---@field ResetRootTransform fun()
---@field _ALL_ResetRootTransform fun()
^ Method ^ Description ^ VC version ^
| StartCoroutine fun(coroutine: usertype) | Start a coroutine | 1.9.2a and later |
| [[en:vci:script:reference:exportstudio | studio ]] | | |
| [[en:vci:script:reference:exportme | me]] | | |
| [[en:vci:script:reference:exportassets | assets]] | | |
| [[en:vci:script:reference:exportstate | state]] | | |
| [[en:vci:script:reference:message | message]] | | |
| ResetRootTransform fun() | Reset the Transform of the VCI | 1.9.2a and later |
| _ALL_ResetRootTransform fun() | Reset the Transform of the VCI | 1.9.2a and later |
----
===== Start a coroutine =====
VC version: 1.9.2a and later
By using [[http://www.lua.org/manual/5.2/manual.html#2.6|coroutine]] feature in lua, you can implement a Unity like [[https://docs.unity3d.com/2018.4/Documentation/Manual/Coroutines.html|coroutine]] in your script.
Example
vci.StartCoroutine(
coroutine.create(
function()
print("Coroutine start")
local i = 0
while i < 10 do
-- Counts
print(i)
i = i + 1
-- Sleep for 0.5 seconds
sleep(0.5)
end
print("Coroutine end")
end
)
)
function sleep(sec)
local t0 = os.time() + sec
while os.time() < t0 do
-- Stop the coroutine
coroutine.yield()
end
end
You can run multiple coroutines in parallel, but be careful not to run too many as it may make the system unstable.
Also, watch out for infinite loops. If the loop contains `coroutine.yield` , then it should be a problem.
However, if `coroutine.yield` is not included in the loop, the error **Too Many Instructions** will be displayed and the script will be stopped.
==== Example data ====
This example uses multiple coroutines to animate.
{{ :vci:script:reference:coroutinesample.zip |}}
local cube = vci.assets.GetSubItem("Cube")
vci.StartCoroutine(
coroutine.create(
function()
print("Coroutine1: start")
while true do
local r = math.random()
local g = math.random()
local b = math.random()
vci.assets.SetMaterialColorFromIndex(0, Color.__new(r,g,b))
sleep(2)
end
end
)
)
vci.StartCoroutine(
coroutine.create(
function()
print("Coroutine2: start")
local ry = 0
while true do
cube.SetLocalRotation(Quaternion.Euler(0, ry, 0))
ry = ry + 1
coroutine.yield()
end
end
)
)
vci.StartCoroutine(
coroutine.create(
function()
print("Coroutine3: start")
local cnt = 0
while true do
local x = 2 * math.cos(cnt / 100)
local z = 2 * math.sin(cnt / 100)
cube.SetLocalPosition(Vector3.__new(x, 4, z))
cnt = cnt + 1
coroutine.yield()
end
end
)
)
function sleep(sec)
local t0 = os.time() + sec
while os.time() < t0 do
coroutine.yield()
end
end
----
===== Reset the Transform of VCI =====
VC version: 1.9.2a and later
Under a usual situation, item VCIs are spawned right in the front of the avatar.
After the generation, calling ResetRootTransform will reset the transform of the root of the VCI. The coordinate will be set to the origin, and the rotation will also be reset.
Example
vci.ResetRootTransform()