サーチ…


前書き

A-Frameは、 <a-entity>要素を介してエンティティを表します。エンティティコンポーネントシステムパターンで定義されているように、エンティティは、外観、動作、および機能を提供するためにコンポーネントをプラグインするプレースホルダオブジェクトです。

構文

  • <a-entity> // Consider the entity below. By itself, it has no appearance, behavior, or functionality. It does nothing:
  • <a-entity geometry="primitive: box" material="color: red"> // We can attach components to it to make it render something or do something. To give it shape and appearance, we can attach the geometry and material components:
  • <a-entity geometry="primitive: box" material="color: red" light="type: point; intensity: 2.0"> // Or to make it emit light, we can further attach the light component:

パラメーター

パラメータ詳細
コンポーネント <a-entity>.componentsは、エンティティに接続されたコンポーネントのオブジェクトです。これにより、各コンポーネントのデータ、状態、メソッドなど、エンティティのコンポーネントにアクセスすることができます。
isPlaying エンティティがアクティブかどうかを示します。エンティティを一時停止すると、isPlayingはfalseになります。
オブジェクト3D <a-entity>.object3Dは、エンティティのthree.js Object3D表現への参照です。より具体的には、object3DはTHREE.Groupオブジェクトであり、カメラ、メッシュ、ライト、サウンドなどのさまざまな種類のTHREE.Object3D含むことができます。
オブジェクト3DMap エンティティのobject3DMapは、コンポーネントが設定したさまざまな種類のTHREE.Object3D(カメラ、メッシュ、ライト、サウンドなど)にアクセスできるオブジェクトです。
シーンE1 エンティティは、そのscene要素への参照を持ちます。

備考

方法


addState(stateName)

addStateは状態をエンティティにプッシュします。これによりstateaddedイベントが発生し、 .isを使用して状態canを確認することができます。

entity.addEventListener('stateadded', function (evt) {
  if (evt.detail.state === 'selected') {
    console.log('Entity now selected!');
  }
});
entity.addState('selected');
entity.is('selected');  // >> true

エミット(名前、詳細、泡)

emitはエンティティでカスタムDOMイベントを発行します。たとえば、アニメーションをトリガするイベントを発生させることができます。

<a-entity>
  <a-animation attribute="rotation" begin="rotate" to="0 360 0"></a-animation>
</a-entity>
entity.emit('rotate');

イベントの詳細やデータを2番目の引数として渡すこともできます。

entity.emit('collide', { target: collidingEntity });

このイベントはデフォルトでバブルになります。私たちはバブルのためにfalseを渡すことによってバブルしないように伝えることができます:

entity.emit('sink', null, false);

flushToDOM(再帰的)

flushToDOMは、エンティティのコンポーネントのデータを手動でシリアル化し、DOMを更新します。


getAttribute(componentName)

getAttributeは、解析されたコンポーネントデータ(ミックスインとデフォルトを含む)を取得します。

// <a-entity geometry="primitive: box; width: 3">
entity.getAttribute('geometry');
// >> {primitive: "box", depth: 2, height: 2, translate: "0 0 0", width: 3, ...}
entity.getAttribute('geometry').primitive;
// >> "box"
entity.getAttribute('geometry').height;
// >> 2
entity.getAttribute('position');
// >> {x: 0, y: 0, z: 0}

componentNameが登録されたコンポーネントの名前でない場合、getAttributeは通常どおり動作します。

// <a-entity data-position="0 1 1">
entity.getAttribute('data-position');
// >> "0 1 1"

getDOMAttribute(componentName)

getDOMAttributeは、DOMまたはsetAttributeによって明示的に定義された解析済みコンポーネントデータのみを取得します。 componentNameが登録されたコンポーネントの名前である場合、 getDOMAttributeは、HTMLで定義されたコンポーネントデータのみを解析されたオブジェクトとして返します。コンポーネントのgetDOMAttributeは、返されたコンポーネントデータに適用されたmixinsまたはデフォルト値が含まれていないため、 getAttributeの部分形式です。

上記のgetAttributeの例の出力を比較してください:

// <a-entity geometry="primitive: box; width: 3">
entity.getDOMAttribute('geometry');
// >> { primitive: "box", width: 3 }
entity.getDOMAttribute('geometry').primitive;
// >> "box"
entity.getDOMAttribute('geometry').height;
// >> undefined
entity.getDOMAttribute('position');
// >> undefined

getObject3D(タイプ)

getObject3Dは object3DMap上のタイプで参照される子THREE.Object3Dを検索します。

