Skip to content
This repository has been archived by the owner on Dec 26, 2018. It is now read-only.

[prior to 3.0] 01 XMLシーングラフ

Yuya Matsuo edited this page Aug 14, 2018 · 2 revisions

Meganekkoでは、VRシーンをXMLで記述します。XMLファイルはリソースとしてres/xml/以下に配置します。

XMLはルート要素として<scene>を持ちます。

<scene>

</scene>

この中に、描画したいオブジェクトごとに<object>要素を作ります。以下はres/layout/hello_worldのViewを前方5.0の距離に、横 x 縦が 1.0 x 1.0 の大きさで描画する記述です。奥方向はZ軸の負の方向なので、z="-5.0"と指定します。

<scene>
    <object
        id="@+id/myObject"
        texture="@layout/hello_world"
        width="1.0"
        height="1.0"
        z="-5.0" />
</scene>

drawableリソースを描画することもできます。

<scene>
    <object
        id="@+id/myObject"
        texture="@drawable/ic_launcher"
        width="0.5"
        height="0.5"
        y="1.0"
        z="-5.0" />
</scene>

drawableやlayoutを描画する際、width,heightを省略すると描画サイズから必要なwidth,heightを逆算して自動的に設定します。

<scene>
    <object
        texture="@drawable/ic_launcher"
        y="1.0"
        z="-5.0" />

    <object
        texture="@layout/hello_world"
        x="2.0"
        y="-1.5"
        z="-4.0" />
</scene>

オブジェクトは入れ子(ネスト)にすることができます。その場合、子要素のオブジェクトは親要素のオブジェクトの座標変換を引き継ぎます。

<scene>
    <!-- Objects can be nested -->
    <object
        id="@+id/myObject"
        layout="@layout/hello_world"
        width="1.0"
        height="1.0"
        z="-5.0">

        <object
            id="@+id/leftObject"
            texture="@drawable/ic_launcher"
            width="1.0"
            height="1.0"
            x="-3.0" />

        <object
            id="@+id/upperObject"
            texture="@drawable/ic_launcher"
            width="1.0"
            height="1.0"
            y="3.0" />
    </view>
</scene>

シーンの設定

XMLシーンを作成してres/xml/内に配置したら、MeganekkoAppを継承したクラスのsetSceneFromXMLを呼び出すことでシーンが描画されるようになります。

public class MyApp extends MeganekkoApp {
    public MyApp(Meganekko meganekko) {
        super(meganekko);
        setSceneFromXML(R.xml.scene);
    }
}

シーン内のオブジェクトをプログラムから操作するには、Scene.findObjectByIdSceneObjectを取得します。

public class MyApp extends MeganekkoApp {
    public MyApp(Meganekko meganekko) {
        super(meganekko);
        setSceneFromXML(R.xml.scene);
        SceneObject myObject = getScene().findObjectById(R.id.myObject);
    }
}

シーンとシーンオブジェクトについての詳細はこちら

Clone this wiki locally