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