FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【Unity】オブジェクトをふにゃふにゃ動かすのに、iTweenPath使ったんだぜぇ~ ワイルドだr(自粛 

    おはようございます。
    本日は昼まで祝日とは知りませんでした。テヘ
    曜日感覚とかやばくなってきました。坂内です。
    みなさんはハロウィンはっちゃけました?
    俺は家でゲームしてました。
    誰だよハロウィンとか広めたの!ちょっと前まで、コンビニとかでちょっとお菓子がハロウィン用になるくらいだったのに、最近わけーのもいい年のもはっちゃけすぎだろ!落ち着けお前ら!
    とまぁ 苦言を一つ。

    本日はiTweenPathを初めて使ったので、そのことについてちょちょっと書いてみます。

    まずはこちらで「iTween Visual Editor」をインストールします。

    もちろんタダ。タダ、これ最強也。

    この時すでにiTweenを単体で入れていた場合、「iTweenクラスかぶってんぞ おぃ!」って怒られるので気を付けてください。

    ここにiTweenクラスは入ってます。(ちなみに俺はここのiTweenを残しました)

    あとはもう簡単!
    適当なオブジェクトを作って、それにiTweenPathをつけます。

    実際の使い方は以下の通り。

    iTweenPathのNodeCountがPathになる座標です。
    こちら10個まで設定できるようです。
    座標を好きに移動させて、こんな動きのパスを作ってみました。

    あとは、コードで動かす感じですね。

    TestITweenPathっていうクラス作って、iTweenPathをつけたオブジェクトにつけました。
    using UnityEngine;
    using System.Collections;

    public class TestITweenPath : MonoBehaviour {
    public GameObject sphere;
    // Use this for initialization
    void Start () {
    Hashtable hash = new Hashtable();
    hash.Add("path",iTweenPath.GetPath("TestPath"));
    hash.Add("time",5f);
    hash.Add("easetype",iTween.EaseType.linear);
    iTween.MoveTo(sphere,hash);
    }
    }

    で、玉(Sphere)を1個作って、こちらのsphereにアサインしときます。
    あ、Pathの名前は「TestPath」にしました。

    これ、ちゃんとパス通りに動きますよ!
    すごいね!
    やったね!

    しかしだ、1点問題がありまして。
    複数回同じPathを取得するとエラーが出ます。
    普通に複数回上記のコードで流す分にはいいのですが、InstantiateしたオブジェクトにてiTweenPathを行った際の問題(?)です。


    先ほどのiTweenPathをつけたオブジェクトと、玉を1つのオブジェクトに突っ込んで、Prefab化します。
    「TestITweenPath」クラスを以下のように修正しておきます。
    これで、ボールの動きが終わったら丸々Destroyするようにします。
    using UnityEngine;
    using System.Collections;

    public class TestITweenPath : MonoBehaviour {
    public GameObject sphere;

    void Start () {
    Hashtable hash = new Hashtable();
    hash.Add("path",iTweenPath.GetPath("TestPath"));
    hash.Add("time",5f);
    hash.Add("easetype",iTween.EaseType.linear);
    hash.Add("oncompletetarget",gameObject);
    hash.Add("oncomplete","EndPath");
    iTween.MoveTo(sphere,hash);
    }

    public void EndPath(){
    Destroy(gameObject);
    }
    }


    で、ボタンを用意し、ボタンを押すことで上記オブジェクトが出てくるようにします。

    これで実行をすると、ボタンを押すと玉が出てきて、Path通りに動き、最後には消えます。
    そこで、もう一度ボタンを押したところ、以下のようなエラーが発生しました。
    ArgumentException: An element with the same key already exists in the dictionary.
    System.Collections.Generic.Dictionary`2[System.String,iTweenPath].Add (System.String key, .iTweenPath value)
    (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/
    Dictionary.cs:404)
    iTweenPath.OnEnable () (at Assets/iTweenEditor/iTweenPath.cs:17)
    UnityEngine.Object:Instantiate(Object)
    PathTest2:StartPath() (at Assets/Scripts/PathTest2.cs:8)
    UnityEngine.EventSystems.EventSystem:Update()

    なんかDictionaryに同じキーが入ってるよーってエラーぽいですね。
    まったく同じPathを取得するときにエラーがでてるのかな?
    ってことで、次のようにすると動くようになりました。

    using UnityEngine;
    using System.Collections;

    public class TestITweenPath : MonoBehaviour {
    public GameObject sphere;

    void Start () {
    Hashtable hash = new Hashtable();
    hash.Add("path",iTweenPath.GetPath("TestPath"));
    hash.Add("time",5f);
    hash.Add("easetype",iTween.EaseType.linear);
    hash.Add("oncompletetarget",gameObject);
    hash.Add("oncomplete","EndPath");
    iTween.MoveTo(sphere,hash);
    }

    public void EndPath(){
    iTweenPath.paths.Clear();
    Destroy(gameObject);
    }
    }


    これ追加しました ⇒ iTweenPath.paths.Clear();
    iTweenPath.pathsをクリアーしてやりました。

    ってお話でしたと。

    では アデュ~ノシ

    Category: 開発日記(Unity)

    Tag: Unity  iTween 
    tb 0 : cm 0   

    【Unity】Unity&Orthelloによる2Dゲーム作成⑤ 

    はいはーい 月曜の坂内っす。

    ちょっとしたOrthelloを使用した時のコツを。

    普通のオブジェクトの場合、iTweenを使用することで簡単に透明度を変更できます。
    透明度を1⇒0⇒1と繰り返すことで、オブジェクトの点滅を実装することができます。

    cubeというオブジェクトを作成し、マテリアルを張ります。
    透過が可能なShaderを指定します。
    そして、以下のコード書くことでcubeオブジェクトの点滅が可能になります。
    void Start(){
    GameObject cube = GameObject.Find("cube");
    iTween.ColorTo(cube,iTween.Hash("a",0,"looptype","pingpong","time",2f));
    }

    上記コードの説明をしますと、「cubeオブジェクトの色要素 a (アルファは透過度)を2秒かけて0にする。
    0になったら今度は2秒かけて1にする(pingpongによって動作を繰り返す)」となります。

    これで簡単に点滅が可能です。

    しかし!BUT!!!
    OrthelloSpriteは上記と同じことを行うとエラーがでてしまいます。
    Material doesn't have a color property '_Color'
    UnityEngine.Material:GetColor(String)
    iTween:GenerateColorToTargets() (at Assets/iTween/Plugins/iTween.cs:3338)
    iTween:GenerateTargets() (at Assets/iTween/Plugins/iTween.cs:3144)
    iTween:TweenStart() (at Assets/iTween/Plugins/iTween.cs:4603)
    c__Iterator7:MoveNext() (at Assets/iTween/Plugins/iTween.cs:6567)

    ナゼカ?

    エラーをみると、Colorプロパティが無いといわれます。
    そう、OrthelloSpriteではShaderが「mobile/Particles/Alpha Blended」になるため、Colorプロパティが存在しないからです。

    しかし、よく見るとOTSpriteの中に「Alpha」というプロパティが存在します。


    これを0⇒1⇒0とすることで、点滅を実装することが可能です。

    では、どのようにこれをいじるのか?

    iTweenのメソッドには「ValueTo」というものが用意されています。
    これは、値をaからbにするというもので、使い方は以下のように使います(たぶん)。
    void Start(){
    GameObject cube = GameObject.Find("cube");
    iTween.ValueTo(gameObject,iTween.Hash("from",0,"to",1,
             "time",2f,"onupdate","ValueChange"));
    }

    void ValueChange(float value){
    print (value);
    }
    0から1まで2秒かけて変わる。


    となります。
    これを踏まえて、以下のようにコードを書けば・・・・
    using UnityEngine;
    using System.Collections;

    [ExecuteInEditMode]
    public class Test : MonoBehaviour {

    OTSprite cubeSprite;

    void Start(){
    cubeSprite = GameObject.Find("cube").GetComponent();
    iTween.ValueTo(gameObject,iTween.Hash("from",0,"to",1,"time",2f,
    "looptype","pingpong","onupdate","ValueChange"));
    }

    void ValueChange(float value){
    cubeSprite.alpha = value;
    }
    }

    こんな感じで、OrthelloのSpriteを点滅することができます。

    以上!なにかのお役に立てたらこれ幸い。

    Category: 開発日記(Unity)

    Thread: 日記

    Janre: 日記

    Tag: Android  Unity  Orthello  ゲーム  Sprite  iTween 
    tb 0 : cm 0   

    【Unity】Unity&Orthelloによる2Dゲーム作成② 

    月曜担当の坂内です。暑い日が続いています。
    倒れないように水分はこまm(ry

    ええと、Orthelloによる2Dゲーム作成第2弾ということで、
    Spriteの移動について簡単に書いていきたいと思います。

    Unityにおける、オブジェクトの基本的な移動は以下になります。

    ◆オブジェクトに必ずついている、Transformコンポーネントのposition
     の値を変更する。
     
     ●gameObject.transform.Translate(new Vector3(1,1,0));
      Translateという命令で引数のVector3方面への移動。
      上記の例だと、x方向に1、y方向に1進めという意味。
     ●gameObject.transform.position = new Vector3(100,0,10);
      transformpositionにVector3の位置を代入。
      gameObjectの場所をVector3の位置に移動。
     などの方法で移動させます。
     
    ◆オブジェクトについている、Rigidbodyコンポーネントに力を加える。
     ●gameObject.rigidbody.AddForce(new Vector3(10,5,1));
      rigidbodyにVector3の力を加える。
     他
     
    となります。

    次に、iTweenを使った、移動方法をば。

    iTweenの基本的な使い方は以下になります。

    iTween.MoveTo(オブジェクト,iTween.Hash(ほにゃらら));
    iTween.MoveFrom(オブジェクト,iTween.Hash(ほにゃらら));
    ◆iTween.MoveAdd(オブジェクト,iTween.Hash(ほにゃらら));
    など。

    ほにゃららのところには直接iTween.Hash()を書く方法と、
    HashTableを作成して書く方法があります。

    (testという名のオブジェクトを移動する場合)

    void Update () {
    // スペースキーをおしたよ.
    if(Input.GetButtonUp("Jump")){
    Hashtable hash = new Hashtable ();
    hash.Add("x",50f);           //①
    hash.Add("time",1f);          //②
    hash.Add("easetype",iTween.EaseType.easeInOutBack); //③
    iTween.MoveAdd(GameObject.Find("test"),hash); //④
    }
    }




    void Update () {
    // スペースキーをおしたよ.
    if(Input.GetButtonUp("Jump")){
    iTween.MoveAdd(GameObject.Find("test")
          ,iTween.Hash("x",50f,"time",1f,"easetype"
          ,iTween.EaseType.easeInOutBack));
    }
    }



    ①移動する座標をx座標50として指定。
    ②移動する時間を1秒として指定。
    ③移動する際の動き方をeaseInOutBackとして指定。
     他にもいろいろな動き方があります。
    ④MoveAddにて、上記の動きを追加。
     MoveAdd Hashの動きを追加。
     MoveTo Hashの場所へ移動。
     MoveFrom Hashの場所から今の場所へ移動。(?)
    という感じで使用できます。

    この際、注意として、Orthelloを使用していると、transformpositionとは別に、
    OTSpriteのpositionが存在しています。
    移動した際には、iTweenまたはtransformでの移動後に、以下のコードを追加しないと
    うまく動かない場合があります!(動く時とうまく動かない時の違いがわからない・・・)

    OT.Sprite("オブジェクト名").position = オブジェクト.transform.position;

    以上でUnityにおけるオブジェクトの動き方メモ終了!!

    さぁ、これでゲーム作成に1歩近づきましたね!

    (使い方間違えている等の指摘ありましたらお願いします!)

    Category: 開発日記(Unity)

    Thread: 日記

    Janre: 日記

    Tag: iTween  Orthello  Android  ゲーム  2Dゲーム  Unity  transform  position  Rigidbody 
    tb 0 : cm 0   

    【Unity】Unity&Orthelloによる2Dゲーム作成① 

    はい、こんにちわ!坂内です。
    現在Unityで2Dゲーム作成中です!

    元はJavaにて作成していたのですが、
    UnityでもAndroid2Dゲームが作成できるということで、
    こちらに移行してみました。

    まだまだ勉強中ですが、自分メモ的に書いていこうと思います。
    使用Frameworkは「Orthello」と「iTween」です!
    と、いうことで、今回はOrthelloの使い方をちょこっと。

    以下設定は、スマホ横ゲームでの設定になります。

    Orthelloの初期設定】
    ①Gameウィンドウのサイズを、854x480に変えておく
    ②Assetストアで、OrthelloをIMPORT
    ③「Orthello」⇒「Objects」⇒「OT」をHierarchyに追加
    20130812_1.png


    ④Hierarchyの「OT」⇒「View」を選択し、Inspectorから以下の値に設定
     Always Pixel Perfect ⇒ チェック
     Pixel Perfect Resolution ⇒ x : 854
      y : 480
     Custom Size ⇒ 240
    20130812_2.png


    ここまでで、基本の設定は終わりです。

    次に使用する絵の設定です。

    まずはAtlasを作成します。
    私はこのAtlas作成には「TexturePackerGUI」というツールを使用しています。
    TexturePackerGUIの使用方法はまたの機会で・・・

    【絵のオブジェクトを表示】
    TexturePackerで作成した、Atlasファイル(png)と、xmlファイル(構成表?)を
     適当なフォルダに突っ込みます
     あ、xmlファイルは、cocos2Dのフォーマットでお願いします。
    20130812_3.png

    ②「Orthello」⇒「Objects」⇒「Sprites」⇒「SpriteAtlas」⇒「SpriteAtlas-Cocos2D」
     をHierarchyに追加
    20130812_4.png

    ③②で追加したSpriteAtlas-Cocos2DのInspectorにて、Textureとして、①で配置したAtlasファイルを選択します
    20130812_6.png


    ④「Orthello」⇒「Objects」⇒「Sprites」⇒「Sprite」をHierarchyに追加
    ⑤④で追加したSpriteのInspectorの、「Sprite Container」に③で設定したAtlasを指定します
    20130812_7.png

    これで絵を表示することが可能になります!
    アニメーションを行う場合は、Spriteの代わりにAnimationSpriteを使用します。
    Animationについては、次回書こうと思います!

    今日はこんな感じ!アニメーション・iTweenでの移動に関してはまた今度です!

    簡単に絵を表示することが可能です!
    あとは、センス!誰かセンス下さい!
    あと、絵書いてくれる方募集です m(_ _)m

    ってことで、本日は終了っす!Orthelloによる2Dゲーム作成ネタとして
    いいネタあるかた是非友達になりましょう!

    Category: 開発日記(Unity)

    Thread: 日記

    Janre: 日記

    Tag: Java  2Dゲーム  ゲーム  Android  Orthello  iTween  Texture 
    tb 0 : cm 0