Play Xcode : SceneKitで遊ぼう!

space_1430990597

SceneKitを使えばXcodeでも3Dが扱えるようになりましたので遊んでみましょう!

遊んだシステム構成

Xcode : ver.6.3.1
Language : Objective-C
Device : iPhone5s / iOS 8.3

プロジェクトファイルの作成

まずは、プロジェクトファイルを作っていきます

20150507_001

Create New Xcode projectを選ぶ

20150507_002

Gameを選んで「Next」

20150507_003

Product Nameを決める

LanguagehaObjective-C

Game Technologyは「SceneKit」を選んで「Next」

保存先を決めて「Create」

20150507_004

プロジェクトファイルができました。

何も考えずに実行。

20150507_005

触ったり、タップしたり、フリックしたりしてちょっと遊んでみてください。

ワクワクしませんか!?

モデルを用意するのは大変ですが、こんなに簡単にXcode上で3D表示できてしまうんですよ!

ソースコードを改造して遊んじゃいましょう!

このプロジェクトファイルのソースコードを改造して、ちょっとカッコよくしてきます。

縦から横表示へ

縦表示なんてカッコ悪いので強制横表示です。

20150507_006

General → portaitのチェックを外す

20150507_007

いいですね!

回転を止める

勝手にぐるぐる回っているので停止させます。

20150507_008

42〜46行あたりをコメントアウト

タップ動作を無効化

機体をタップすると赤く点滅する機能を停止させます。

20150507_009

63〜68行あたりをコメントアウト

機体の向きを変える

機体がこちらを向いていても仕方がないので、反対側(180°)回転させます。

    // Ship Rotation 180
    SCNNode *ship = [scene.rootNode childNodeWithName:@"ship" recursively:YES];
    ship.rotation = SCNVector4Make(0, 1, 0, M_PI);

– (void)viewDidLoadの最後の行に入れる。

20150507_010

アフターバーナーみたい! 古い?^^;

パーティクルを追加して臨場感を出す

これでは、当たり前ですがなんだかわかりません。

次は宇宙空間を飛んでいるような臨場感をだします。

パーティクルSceneの追加

20150507_011

New Fileを選択

20150508_012

Resource → SceneKitParticle System → Next

20150508_013

Starsを選択してNext

20150508_014

シーン名「stars」に決めてCreate

Starsの設定値を変更する

20150508_015

パーティクルをSceneに追加する

    // Stars Particle
    SCNParticleSystem *starsParticle = [SCNParticleSystem particleSystemNamed:@"stars.scnp" inDirectory:nil];
    [scene addParticleSystem:starsParticle withTransform:SCNMatrix4MakeTranslation(0, 0, -30)];

これで改造は終了

グリグリ遊ぶ

Runしてみましょう!

下の動画のようになります。

うまくいきましたでしょうか?

もっともっとパーティクルを追加して楽しんじゃってください。

ソースコード

- (void)viewDidLoad
{
    [super viewDidLoad];

    // create a new scene
    SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/ship.dae"];

    // create and add a camera to the scene
    SCNNode *cameraNode = [SCNNode node];
    cameraNode.camera = [SCNCamera camera];
    [scene.rootNode addChildNode:cameraNode];

    // place the camera
    cameraNode.position = SCNVector3Make(0, 0, 15);

    // create and add a light to the scene
    SCNNode *lightNode = [SCNNode node];
    lightNode.light = [SCNLight light];
    lightNode.light.type = SCNLightTypeOmni;
    lightNode.position = SCNVector3Make(0, 10, 10);
    [scene.rootNode addChildNode:lightNode];

    // create and add an ambient light to the scene
    SCNNode *ambientLightNode = [SCNNode node];
    ambientLightNode.light = [SCNLight light];
    ambientLightNode.light.type = SCNLightTypeAmbient;
    ambientLightNode.light.color = [UIColor darkGrayColor];
    [scene.rootNode addChildNode:ambientLightNode];

//    // retrieve the ship node
//    SCNNode *ship = [scene.rootNode childNodeWithName:@"ship" recursively:YES];
//
//    // animate the 3d object
//    [ship runAction:[SCNAction repeatActionForever:[SCNAction rotateByX:0 y:2 z:0 duration:1]]];

    // retrieve the SCNView
    SCNView *scnView = (SCNView *)self.view;

    // set the scene to the view
    scnView.scene = scene;

    // allows the user to manipulate the camera
    scnView.allowsCameraControl = YES;

    // show statistics such as fps and timing information
    scnView.showsStatistics = YES;

    // configure the view
    scnView.backgroundColor = [UIColor blackColor];

//    // add a tap gesture recognizer
//    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
//    NSMutableArray *gestureRecognizers = [NSMutableArray array];
//    [gestureRecognizers addObject:tapGesture];
//    [gestureRecognizers addObjectsFromArray:scnView.gestureRecognizers];
//    scnView.gestureRecognizers = gestureRecognizers;

    // Ship Rotation 180
    SCNNode *ship = [scene.rootNode childNodeWithName:@"ship" recursively:YES];
    ship.rotation = SCNVector4Make(0, 1, 0, M_PI);

    // Stars Particle
    SCNParticleSystem *starsParticle = [SCNParticleSystem particleSystemNamed:@"stars.scnp" inDirectory:nil];
    [scene addParticleSystem:starsParticle withTransform:SCNMatrix4MakeTranslation(0, 0, -30)];

}

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする

スポンサーリンク