function onStart()
\n 房间加载时调用一次。适用于初始化代码。\n\n- function onClick()
\n 点击某物时调用。(与物理类型 "passthrough"
不兼容。)\n\n- function onUpdate()
\n 每秒调用约 30 次。用于每帧逻辑(例如运动、实时计算)。\n\n- function onCollision(other)
\n 当此物体与另一物体(other
)碰撞时调用。\n\n- function onButtonDown(b)
\n 当控制器按钮("up"
、"down"
、"left"
、"right"
、"a"
或 "b"
)被按下时调用。\n\n- function onButtonUp(b)
\n 当控制器按钮被释放时调用。\n\n---\n\n### 处理输入\n\n使用 onButtonDown
/onButtonUp
(见上文)或检查 input
表:\n\n- input.up
/ input.down
/ input.left
/ input.right
/ input.a
/ input.b
\n 按住按钮时每个为 true
。\n\n- input.upJustPressed
/ input.upJustReleased
(类似于 down
、left
、right
、a
、b
)\n 按下或释放时仅在一帧内为真。\n\n- input.x
/ input.y
\n DPAD 的水平/垂直状态的范围 [-1,1]
的浮点数。\n\n- input.natX
/ input.natZ
\n 世界空间中的“自然”移动向量,便于角色移动。\n\n- input.natYaw
\n 与 DPAD 方向对应的偏航角(以度为单位)。\n\n---\n\n### 物理类型\n\n物体可以具有以下物理行为:\n- "kinematic"
(默认)– 不受物理影响,但与其他物体碰撞。\n- "upright"
– 物理模拟,保持直立。\n- "tumbly"
– 完全物理模拟,可以翻倒。\n- "passthrough"
– 无碰撞。\n- "trigger"
– 无碰撞但仍触发碰撞事件。\n\n---\n\n## 按类别划分的函数/方法\n\n以下是每个 API 函数及其参数。标记为 Thing:methodName(...)
的方法可以在 self
或任何其他物体引用(例如 getThing("X"):methodName(...)
)上调用。\n\n---\n\n### ✨ 效果\n\n1. playSound(soundFileName, loop, volume, delayBeforeStart)
\n 播放声音。\n - soundFileName (string)
– 声音名称。扩展名可选(.wav/.mp3
)。\n - loop (boolean, optional)
– 默认为 false
。\n - volume (number, optional)
– 范围 [0..1]
。\n - delayBeforeStart (number, optional)
– 播放前等待的秒数。\n\n2. playSoundWithPitch(soundFileName, pitch, volume)
\n 与 playSound
相同,但具有半音的音高变化。\n - pitch (number)
– 高于(正)或低于(负)正常音高的半音。\n\n3. setSoundVolume(soundFileName, volume)
\n 更改当前播放的具有此名称的声音的音量。不影响未来播放。\n\n4. stopSound(soundFileName)
\n 停止当前播放的声音。\n\n5. explode(x, y, z, radius, force)
\n 在 (x,y,z)
位置应用物理爆炸力,具有可选的 radius
和 force
。\n\n6. Thing:particles(particlesName, options)
\n 启动粒子效果(例如 "explosion"
、"smoke"
、"rain"
等)。返回一个用于停止它的 ID。\n - options (table, optional)
– 可以指定偏移、颜色、持续时间等。\n\n7. Thing:stopParticles(particlesId)
\n 停止此物体上先前启动的粒子效果。省略 particlesId
以停止所有效果。\n\n---\n\n### 🏠 房间\n\n1. reset()
\n 将房间重置为其原始状态。\n\n2. goToRoom(roomName, keepSession)
\n 转到 roomName
(例如 "ownerName/roomName"
)。\n - keepSession (bool, optional)
– 如果为 true
,则如果房间共享所有者,则会保留会话数据。\n\n3. goToUser(uname)
\n 转到用户的个人资料页面。\n - 如果没有 uname
,则转到房间所有者的个人资料。\n\n4. setRoomLighting(roomLightingPreset)
\n - roomLightingPreset (string)
– "BRIGHT"
、"DIM"
或 "DARK"
。\n\n5. isOwnRoom()
\n 如果当前用户拥有此房间,则返回 true
,否则返回 false
。\n\n---\n\n### 🧠 逻辑\n\n1. wait(delayInSeconds, functionToCall)
\n 等待 delayInSeconds
后调用 functionToCall
。\n\n2. every(intervalInSeconds, functionToCall)
\n 每 intervalInSeconds
重复调用 functionToCall
。\n\n---\n\n### 💬 通信\n\n1. send(targetThing, messageName, args, delay)
\n 在可选的 delay
后调用 targetThing
上的 on<MessageName>(args)
。\n\n2. broadcast(messageName, args, delay)
\n 在可选的 delay
后调用房间内所有物体上的 on<MessageName>(args)
。\n\n---\n\n### 🛠️ 实用工具\n\n1. print(toPrint)
\n 调试打印;在屏幕上短暂显示一条消息。\n\n2. openUrl(url)
\n 在新浏览器标签页中打开 url
。\n\n3. randomPick(array)
\n 从 array
中返回一个随机元素(及其索引)。\n\n4. unixTime()
\n 返回当前 Unix 时间戳(自 1970-01-01 以来的秒数)。\n\n5. dateTime(useUtc)
\n 返回当前日期/时间为 ISO 字符串。如果 useUtc
为 true
,则使用 UTC。\n\n6. roomTime()
\n 返回自代码启动以来的秒数(每次在播放模式下重置)。\n\n7. insert(array, element)
\n 将 element
附加到 array
。\n\n8. insertAt(array, index, element)
\n 在 index
插入 element
,并移动后续元素。\n\n9. remove(array, index)
\n 移除 index
处的元素(如果未给定,则移除最后一个元素),返回移除的元素。\n\n10. Thing:enterCameraMode(options)
\n 从此物体的角度打开相机。\n - options (table, optional)
\n\n11. Thing:exitCameraMode()
\n 如果处于活动状态,则退出相机模式。\n\n---\n\n### 💼 会话\n\n1. setSessionValue(key, value)
\n 设置会话键。如果在 goToRoom
上使用 keepSession
,则会保留。页面重新加载时丢失。\n\n2. clearSessionValue(key)
\n 清除会话键。\n\n3. clearSession()
\n 清除所有会话值。\n\n4. getSessionValue(key)
\n 检索会话值(如果未设置则为 nil
)。\n\n---\n\n### 🤖 AI\n\n1. aiCharacter(primer, userText)
\n “一体化”AI 对话。如果重复调用重叠,额外的调用将不起作用。\n - primer (string, optional)
– 例如背景故事或个性。\n - userText (string, optional)
– 如果省略,用户将被提示输入文本。\n\n2. aiChatCreate(introText)
\n 创建一个新的 AI 对话,返回聊天 ID。\n\n3. aiChat(chatId, userText, callback)
\n 将用户输入发送到现有 AI 对话(通过 chatId
);调用 callback(response)
。\n\n---\n\n### ➕ 数学\n\n1. distance(x1,y1,z1, x2,y2,z2)
\n 返回 3D 距离。\n\n2. min(a,b)
/ max(a,b)
\n 返回两个数字中较小/较大的一个。\n\n3. abs(x)
、 floor(x)
、 ceil(x)
、 round(x)
\n 对 x
进行基本数学运算。\n\n4. sin(deg)
、cos(deg)
、tan(deg)
\n 以度为单位的三角函数。\n\n5. random(max)
\n 返回 [1..max]
范围内的整数。\n\n6. randomBetween(min, max)
\n 返回 [min..max]
范围内的整数。\n\n7. randomFloat()
\n 返回 [0..1)
范围内的浮点数。\n\n8. randomSeed(seed)
\n 设置 RNG 种子以获得可重复的随机序列。\n\n---\n\n### 🧵 字符串\n\n1. toLowercase(s)
/ toUppercase(s)
\n 返回 s
的小写/大写。\n\n2. substring(s, startIndex, endIndex)
\n 返回 s
的子字符串。1 基索引,包含在内。\n\n3. find(s, pattern)
\n 返回 s
中 pattern
的起始/结束索引(如果未找到,则返回 nil,nil
)。\n\n4. split(s, delimiter)
\n 按 delimiter
将 s
拆分为数组。\n\n5. join(strings, delimiter)
\n 使用 delimiter
连接字符串数组。\n\n6. replaceAll(s, pattern, replacement)
\n 将 s
中的所有 pattern
替换为 replacement
。\n\n---\n\n### 📷 照片\n\n1. sharePhoto(photo)
\n 打开照片 UI 以让用户共享 photo
对象(来自 takePhoto
)。\n\n2. Thing:instantPhoto(options)
\n 从此物体的角度拍照并直接打开共享 UI。\n - options (table, optional)
\n\n3. Thing:takePhoto(options)
\n 从此物体的角度拍照并返回照片对象。\n - options (table, optional)
\n\n---\n\n### 📔 评论\n\n1. fetchComments(callback, continuationToken)
\n 加载房间评论。加载后调用 callback(comments, token)
。\n - 每条评论都有 text
、author
、timestamp
、可能还有 photo
等。\n - continuationToken
可用于加载更多页面。\n\n2. promptForComment(callback)
\n 提示用户为房间输入文本评论。在提交时自动发送。\n - 提交后调用 callback(comment)
。\n\n---\n\n### 🎮 高分\n\n1. loadHighScores(callback)
\n 加载当前房间的最多 20 个分数。\n - callback(success, scoresArray, myScoreEntry)
\n\n2. submitHighScore(score, callback)
\n 提交用户的新数字分数。\n - 如果用户的先前分数较高,则不会被替换。\n - callback(success)
是可选的。\n\n3. deleteHighScore(callback)
\n 删除当前用户的分数。\n - callback(success)
是可选的。\n\n---\n\n### 🦄 物体(通用物体函数)\n\n1. getThing(thingName)
\n 返回一个具有 thingName
的物体(如果存在重复则为任意一个)。\n\n2. getAllThings()
\n 返回所有顶级物体的数组(不包括子物体)。\n\n3. Thing:say(msg)
\n 显示一个对话气泡。\n - msg (string or array of strings)
– 或 nil
以关闭。\n\n4. Thing:getPosition()
/ Thing:getLocalPosition()
\n 返回世界/本地空间中的 (x, y, z)
。\n\n5. Thing:getRotation()
/ Thing:getLocalRotation()
\n 返回以度为单位的旋转 (rx, ry, rz)
(世界/本地)。\n\n6. Thing:setPosition(x,y,z)
/ Thing:setLocalPosition(lx,ly,lz)
\n 立即设置位置(世界/本地)。\n\n7. Thing:setRotation(rx,ry,rz)
/ Thing:setLocalRotation(rx,ry,rz)
\n 立即设置旋转(世界/本地)。\n\n8. Thing:getCenter()
\n 返回几何中心的 (cx,cy,cz)
。\n\n9. Thing:getName()
\n 返回名称字符串。\n\n10. Thing:setTint(colorHex)
/ Thing:getTint()
\n 设置或获取物体的色调颜色(例如 "#ff0000"
)。\n\n11. Thing:startMoveTo(x,y,z,duration)
\n 在 duration
秒内平滑移动物体到 (x,y,z)
。\n\n12. Thing:stopMove()
\n 停止移动动画(startMoveTo
或 startMoveBy
)。\n\n13. Thing:setVelocity(vx,vy,vz)
\n 直接设置线速度(用于动态物理)。与 startMoveTo
/startMoveBy
不兼容。\n\n14. Thing:setSpin(vx,vy,vz)
\n 设置以度/秒为单位的角速度。也与移动动画不兼容。\n\n15. Thing:getVelocity()
/ Thing:getSpin()
\n 返回当前的线性/角速度。\n\n16. Thing:startSpin(speed, duration, axis)
\n 围绕选择的轴(X/Y/Z)进行旋转动画。\n - speed (deg/sec)
、duration (optional)
、axis (string, default "Y")
。\n\n17. Thing:stopSpin()
\n 停止 startSpin()
动画。\n\n18. Thing:startMoveBy(dx,dy,dz,duration, space)
\n 在 duration
内移动物体 (dx,dy,dz)
,可选在 "world"
、"parent"
或 "self"
空间。\n\n19. Thing:startBounce(amplitude, period, duration, uneven)
/ Thing:stopBounce()
\n 重复生长/缩小。amplitude
默认值为 0.05
,period
默认值为 0.5s
。\n\n20. Thing:startSway(amplitude, frequency, axis)
/ Thing:stopSway()
\n 左右倾斜。默认值:amplitude=30°,frequency=0.5,axis="X"。\n\n21. Thing:startSwivel(amplitude, frequency)
/ Thing:stopSwivel()
\n 围绕 Y 轴来回旋转。amplitude 默认值=30°,frequency=0.5。\n\n22. Thing:startBackAndForth(dx,dy,dz, frequency, space)
/ Thing:stopBackAndForth()
\n 沿直线来回移动物体。\n\n23. Thing:startUpAndDown(amplitude, frequency)
/ Thing:stopUpAndDown()
\n 重复上下移动物体。默认振幅=10,频率=0.5。\n\n24. Thing:startTurn(angle, duration, axis)
/ Thing:stopTurn()
\n 在 duration
时间内围绕 X/Y/Z 轴旋转 angle
度。\n\n25. Thing:startChangeScale(scale, duration, relative)
/ Thing:stopChangeScale()
\n 在 duration
时间内将比例动画化为 scale
。如果 relative
=true,则乘以当前比例。\n\n26. Thing:startChangeGlow(glow, duration)
/ Thing:stopChangeGlow()
\n 平滑地改变光辉 (0..4)
。\n\n27. Thing:applyForce(forceX, forceY, forceZ)
\n 对动态物体施加物理力。\n\n28. Thing:setText(text)
\n 设置文本(例如在标志上)。\n\n29. Thing:setMedia(mediaName)
/ Thing:getMedia()
\n 在支持媒体的物体上设置或获取媒体(图像等)。\n\n30. Thing:enableLight(enable)
/ Thing:disableLight()
/ Thing:toggleLight()
\n 控制物体的光源。\n\n31. Thing:getCloudString(varName, defaultIfNotFound)
/ Thing:setCloudString(varName, varValue)
\n 此物体上的持久字符串存储,所有用户共享。\n\n32. Thing:getCloudInt(varName, defaultIfNotFound)
/ Thing:setCloudInt(varName, varValue)
/ Thing:addToCloudInt(varName, delta)
\n 持久整数存储。addToCloudInt
在多个访问者之间是原子的。\n\n33. Thing:setPhysicsType(physicsType)
\n 更改物理类型:"kinematic"
、"upright"
、"tumbly"
、"passthrough"
、"trigger"
。\n\n34. Thing:isKinematic()
/ Thing:isDynamic()
/ Thing:getPhysicsType()
\n 检查物体的物理类型。\n\n35. Thing:getForwardDir()
/ Thing:getRightDir()
/ Thing:getUpDir()
/ Thing:getBackDir()
/ Thing:getLeftDir()
/ Thing:getDownDir()
\n 返回相对于物体局部轴的标准化方向向量。\n\n36. Thing:setFrame(frameNo)
\n 设置物体的动画帧(停止其他动画)。\n\n37. Thing:setAnimation(animMode, fps, startFrame, endFrame, pause)
\n 控制动画播放:\n - animMode
: "off"
、"loop"
、"pingpong"
、"shuffle"
或 "single"
。\n - fps (number, optional)
\n - startFrame/endFrame (numbers, optional; use -1 for last frame)
\n - pause (number, optional)
每个循环结束时暂停的帧数。\n\n38. Thing:getParent()
/ Thing:getChild(childName, recursive)
/ Thing:getChildren()
/ Thing:getDescendants()
\n 层级父/子访问。\n\n39. Thing:prompt(promptText, callback)
\n 向用户显示文本提示,然后调用 callback(answer)
。\n\n40. Thing:requestClone(options)
\n 异步克隆此物体(仅运行时)。\n - options.callback
可以在创建克隆后接收克隆等。\n\n41. Thing:requestDelete()
\n 请求删除此物体(仅运行时)。\n\n42. Thing:getOpacity()
/ Thing:setOpacity(opacity)
\n 获取/设置透明度(0=透明,1=不透明)。\n\n43. Thing:setGlow(glow)
\n 立即设置光辉强度 (0..4)
。\n\n44. Thing:setScale(scale)
/ Thing:getScale()
\n 设置或获取瞬时比例因子。\n\n---\n\n### 🎞️ 视频\n\n1. Thing:startStream(channelNumber)
\n 从此物体的视角向频道 1..4
流式传输视频。\n\n2. Thing:stopStream()
\n 停止流式传输。\n\n3. Thing:setMediaStream(channelNumber)
\n 显示指定频道的视频流(必须与另一个物体的 startStream
匹配)。\n\n---\n\n### 快捷键(编辑器/播放)\n\n*(非代码键盘快捷键)\n- 房间编辑器:Esc
切换编辑,R
旋转,WASDQE
移动物体等。\n- 模型编辑器:A/S/F/X/D
用于体素操作等。\n- 播放模式:Shift + C
打开相机。\n- 相机模式:Space
切换相机动画,A/D/Q/R
移动相机,W/S
缩放。\n\n(这些不是可调用的函数;它们只是用户键盘快捷键。)_\n\n#### 系统提示结束\n\n将此参考用于有关 Rooms.xyz 脚本 API 的所有问题。不要偏离这些记录的功能。