万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Unity Advent Calendar 2012 12日目 Title:「GoKit実践 シーン4. Path Tween」

URL: http://atnd.org/events/34621

またまた万年素人の僕の番が回って来ました。

今日は引き続きGoKitのシーン「4. Path Tween」します。

なんと、Hierarchyが少し多い!

今まで通り気にするのは「ui」だけと思ったが、「LookTarget」も気にしなければならないと思う。
さらに、「Cubeの子にCylinder(円柱)があるもの」も気にするべき

「Cubeの子にCylinder(円柱)があるもの」は戦車に見せたてたいのかもしれません。(以下”戦車”と呼ぶ)
↓これが横から観たスクリーンショットです。

Inspectorにはこのようになってます。

Cube・・・戦車のTransform
LookTarget・・・・Sphare(球)のTransform

です。

肝心のPathTweenGUIを呼んでみると短い!!
・PathTweenGUI.cs

using UnityEngine;
using System.Collections;

public class PathTweenGUI : BaseDemoGUI
{
    public Transform cube;
    public Transform optionalLookTarget;
    
    void Start ()
    {
        
        // example showing how to create a GoVector3Path from a saved file that was made with the visual editor. Note: the web player cannot load files from
        // disk so we will make a path directly for it
#if !UNITY_WEBPLAYER
        var path = new GoSpline ("demoRoute");
#else
        // alternatively, paths can be created from an array of Vector3s
        var vectors = new Vector3[] { new Vector3( 0, 1, 1 ), new Vector3( 4, 5, 6 ) };
        var path = new GoSpline( vectors );
#endif
        
        
        // create the Tween and set the path to be relative (this will make the cube move BY the values stored in the
        // path instead of TO them). autoRemoveOnComplete is also set to false so that the Tween stays in the GoKit
        // engine and we can start/stop/reset it at will using the playback controls
        //_tween = Go.to( cube, 4f, new TweenConfig().positionPath( path, true ).setIterations( -1, LoopType.PingPong ) );
        
        // optionally, the target can be set to look at the next path node
        //_tween = Go.to( cube, 4f, new TweenConfig().positionPath( path, true, LookAtType.NextPathNode ).setIterations( -1, LoopType.PingPong ) );
        
        // or the target can be set to look at another transform
        _tween = Go.to (cube, 4f, new TweenConfig ()
            .positionPath (path, true, LookAtType.TargetTransform, optionalLookTarget)
            .setIterations (-1, LoopType.PingPong));
    }
}

まずこれが重要だと思う

        _tween = Go.to (cube, 4f, new TweenConfig ()
            .positionPath (path, true, LookAtType.TargetTransform, optionalLookTarget)
            .setIterations (-1, LoopType.PingPong));

戦車がTargetを見ることを行っているはず。
LookAtTypeは今回「TargetTransform」だが、「None」と「NextPathNode」があった。
これでターゲットの方向を見てくれるんだと思う

↓常に見てるスクリーンショット

「NextPathNode」はよくわからなかった。

pathはファイルを指定している
これが実際に戦車の動く経路だと思います。
一番重要かも?

#if !UNITY_WEBPLAYER
        var path = new GoSpline ("demoRoute");
#else
        // alternatively, paths can be created from an array of Vector3s
        var vectors = new Vector3[] { new Vector3( 0, 1, 1 ), new Vector3( 4, 5, 6 ) };
        var path = new GoSpline( vectors );
#endif

ブラウザで見るUnity Web Playerでは"なけ"れば、new GoSpline ("demoRoute")を使ってる。
Unity Web Playerで"あれ"ば、Vector3でパス作ってますねw

ちなみに、GoSplineクラスは「GoSpline.cs」に書かれてありました

スニペットを記載してみますと、それぞれのプラットフォームでファイルの参照先を切り替えていた。

Android

jarPath.Combine ("jar:file://" + Application.dataPath + "!/assets/", pathAssetName);

iOS

Path.Combine (Path.Combine (Application.dataPath, "Raw"), pathAssetName);

・その他

Path.Combine (Path.Combine (Application.dataPath, "StreamingAssets"), pathAssetName);

なディレクトリにある「demoRoute」を参照していた。


コミュニティでやたらと見かけるAndeeeeさん作成のCRSpline(「Catmull-Romスプライン」と呼ぶらしい)っぽい。
ベジエ曲線ライブラリのスクリプト」だと書いてある。
URL: http://forum.unity3d.com/threads/32954-Waypoints-and-constant-variable-speed-problems?p=213942&viewfull=1#post213942

「StreamingAssets」ってなんだ?って思った

拡張子見たら、〜.assetでした。どうやって作るのか?

> cd /Users/sugita/GoKit/Assets/StreamingAssets 
> ls
demoRoute.asset            horseShoeSpline.asset
demoRoute.asset.meta       horseShoeSpline.asset.meta

テラシュールウェアさんが書いてました。
URL: http://terasur.blog.fc2.com/blog-entry-266.html


次は、最後の「5. Shake Variants」シーンだね。
多分また僕の番。

GoKit終えたら、NGUIのAtlas作成のツールのハックやろっかな?

Catmull-Romスプラインについて何かわかったら書きます。
そもそもこのファイルどうやって作るのかも分からないので・・。