Список внутри словаря, повторяющий один и тот же элемент бесконечноC#

Место общения программистов C#
Anonymous
Список внутри словаря, повторяющий один и тот же элемент бесконечно

Сообщение Anonymous »

Примечание. Кто-то в первой итерации этого вопроса сказал, что CheckForMagicPoint() вызывается в каждом кадре, но это не так, поскольку для checkForMagicPoints устанавливается значение true только тогда, когда кто-то использует волшебное перо, и даже если бы он вызывался в каждом кадре, теперь это было бы проблематично, поскольку теперь он добавляет элемент в список только в том случае, если raycast достигает точки магического обнаружения, и одну и ту же точку магического обнаружения нельзя добавить дважды из-за следующей строки кода:

Код: Выделить всё

if (hit.transform.gameObject != glyphs[glyphObjects[glyphObjects.Count - 1]][glyphs[glyphObjects[glyphObjects.Count - 1]].Count - 1])
{
...
}
Я пытаюсь создать волшебную систему для своей VR-игры, используя точки в шестиугольной сетке, но прежде чем заставить волшебную систему работать, мне нужно визуализировать нарисованные глифы, но рендеринг не работает. У меня нет ошибок, поэтому я не знаю, что я сделал не так.
Ниже приводится простое объяснение того, для чего нужны все переменные, если они вам не нужны, пропустите дальше:
  • глифы; Словарь, содержащий все списки магических точек с соответствующим средством визуализации глифа в качестве ключа.
  • castPoint; Преобразование, в котором перо передает лучи из
  • checkingForMagicPoints; Логическая переменная, для которой установлено значение true, когда игрок использует волшебное перо, и наоборот. Используется для проверки if каждого кадра.
  • lineRenderer; Средство визуализации линий, определенное в редакторе и используемое для первоначальной визуализации лучей с помощью пера
  • rayPoints; Точки визуализатора raycast от пера.
  • glyphObjects; Список всех созданных префабов глифов
  • glyphPrefab; Префаб, определенный в редакторе. Просто пустой игровой объект, за исключением компонента рендеринга строк, используемого для рендеринга глифов.
Это мой текущий код:

Код: Выделить всё

using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.XR.Interaction.Toolkit;
using UnityEngine.XR.Interaction.Toolkit.Interactors;

public class magicPen : MonoBehaviour
{
private Dictionary glyphs = new Dictionary();
public Transform castPoint;
private bool checkingForMagicPoints = false;
public LineRenderer lineRenderer;
private Vector3[] rayPoints;
private List glyphObjects = new List();
public GameObject glyphPrefab;

//create an action to be referenced in the editor
public void setCheckingState(bool state)
{
//set the checkingForMagicPoints variable to the declared bool
checkingForMagicPoints = state;

//check the new state of checkingForMagicPoints
if (checkingForMagicPoints)
{
//instantiate a new visual glyph when you start pressing the magic pen
GameObject newGlyph = Instantiate(glyphPrefab);

//add that new glyph visualizer into the glyphobjects list
glyphObjects.Add(newGlyph);

//Add the new glyph renderer into the glyphs list as the key, with the corresponding list of points as the stored data
glyphs.Add(newGlyph, new List());
}
}

public void CheckForMagicPoint()
{
//use this type to gain info from raycasts
RaycastHit hit;
//define the layer that we want the raycast to hit
int layer = 3;
//change it into a form that the raycast can read
int layerMask = 1  go != null).Select(go => go.transform.position).ToArray());
}
}
}

}

Когда я смотрю на созданные средства рендеринга глифов, все они показывают одну и ту же позицию, только один раз каждый.
Если я удалю оператор if, останавливающий повторение одной и той же точки несколько раз, все они будут повторять одну и ту же позицию, но в разном количестве, и я не знаю почему.

Вернуться в «C#»