Suche…


Einführung

Mit der Cursor-Komponente können wir durch Klicken und Betrachten mit Entitäten interagieren.

Syntax

  • <a-entity Cursor = ""> </ a-Cursor>
  • <a-Cursor> </ a-Cursor>

Parameter

Eigentum Beschreibung
Sicherung Gibt an, ob der Cursor auf einer Sicherung basiert. Standardwert: " false auf dem Desktop, " true auf dem Handy
fuseTimeout Wartezeit (in Millisekunden) bis zum Auslösen eines Sicherungs-Klickereignisses. Standardwert: 1500

Bemerkungen

Der Cursor ist eine spezifische Anwendung der Raycaster-Komponente

  • Hört auf Mausklicks und blickbasierte Sicherungen
  • Erfasst nur die erste durchschnittene Entität
  • Gibt spezielle Maus- und Hover-Ereignisse aus (z. B. in Bezug auf Maus runter / runter / Enter / Verlassen)
  • Hat mehr Zustände zum Schweben.

Wenn Sie mit der Maus klicken, wird die nächstliegende sichtbare Entität, die den Cursor überschneidet (sofern vorhanden), ein Klickereignis ausgeben. Beachten Sie, dass die Cursor-Komponente nur das Raycasting-Verhalten anwendet. Um dem Cursor eine Form oder ein Aussehen zu verleihen, können Sie die Geometrie- und Materialkomponenten anwenden.


Veranstaltungen

Veranstaltung Beschreibung
klicken Wird sowohl auf den Cursor als auch auf die überlappende Entität gesendet, wenn auf eine aktuell überlappende Entität geklickt wird (entweder mit der Maus oder mit einer Sicherung).
Verschmelzen Wird sowohl für den Cursor als auch für die geschnittene Entität ausgegeben, wenn der auf der Sicherung basierende Cursor mit dem Countdown beginnt.
Maus nach unten Wird sowohl auf dem Cursor als auch auf der durchschnittenen Entität (falls vorhanden) bei Mausedown im Zeichenflächenelement gesendet.
Mouseenter Wird sowohl auf den Cursor als auch auf die geschnittene Entität gesendet (sofern vorhanden), wenn der Cursor eine Entität kreuzt.
mouseleave Wird sowohl auf dem Cursor als auch auf der geschnittenen Entität (falls vorhanden) ausgegeben, wenn der Cursor sich nicht mehr mit der zuvor verschobenen Entität schneidet.
Mouseup Wird sowohl auf dem Cursor als auch auf dem überlappenden Element (falls vorhanden) beim Mouseup auf dem Zeichenelement ausgegeben.

Standardcursor

Zum Beispiel können wir einen ringförmigen Cursor erstellen, der in der Mitte des Bildschirms fixiert ist. Um den Cursor so auf dem Bildschirm zu fixieren, dass er immer sichtbar ist, egal wo wir hinschauen, platzieren wir ihn als Kind der aktiven Kameraeinheit. Wir ziehen es vor die Kamera, indem wir es auf der negativen Z-Achse platzieren. Wenn der Cursor auf die Box klickt, können wir das Klickereignis anhören.

<a-entity camera>
  <a-entity cursor="fuse: true; fuseTimeout: 500"
            position="0 0 -1"
            geometry="primitive: ring; radiusInner: 0.02; radiusOuter: 0.03"
            material="color: black; shader: flat">
  </a-entity>
</a-entity>

<a-entity id="box" cursor-listener geometry="primitive: box" material="color: blue">
</a-entity>
// Component to change to random color on click.
AFRAME.registerComponent('cursor-listener', {
  init: function () {
    var COLORS = ['red', 'green', 'blue'];
    this.el.addEventListener('click', function (evt) {
      var randomIndex = Math.floor(Math.random() * COLORS.length);
      this.setAttribute('material', 'color', COLORS[randomIndex]);
      console.log('I was clicked at: ', evt.detail.intersection.point);
    });
  }
});

Blickbasierte Interaktionen mit der Cursor-Komponente

Wir werden zuerst auf blickbasierte Interaktionen eingehen. Blickbasierte Interaktionen sind darauf angewiesen, dass wir den Kopf drehen und Objekte betrachten, um mit ihnen zu interagieren. Diese Art der Interaktion gilt für Headsets ohne Controller. Selbst bei einem Nur-Rotations-Controller (Daydream, GearVR) ist die Interaktion immer noch ähnlich. Da A-Frame standardmäßig Steuerelemente zum Ziehen per Mauszugriff bietet, kann die Blickrichtung auf dem Desktop verwendet werden, um eine Vorschau der Interaktion durch Ziehen der Kameradrehung anzuzeigen.

Um eine blickbasierte Interaktion hinzuzufügen, müssen Sie eine Komponente hinzufügen oder implementieren. A-Frame wird mit einer Cursor-Komponente geliefert, die eine blickbasierte Interaktion ermöglicht, wenn sie mit der Kamera verbunden ist:

  1. Entität explizit definieren. Zuvor hatte A-Frame die Standardkamera bereitgestellt.
  2. Fügen Sie unter dem Kameraobjekt a-cursor Element als untergeordnetes Element hinzu.
  3. Konfigurieren Sie optional den vom Cursor verwendeten Raycaster.
<a-scene>
  <a-camera>
    <a-cursor></a-cursor>
    <!-- Or <a-entity cursor></a-entity> -->
  </a-camera>
</a-scene>

ein Cursor-Primitiv

Das Cursor-Grundelement ist ein Fadenkreuz, das das Klicken und grundlegende Interaktivität mit einer Szene auf Geräten ohne Handcontroller ermöglicht. Das Standardaussehen ist eine Ringgeometrie. Der Cursor wird normalerweise als untergeordnetes Element der Kamera platziert.

<a-scene>
  <a-camera>
    <a-cursor></a-cursor>
  </a-camera>
  <a-box></a-box>
</a-scene>

Sicherungsbasierter Cursor

Wird auch als blickbasierter Cursor bezeichnet. Wenn wir den Cursor auf fuse-basiert setzen, löst der Cursor einen Klick aus, wenn der Benutzer eine bestimmte Zeit lang auf eine Entität blickt. Stellen Sie sich einen Laser vor, der am Kopf des Benutzers befestigt ist, und der Laser ragt in die Szene hinein. Wenn der Benutzer lange genug auf eine Entität starrt (z. B. fuseTimeout), wird der Cursor einen Klick auslösen.

Der Vorteil der auf Sicherungen basierenden Interaktionen für VR besteht darin, dass keine zusätzlichen Eingabegeräte außer dem Headset erforderlich sind. Der fuse-basierte Cursor ist hauptsächlich für Google Cardboard-Anwendungen gedacht. Der Nachteil von auf Sicherungen basierenden Interaktionen besteht darin, dass der Benutzer den Kopf viel drehen muss.

Konfigurieren des Cursors über die Raycaster-Komponente

Der Cursor baut auf der Raycaster-Komponente auf und ist davon abhängig. Wenn Sie die Raycasting-Teile des Cursors anpassen möchten, können Sie die Eigenschaften der Raycaster-Komponente ändern. Angenommen, wir möchten eine maximale Entfernung festlegen, weniger häufig nach Schnittpunkten suchen und festlegen, welche Objekte anklickbar sind:

<a-entity cursor raycaster="far: 20; interval: 1000; objects: .clickable"></a-entity>

Visuelles Feedback hinzufügen

Um dem Cursor visuelles Feedback hinzuzufügen, um anzuzeigen, wenn der Cursor klickt oder verschmilzt, können wir das Animationssystem verwenden. Wenn der Cursor die Entität schneidet, wird ein Ereignis ausgegeben und das Animationssystem nimmt das Ereignis mit dem begin-Attribut auf:

<a-entity cursor="fuse: true; fuseTimeout: 500"
          position="0 0 -1"
          geometry="primitive: ring"
          material="color: black; shader: flat">
  <a-animation begin="click" easing="ease-in" attribute="scale"
               fill="backwards" from="0.1 0.1 0.1" to="1 1 1"></a-animation>
  <a-animation begin="cursor-fusing" easing="ease-in" attribute="scale"
               fill="forwards" from="1 1 1" to="0.1 0.1 0.1"></a-animation>
</a-entity>

Mauszeiger

Hinweis: Für dieses Beispiel müssen Sie ein externes npm-Paket hinzufügen.

Wenn Sie einen Mauszeiger Ihres Computers verwenden möchten, müssen Sie eine aframe-mouse-cursor-component hinzufügen. Danach müssen Sie das Skript mit diesem Code einschließen:

import 'aframe';
import 'aframe-mouse-cursor-component';

// or this 

require('aframe');
require('aframe-mouse-cursor-component');

Auf Ihrer Kamera müssen Sie die mouse-cursor Komponente hinzufügen.

<a-scene>
  <a-entity camera look-controls mouse-cursor>
</a-scene>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow