为啥 For 循环返回“尝试获取 Vector3 值的长度”
Posted
技术标签:
【中文标题】为啥 For 循环返回“尝试获取 Vector3 值的长度”【英文标题】:Why Does A For Loop Return "attempt to get length of a Vector3 value"为什么 For 循环返回“尝试获取 Vector3 值的长度” 【发布时间】:2021-09-13 22:20:43 【问题描述】:我不知道这段代码有什么问题,它的字面意思是完美的 for 循环正在尝试获取 vector3 值。
local locations =
local Players = game:GetService("Players")
local function SplitString(String)
local CurrentString = ""
local x = 1
for i = 1, #String do
local FullString = string.sub(String,1,i)
local Character = string.sub(String,i,i)
local CurrentString = string.sub(String, x, i)
print(locations[1])
if Character == "," then
CurrentString = string.sub(String,x,i-1)
table.insert(locations,CurrentString)
x = i + 1
CurrentString = string.sub(String, x , i)
print(locations)
end
--Add the character to the string.
if Character == " " then
x = i + 1
CurrentString = string.sub(String, x, i + 1)
end
if #FullString + 1 == #String then
table.insert(locations, CurrentString)
end
end
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(char)
local humanoidrootpart = char:WaitForChild("HumanoidRootPart")
wait(5)
while humanoidrootpart do
local location = humanoidrootpart.position
print(location)
SplitString(location)
print(locations[1])
local RoundLocatX = math.floor(locations[1]*50)/50
local RoundLocatZ = math.floor(locations[3]*50)/50
local RoundLocatXLength = RoundLocatX.length
local RoundLocatZLength = RoundLocatZ.length
if RoundLocatX > 50 then
print('hi')
end
wait(1)
end
end)
end)
这是错误:
ServerScriptService.Terrain Generation:9: attempt to get length of a Vector3 value
我会在 roblox 论坛上发布这个,但他们很愚蠢,需要一些愚蠢的阅读时间才能在上面发布。
【问题讨论】:
【参考方案1】:你的错误指向这一行:
for i = 1, #String do
并说您正在尝试获取 Vector3 对象的长度。这意味着#String
没有按预期工作。所以看看你传递给SplitString
函数的对象......
local location = humanoidrootpart.position
print(location)
SplitString(location)
您的 location
变量是 Vector3,而不是字符串,并且它不支持长度运算符 #
。
但是您不必将其解析为字符串即可从中获取值。由于它是Vector3,因此您可以简单地索引其中的不同值。
local location = humanoidrootpart.Position
local RoundLocatX = math.floor(location.X * 50) / 50
local RoundLocatZ = math.floor(location.Z * 50) / 50
【讨论】:
如何索引其中的值? 将我的最后一个代码块与您的原始代码进行比较。location
不是从数组中索引值,而是一个对象,其值存储在索引 X
、Y
和 Z
以上是关于为啥 For 循环返回“尝试获取 Vector3 值的长度”的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 For 循环在 EJS 节点 js 中只返回一个值?
java for循环 判断条件为空时 构造方法为啥不需要返回值
为啥我在这个 for 循环中无法读取未定义的属性“startsWith”?