unityでuniSWFを使って2D Guiを作った時のメモ

unityでuniSWFを利用しようとして、
2D guiを作ろうとしたにサンプルを動かそうとして、少しはまったのでメモ。

unityでswfを利用する際に大きく2種類ある訳ですが、
1. 3D objectとして利用(3D空間に配置して、カメラ位置/向き等の影響を受ける)
2. 2D objectとして利用(2D空間に配置して、カメラの影響を受けない)
1の場合は普通に配置すればOKでビルボードの設定なども簡単にプロパティからできるので問題ないが、2がちょっと面倒だった。

2を実現するには、CameraのProjectionが「Orthographic」である必要があり、Main Cameが「Perspective」か「Orthographic」かでやり方が変わる。

Main Cameraが「Projection: Orthographic」の場合

1. Main Cameraに「Menu: Component」->「uniSWF」->「MovieClipOverlayCameraBehaviour」を追加
2. Script を以下のように書き、Main Cameraに追加し、実行する

#pragma strict

import pumpkin.events;
import pumpkin.display;
import MovieClipOverlayCameraBehaviour;

var stage:Stage;

function Start () {
    if( MovieClipOverlayCameraBehaviour.instance == null ) {
        return;
    }

    // assign stage reference
    stage = MovieClipOverlayCameraBehaviour.instance.stage;

    // create menu clip
    var btn:MovieClip =new MovieClip( "uniSWF/Examples/Tutorial 02 - Basic button script/swf/Tut02-ButtonAsset.swf:btn_ui" ) ;
    btn.x = 420;
    btn.y = 300;
    btn.gotoAndStop(1);
    btn.mouseChildrenEnabled = false;

    // event listeners
    btn.addEventListener( MouseEvent.CLICK, onButtonClick);
    btn.addEventListener( MouseEvent.MOUSE_ENTER, onButtonEnter);
    btn.addEventListener( MouseEvent.MOUSE_LEAVE, onButtonLeave);

    // add menu clip to stage
    stage.addChild(btn);
}
function onButtonClick(e:MouseEvent):void {
    print("Btn Clicked - Do Something Cool");
}

function onButtonEnter(e:MouseEvent):void {
    var m:MovieClip = e.currentTarget as MovieClip;
    m.gotoAndStop(2);
}

function onButtonLeave(e:MouseEvent):void {
    var m:MovieClip = e.currentTarget as MovieClip;
    m.gotoAndStop(1);
}

function Update () {
}

Main Cameraが「Projection: Perspective」の場合

1. Sub Cameraを作り、Projection: Orthographic を設定する。GUILayer, Flare Layer, Audio Listener は消してOK。
2.「MovieClipOverlayCameraBehaviour」を継承したクラスを作る。(以下)
3. 作成したScriptを Sub Cameraに追加し、実行する。

#pragma strict

import pumpkin.events;
import pumpkin.display;

public class uniswf_j1 extends MovieClipOverlayCameraBehaviour {
  function OnStart () {

    // create menu clip
    var btn:MovieClip =new MovieClip( "uniSWF/Examples/Tutorial 02 - Basic button script/swf/Tut02-ButtonAsset.swf:btn_ui" ) ;
    btn.x = 420;
    btn.y = 300;
    btn.gotoAndStop(1);
    btn.mouseChildrenEnabled = false;

     // event listeners
    btn.addEventListener( MouseEvent.CLICK, onButtonClick);
    btn.addEventListener( MouseEvent.MOUSE_ENTER, onButtonEnter);
    btn.addEventListener( MouseEvent.MOUSE_LEAVE, onButtonLeave);

     // add btn clip to stage
    stage.addChild(btn);
  }

  /* Button Actions */

  function onButtonClick(e:MouseEvent):void {
    print("MOUSE CLICK");
  }

  function onButtonEnter(e:MouseEvent):void {
    var m:MovieClip = e.currentTarget as MovieClip;
    m.gotoAndStop(2);
  }

  function onButtonLeave(e:MouseEvent):void {
    var m:MovieClip = e.currentTarget as MovieClip;
    m.gotoAndStop(1);
  }
}

なんか、unityのjavascriptで継承のやり方が分からなかったり、メソッド名が少し変わったり、面倒だったけど参考になれば。

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>