Unity 中的二维数组梯度生成
2D Array Gradient Generation in Unity
我对编程还很陌生,我正在尝试编写一个函数来生成自定义大小 [x,y] 的二维数组,并逐渐用 0 到 1 之间的值填充它,创建一些东西square/rectangular 渐变。
像这样:https://i.stack.imgur.com/MWHrv.png
例如:
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.6][0.6][0.6][0.6][0.6][0.8][1.0]
[1.0][0.8][0.6][0.6][0.6][0.6][0.6][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
目前我一直在尝试为 16x9 阵列执行此操作,但它必须可用于 100x100+ 阵列。
花了很多时间,但没有成功,所以我希望有人能提供帮助。
我得到的最接近的是
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
然后是很多奇怪的组合。
双循环中的代码应该类似于
var xValue = Math.Abs(x * 2f - xSize) / xSize
var yValue = Math.Abs(y * 2f - ySize) / ySize
var value = Math.Max(xValue, yValue);
即我们计算到中心的归一化距离,从边缘的 1 到中心的零。对 x 和 y-coordinates 做同样的事情,取最大值。请注意,此代码未优化,如果这是一个问题,您可以将一些计算移到循环之外。
我对编程还很陌生,我正在尝试编写一个函数来生成自定义大小 [x,y] 的二维数组,并逐渐用 0 到 1 之间的值填充它,创建一些东西square/rectangular 渐变。 像这样:https://i.stack.imgur.com/MWHrv.png
例如:
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.6][0.6][0.6][0.6][0.6][0.8][1.0]
[1.0][0.8][0.6][0.6][0.6][0.6][0.6][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
目前我一直在尝试为 16x9 阵列执行此操作,但它必须可用于 100x100+ 阵列。 花了很多时间,但没有成功,所以我希望有人能提供帮助。 我得到的最接近的是
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][0.8][1.0]
[1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0][1.0]
然后是很多奇怪的组合。
双循环中的代码应该类似于
var xValue = Math.Abs(x * 2f - xSize) / xSize
var yValue = Math.Abs(y * 2f - ySize) / ySize
var value = Math.Max(xValue, yValue);
即我们计算到中心的归一化距离,从边缘的 1 到中心的零。对 x 和 y-coordinates 做同样的事情,取最大值。请注意,此代码未优化,如果这是一个问题,您可以将一些计算移到循环之外。