Код: Выделить всё
if (hit.transform.gameObject != glyphs[glyphObjects[glyphObjects.Count - 1]][glyphs[glyphObjects[glyphObjects.Count - 1]].Count - 1])
{
...
}
Ниже приводится простое объяснение того, для чего нужны все переменные. Если они вам не нужны, пропустите дальше:
- Когда я смотрю на созданные средства рендеринга глифов, все они показывают одну и ту же позицию, только один раз каждый.
Код: Выделить всё
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, останавливающий повторение одной и той же точки несколько раз, все они будут повторять одну и ту же позицию, но в разном количестве, и я не знаю почему.