Я делаю игру на основе сетки.Для этого мне нужно отладить определенные фишки, например, там, где происходит столкновение и куда игрок целится.Я создал класс отладчика, который рисует квадратную сетку в позиции, используя цвет.
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);
}
}
В настоящее время у класса есть два пользователя:
[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
Я зацикливаю каждый коллайдер и рисую красный квадрат в каждой позиции.В GridMeleeWeapon
я просто рисую синий квадрат, к которому стремится игрок.
Проблема в том, что каждый квадрат рисуется с цветом, используемым в CollisionSystem
, то есть красным.При рисовании синих квадратов в GridMeleeWeapon
они становятся красными.Если я удаляю debugger.Debug(worldPos, Color.Red)
в CollisionSystem
, квадраты, которые я рисую из GridMeleeWeapon
, отображаются синим цветом.
С текущим кодом я не могу рисовать сетки разных цветов.Я думаю, что происходит, что цвет, указанный первым абонентом, используется для последовательных вызовов, даже если цвет материала изменился, но почему я понятия не имею.
Как правильно установить цвет?