AFRAME.registerComponent('example-mesh', {
  init: function () {
     var el = this.el;
     el.getOrCreateObject3D('mesh', THREE.Mesh);
     el.getObject3D('mesh');  // Returns THREE.Mesh that was just created.
  }
});

getOrCreateObject3D(型、コンストラクタ)

エンティティタイプの下に登録THREE.Object3Dを持っていない場合は、getOrCreateObject3Dは、渡されたコンストラクタを使用してインスタンス化THREE.Object3Dを登録します。エンティティがTHREE.Object3D で登録されている場合、 getOrCreateObject3DgetObject3Dとして動作します。

AFRAME.registerComponent('example-geometry', {
  update: function () {
    var mesh = this.el.getOrCreateObject3D('mesh', THREE.Mesh);
    mesh.geometry = new THREE.Geometry();
  }
});

一時停止()

pause()は、アニメーションやコンポーネントで定義された動的な動作を停止します。エンティティを一時停止すると、アニメーションが停止し、各コンポーネントでComponent.pause()が呼び出されます。コンポーネントは、ポーズ時に何が起こるかを実装することを決定します。これは、しばしばイベントリスナを削除します。エンティティは、エンティティを一時停止するときに、その子エンティティに対してpause()を呼び出します。

// <a-entity id="spinning-jumping-ball">
entity.pause();

たとえば、一時停止時のlook-controlsコンポーネントは、入力を待機するイベントハンドラを削除します。


遊びます ()

play()は、アニメーションやコンポーネントで定義された動的動作を開始します。これは、DOMがエンティティをアタッチするときに自動的に呼び出されます。エンティティがplay()すると、エンティティはその子エンティティに対してplay()を呼び出します。

entity.pause();
entity.play();

たとえば、再生中のサウンドコンポーネントがサウンドの再生を開始します。


setAttribute(componentName、value、[propertyValue | clobber])

componentNameが登録されたコンポーネントの名前でない場合、またはコンポーネントが単一のプロパティーコンポーネントである場合、 setAttributeは通常どおり動作します。

entity.setAttribute('visible', false);

componentNameが登録されたコンポーネントの名前であれば、値の特殊な解析を処理することがあります。たとえば、 位置コンポーネントは単一のプロパティーコンポーネントですが、プロパティータイプのパーサーではオブジェクトを取得できます。

entity.setAttribute('position', { x: 1, y: 2, z: 3 });

setObject3D(type、obj)

setObject3Dは、渡されたobjTHREE.Object3Dを 、エンティティのobject3DMapの下のとして登録します。 A-Frameは、エンティティのルートオブジェクト3Dの子としてobjを追加します。

AFRAME.registerComponent('example-orthogonal-camera', {
  update: function () {
    this.el.setObject3D('camera', new THREE.OrthogonalCamera());
  }
});

removeAttribute(componentName、propertyName)

componentNameが登録されたコンポーネントの名前であり、DOMから属性を削除すると同時に、 removeAttributeは、コンポーネントのremoveライフサイクルメソッドを呼び出して、そのコンポーネントをエンティティからデタッチします。

entity.removeAttribute('goemetry');  // Detach the geometry component.
entity.removeAttribute('sound');  // Detach the sound component.

propertyNameが指定されている場合、 removeAttributeはpropertyNameで指定されたプロパティのプロパティ値をプロパティのデフォルト値にリセットします。

entity.setAttribute('material', 'color', 'blue');  // The color is blue.
entity.removeAttribute('material', 'color');  // Reset the color to the default value, white.

removeObject3D(タイプ)

removeObject3Dは、 typeで指定されたオブジェクトをエンティティのTHREE.Groupから、したがってシーンから削除します。これは、エンティティのobject3DMapを更新し、 タイプキーの値をnullに設定します 。これは一般的にコンポーネントから呼び出されます。多くの場合、removeハンドラ内にあります。

AFRAME.registerComponent('example-light', {
  update: function () {
    this.el.setObject3D('light', new THREE.Light());
    // Light is now part of the scene.
    // object3DMap.light is now a THREE.Light() object.
  },
  remove: function () {
    this.el.removeObject3D('light');
    // Light is now removed from the scene.
    // object3DMap.light is now null.
  }
});

removeState(stateName)

removeStateはエンティティから状態をポップします。これにより、 stateremovedイベントが発生し、状態を確認することができます.is

entity.addEventListener('stateremoved', function (evt) {
  if (evt.detail.state === 'selected') {
    console.log('Entity no longer selected.');
  }
});
entity.addState('selected');
entity.is('selected');  // >> true
entity.removeState('selected');
entity.is('selected');  // >> false

