Список внутри словаря, повторяющий один и тот же элемент бесконечно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-игры, используя точки в шестиугольной сетке, но прежде чем заставить волшебную систему работать, мне нужно визуализировать нарисованные глифы, но рендеринг не работает. У меня нет ошибок, поэтому я не знаю, что я сделал не так.
Ниже приводится простое объяснение того, для чего нужны все переменные. Если они вам не нужны, пропустите дальше:
  • Код: Выделить всё

    glyphs; Словарь, содержащий все списки магических точек, с соответствующим средством визуализации глифа в качестве ключа.
    
    [*]castPoint; Преобразование, из которого выполняется лучевая передача пера
    
    [*]checkingForMagicPoints; Логическая переменная, для которой установлено значение true, когда игрок использует волшебное перо, и наоборот. Используется для проверки if каждого кадра.
    
    [*]lineRenderer; Средство рендеринга линий, определенное в редакторе и используемое для первоначальной визуализации лучей с помощью пера.
    
    [*]rayPoints; Точки визуализатора raycast от пера.
    
    [*]glyphObjects; Список всех созданных префабов глифов
    
    [*]glyphPrefab; Префаб, определенный в редакторе.  Просто пустой игровой объект, за исключением компонента рендеринга строк, используемого для рендеринга глифов.
    
    [/list]
    Это мой текущий код:
    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#»