2019年10月9日
プログラミング
背景を変更してシーンを切り替える【これからはじめるReact360】


はじめに
フロントエンドデザイナーのやまかわです。今回はReact360での背景の切り替えの実装についてご紹介します。
以前の記事では環境構築と動画を背景にする方法についてご紹介しました。
おさらいしたい方はこちらの記事をご覧ください。
画像の用意
今回は画面上にボタンを配置し、そのボタンがクリックされると背景画像が切り替わるという機能の実装をしていきます。
最初に360度画像を2枚用意しました。
こちらの2枚をボタンを押すことで交互に表示を切り替えます。
素材に関しては、前回同様 static_assets
ディレクトリに入れておきます。
client.jsの実装
画像の配置が完了したら、最初に表示する360度画像をclient.js内で指定します。
client.js
function init(bundle, parent, options = {}) {
const r360 = new ReactInstance(bundle, parent, {
// Add custom options here
fullScreen: true,
...options,
});
// Render your app content to the default cylinder surface
r360.renderToSurface(
r360.createRoot('bagelee_contents', { /* initial props */ }),
r360.getDefaultSurface()
);
// Load the initial environment
r360.compositor.setBackground(r360.getAssetURL('scene1.jpg'));
}
window.React360 = {init};
このうちソースの下の方にある、
r360.compositor.setBackground(r360.getAssetURL('scene1.jpg'));
に注目します。
react-360 init
した状態ですでにデフォルトの背景画像が指定されていますが、そのソースの部分を用意した画像のパスに変更します。この状態で一度確認をすると画像が切り替わっているのが確認できるかと思います。
index.jsの実装
次にindex.jsに画像を切り替えるためのロジックを記述していきます。
##### index.js
import React from 'react';
import {
AppRegistry,
StyleSheet,
Text,
VrButton,
Environment,
asset,
} from 'react-360';
export default class bagelee_contents extends React.Component {
constructor(props) {
super(props)
this.state = {
scene: 1,
}
}
onClick = () => {
if (this.state.scene === 1) {
this.setState({ scene: 2 })
Environment.setBackgroundImage(asset('scene2.jpg'))
} else {
this.setState({ scene: 1 })
Environment.setBackgroundImage(asset('scene1.jpg'))
}
}
render() {
return (
<VrButton style={styles.greetingBox} onClick={this.onClick}>
<Text style={styles.greeting}>
Click to change scene!
</Text>
</VrButton>
);
}
};
いくつか新しいコンポーネントや関数が出てきましたので解説します。
VrButtonコンポーネント
VR空間上にボタンを配置することができるコンポーネントです。使い方は通常のwebのボタンと同じく、onClick
イベントに処理を渡すことでイベントを発動することができます。
Environment
背景画像や背景動画の設定や削除を行うためのものです。今回使用したsetBackgroundImage()
は背景画像を指定するときに使用する関数です。
assets()
static_assets
配下のアセットを参照するときに使用する関数です。よくEnvironment
とセットで使用することが多いです。
処理のながれ
処理の流れについてはまず現在のシーンの情報を判断するためのstateであるsceneを
作成し、scene1であることを示す1
を格納しておきます。VrButton
のクリック時にそのstateをみて現在のシーンが1なのか2なのかを判断します。
1だったら次のシーンであるシーン2の画像を、2だったらその逆であるシーン1の画像をEnviroment.setBackgroundImage()
を使って背景画像の設定をします。
出来上がったものがこちらになります。
まとめ
React360の背景画像を変更する処理の実装についてご紹介しました。
処理を一つ一つ紐解いてみてみると意外にも中身はシンプルな構造になっていることがわかります。
このようにReact360では、WebのReactと同様にstateやpropsを管理しながら複雑なVRサービスを構築していくことができます。UIについても今回はVR空間上に作成をしましたが、VR空間の上に2DのUIを重ねる実装をすることも可能です。
次回はそちらの実装についてご紹介したいと思います。
React360のお仕事に関するご相談
Bageleeの運営会社、palanではReact360に関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
1
0
関連記事

2019年12月17日
3D空間上に2DのUIを重ねる【これからはじめるReact360】

2019年12月10日
React360でのレイアウトについて【これからはじめるReact360】

2019年10月9日
背景を変更してシーンを切り替える【これからはじめるReact360】

2018年12月22日
360度動画を背景にする【これからはじめるReact 360】

2018年12月8日
【これからはじめるReact 360】 まずは環境構築
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。

kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya

aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!