イベント

イベント名説明
子供が付いた 子エンティティがエンティティに追加されました。
幼児 子エンティティがエンティティから切り離されました。
コンポーネントが変更された エンティティのコンポーネントの1つが変更されました。
componentinit エンティティのコンポーネントの1つが初期化されました。
コンポーネントが削除されました エンティティのコンポーネントの1つが削除されました。
ロードされた エンティティは、そのコンポーネントをアタッチして初期化しています。
object3dset THREE.Object3Dは、setObject3D(name)を使用してエンティティに設定されました。イベントの詳細には、object3DMapに設定するための名前が含まれます。
一時停止する エンティティは動的な動作の点で非アクティブで一時停止しています。
遊びます エンティティは現在アクティブであり、動的な振る舞いに関して再生しています。
国営 エンティティは新しい状態を受け取りました。
stateremoved エンティティはもはや特定の状態を持たない。
スキーマチャレンジ コンポーネントのスキーマが変更されました。

イベントの詳細

以下は、各イベントのイベントの詳細です。

イベント名プロパティ説明
子供が付いた エル添付された子要素への参照。
コンポーネントが変更された データが変更されたコンポーネントの名前。
id データが変更されたコンポーネントのID。
newData コンポーネントの新しいデータ(変更後)。
oldData コンポーネントが変更される前のコンポーネントの以前のデータ
コンポーネント初期化 初期化されたコンポーネントの名前。
id データが変更されたコンポーネントのID。
データコンポーネントデータ。
コンポーネントが削除されました 削除されたコンポーネントの名前。
id 削除されたコンポーネントのID。
国営 状態接続された状態(文字列)。
stateremoved 状態分離された状態(文字列)。
スキーマチャレンジ 成分スキーマが変更されたコンポーネントの名前。

コンポーネントの変更をリッスンする

componentchangedイベントを使用して、エンティティの変更をリッスンすることができます。

entity.addEventListener('componentchanged', function (evt) {
  if (evt.detail.name === 'position') {
    console.log('Entity has moved from', 
      evt.detail.oldData, 'to', evt.detail.newData, '!');
  }
});

着脱される子要素のリスニング

チャイルドアタッチさ れたイベントとチャイルドデタッチされたイベントを使用して、シーンがエンティティをアタッチまたはデタッチするときに聴くことができます。

entity.addEventListener('child-attached', function (evt) {
  if (evt.detail.el.tagName.toLowerCase() === 'a-box') {
    console.log('a box element has been attached');
  };
});

エンティティ複数プロパティコンポーネントデータ(setAttribute)

複数のプロパティのコンポーネントデータの更新

マルチ性成分のためのコンポーネントデータを更新するために、我々はcomponentとして登録コンポーネントの名前を渡し、およびなどのプロパティのオブジェクトを渡すことができます。文字列も受け入れ可能です(例:type:spot; distance:30 )が、オブジェクトはA-Frameを解析する際の作業を節約します:

// Only the properties passed in the object will be overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
});

またはマルチ性コンポーネントの個々のプロパティを更新するために、我々はcomponent、第二引数として、プロパティ名、および3番目の引数として設定するプロパティの値として登録コンポーネントの名前を渡すことができます。

// All previous properties for the material component (besides the color)  will be unaffected.
entity.setAttribute('material', 'color', 'crimson');

配列プロパティの型は一意的に動作することに注意してください。

  • 配列は変更可能です。それらは参照によって割り当てられるので、配列の変更はコンポーネントによって可視になります。
  • 配列型のプロパティを更新しても、コンポーネントのupdateメソッドやイベントは発生しません。

複数のプロパティのコンポーネントデータの更新

trueが3番目の引数として.setAttributeに渡された場合、指定されていないプロパティはリセットされ、clobberedされます。

// All previous properties for the light component will be removed and overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
}, true);

エンティティの取得

DOM APIを使用してエンティティを取得するだけで済みます。

<a-entity id="mario"></a-entity>
var el = document.querySelector('#mario');

エンティティコンポーネントの取得

たとえば、エンティティのthree.jsカメラオブジェクトまたはマテリアルオブジェクトを取得したい場合、そのコンポーネントに到達することができます

var camera = document.querySelector('a-entity[camera]').components.camera.camera;
var material = document.querySelector('a-entity[material]').components.material.material;

あるいは、コンポーネントがAPIを公開している場合、そのメソッドを呼び出すことができます:

document.querySelector('a-entity[sound]').components.sound.pause();


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow