gpt4 book ai didi

c# - 使用不同颜色的 Material 绘制网格

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:21 24 4
gpt4 key购买 nike

我正在制作一个基于网格的游戏。为此,我需要调试某些图 block ,例如发生碰撞的位置和玩家瞄准的位置。我制作了一个调试器类,它使用颜色在某个位置绘制方形网格。

public class GridDebugger : MonoBehaviour {

[SerializeField] private float alpha;

private Mesh mesh;
private Material mat;

void Start() {
mat = new Material(Shader.Find("Sprites/Default"));
mesh = new Mesh();
mesh.vertices = new Vector3[] { new Vector3(.5f, .5f, 0), new Vector3(.5f, -.5f), new Vector3(-.5f, -.5f), new Vector3(-.5f, .5f) };
mesh.triangles = new int[] { 0, 1, 2, 2, 3, 0 };
}

public void Debug(Vector3 position, Color color) {
color.a = alpha;
mat.color = color;
Graphics.DrawMesh(mesh, position, Quaternion.identity, mat, 0);
}
}

目前类(class)有两个用户:

[RequireComponent(typeof(GridDebugger))]
public class CollisionSystem : GridSystem {
private List<Node>[,] grid;
private GridDebugger debugger;

void Awake() {
debugger = GetComponent<GridDebugger>();
}

//Logic....

void Update() {
if (grid != null) {
for (int x = 0; x < grid.GetLength(0); x++) {
for (int y = 0; y < grid.GetLength(1); y++) {
if (grid[x, y] != null) {
for (int i = 0; i < grid[x, y].Count; i++) {
if (grid[x,y][i].Parent.Debug) {
Vector3 worldPos = GridToWorldPos(new Vector2Int(x, y), grid.GetLength(0), grid.GetLength(1));
worldPos.z = -0.0001f;
debugger.Debug(worldPos, Color.Red);
}
}
}
}
}
}
}
}

public class GridMeleeWeapon : MonoBehaviour {
private GridDebugger debugger;

void Awake() {
debugger = FindObjectOfType<GridDebugger>();
}

public void Aim(Vector2 dir) {
Vector3 position = transform.position + dir;
debugger.Debug(position, Color.blue);
}
}

CollisionSystem 中,我循环每个碰撞器并在每个位置绘制一个红色方 block 。在 GridMeleeWeapon 中,我只是在玩家瞄准的地方画了一个蓝色方 block 。

问题是每个正方形都是用 CollisionSystem 中使用的颜色绘制的,即红色。在 GridMeleeWeapon 中绘制蓝色方 block 时,它们会变成红色。如果我在 CollisionSystem 中删除 debugger.Debug(worldPos, Color.Red),我从 GridMeleeWeapon 绘制的方 block 将显示为蓝色。

使用当前代码,我似乎无法绘制不同颜色的网格。我认为正在发生的事情是,第一个调用者指定的颜色用于连续调用,即使 Material 的颜色发生了变化,但我不知道为什么。

如何正确设置颜色?

最佳答案

Unity 3D 中的 Material 是一种引用类型。

GridMeleeWeaponCollisionSystem 中的代码使用相同的 GridDebugger 实例和 Material 。发生的事情是,由于您更改了 Material 颜色 OnUpdate(),它会立即(每一帧)在使用此 Material 的每个对象上将颜色从蓝色更改为红色。

不是将颜色传递给您的 debugger().Debug() 方法,而是传递具有不同颜色的 Material 。例如,创建一种红色 Material 和另一种蓝色 Material 。使用这些 Material 来设置颜色。

关于c# - 使用不同颜色的 Material 绘制网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com