Deca-pod.jp

Anything

ゲーム制作その2:エフェクトの表示

前回はキャラクタの表示と簡単なアクションの実行の実装方法を確認しました。
今回はエフェクトの表示方法を試してみます。
具体的には、キャラクタがダメージを受けた時に表示される数字(エフェクト)をコントロールしてみましょう。

流れは以下
テキストオブジェクトを作成
テキストオブジェクトの動きを制御するスクリプトを作成
任意のタイミングで任意の位置にテキストオブジェクトを作成/表示

その他
テキストのぼやけを解消する
http://www.clrmemory.com/unity/text-mesh-blur/

早速取り掛かります。

1.テキストオブジェクトの作成
空のGameObjectを作成します。
TextMeshコンポーネントとRigidbody2Dコンポーネントをアタッチします。

2.テキストオブジェクトの動きを制御するスクリプトを作成
参考:http://satoukibi.hatenablog.com/entry/2017/02/25/Unity_%E3%81%A7%E3%83%80%E3%83%A1%E3%83%BC%E3%82%B8UI%E3%82%92%E4%BD%9C%E3%82%8B%282D%29

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DamageTextSCR : MonoBehaviour {

// Use this for initialization
void Start()
{
GetComponent().AddForce(new Vector3(Random.Range(-80, 80), Random.Range(100, 180), 0));
StartCoroutine(DestroyObject());
}

private IEnumerator DestroyObject()
{
yield return new WaitForSeconds(0.6f);
Destroy(this.gameObject);
}
}

3.任意のタイミングで任意の位置にテキストオブジェクトを作成/表示
スクリプト内で1.で作成したオブジェクトを取得してInstantiateします。

//ダメージオブジェクト表示

public GameObject damageText;
Instantiate(damageText, this.transform.position, Quaternion.identity).GetComponent().text = amount.ToString();

youtu.be

ダメージエフェクトがポップされました。

ゲーム制作その1

皆さんゲームはお好きですか?
私は大好きです。

きっと誰もが一度は「こんなゲームあったら面白そう!」なんて事を考えたことがあるのではないでしょうか?
私もまたその一人です。

思い立ったが吉日。
とりあえず作ってみることにしました。

ゲームの概要は以下

ロマサガ
MTG(magic the gathring)
・vainglory

特に私の好きな3つのゲームからエッセンスを抜きだしてみます。
具体的には、

・好きなキャラクタでパーティを組む
・好きな装備を身に着けて対戦する

こんな感じです。
面白そうですね。


不足分は都度補っていきます。

Realm1.0入門 with Xcode7.3

iOSアプリ開発時、DB選択肢のひとつとして挙がるのがRealm

国内でのコミュニティも活発で、初心者でも取っ付き易い雰囲気があります。

当然realmでweb検索すると、情報は山程出てきますが、objc時代の名残を引きずったTipsが多くあり、 私自身迷ってしまう事がありました。

そこで、2016/June現在最新の手順をここに記します。


cocoapodsをインストール

easyramble.com

cocoapods

ターミナルから、Xcodeプロジェクトのディレクトリへ移動をして

pod init

上記コマンドでcocoapods設定ファイルを作成します。 f:id:vaikong:20160612222021p:plain 作成されたpod fileを書き換えます。

# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

target 'プロジェクト名' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  pod 'RealmSwift'
end

その後ターミナル上で

pod install

コマンドでRealmをインストールします。 cocoa podsのバージョンが古いとRealmのインストールに失敗するので注意してください。

再度Xcodeのプロジェクトディレクトリへ移動するとプロジェクト名.xcworkspaceというファイルが作成されています。 f:id:vaikong:20160612222250p:plain

作成されたワークスペースXcodeで開きます。

プロジェクトを開いたら、Realmの動作確認のため、⌘+shift+Kでプロジェクトをクリーン後⌘+Bでプロジェクトをビルドします。

クラスの定義

テストクラスを作成します。

import Foundation
import RealmSwift

class Test: Object {
    dynamic var id = ""
    dynamic var name = ""


}

これでRealmを使用する準備が整いました。

CRUD

最低限必要なCRUDだけ押さえておきましょう。

 func create(){

        let test = Test()
        test.id = "1"
        test.name = "ringo"

            let realm = try! Realm()
            try! realm.write{
                realm.add(test)
            }


    }

read

func read(){
        let realm = try! Realm()
        // testクラスのオブジェクトを取得。フィルターに条件を指定できる
        let result = realm.objects(Test).filter("name = 'ringo'")
        //resultには取得されたオブジェクトの配列が代入される
        for obj in result{
            print(obj.name)
            //ringo
        }

    }

update

func update(){
        let realm = try! Realm()
        // Testクラスのオブジェクトを取得。フィルターに条件を指定できる
        let result = realm.objects(Test).filter("name = 'ringo'")
        //resultには取得されたオブジェクトの配列が代入される
        result[0].name = "orange"

        try! realm.write{
                realm.add(test)
            }


    }

delete

func delete(){
          let realm = try! Realm()

          //テストクラスのオブジェクトを取得
          let ringo = realm.objects(Test).filter("name = 'ringo'")

          try! realm.write{
           //削除したいオブジェクトを渡す
           realm.delete(ringo)
        }
   }


その他

RealmBrowserで作成したテーブルを見れます。

Realm Browser

Realm Browser

  • Realm
  • 開発ツール
  • 無料

どこに参照するスキーマがあるかはこれを使用すると簡単

SimPholders

或いはviewDidLoad()で出力

override func viewDidLoad() {

   // for swift 2.0 Xcode 7
   print(Realm.Configuration.defaultConfiguration.fileURL!)
}

RealmBrowserでcvsファイルを読み込んでテーブルを作成することも可能です。 テストデータをジェネレイトする機能もついています。

データベース作成するなら正規化をしっかりしましょう。

StudioOne2.xでKomplete7がインストール出来ない問題

今更ですがStudio One 2.6でKomplete7がインストール出来ない問題の簡単な解決方法.


f:id:vaikong:20150802141201p:plain

まず、ダウンロードしてきたkomplete7のインストーラーをデスクトップなどに移動します。

f:id:vaikong:20150802141326p:plain

移動したファイルをコントロールを押しながらクリックすると表示される、コンテンツの内容を表示するを選択します。

すると、"distribution.dist"というファイルがあるので、テキストエディタで開きます。

if(!(system.version.ProductVersion >= '10.5')) {

システムのバージョンが10.5以上でないならインストールさせないよ。
と、言っています。
本来は10.10なので問題無いはずなのですが、ここでは単純に数値で比較するようになっています。
つまり10.10 が10.1として認識されている訳です。

解決法

14行目の10.5の部分を10.1に変更して保存すれば解決!


以上!

swiftでstoryboardをインスタンス化する

objcではこう書いてました。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];

swiftだとこう書きます。

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
self.presentViewController(vc, animated: true, completion: nil)

goodluck!

Xcode Playgroundでリロードを行う

Playgroundで作業中に例えば、乱数を発生させたりして、複数のパターンを確認したい時、結構あります。


解決策
Xcode → Editor → Execute Playgroundのショートカットを作成する!



f:id:vaikong:20150704180004p:plain

f:id:vaikong:20150704180125p:plainf:id:vaikong:20150704180131p:plain

Control + R あたりを設定すると使いやすそうです。

'○○' is an ambiguous reference between `UnityEngine.Random' and `System.Random'と表示されたら

using UnityEngine;
using System.Collections;
using System;

public class enemy : MonoBehaviour {

	// Use this for initialization
	void Start () {
		float dir = Random.range (1, 359);

	
	}

Random' is an ambiguous reference between `UnityEngine.Random' and `System.Random'
UnityEngineとSystemの両方にRandomって名前が使われているからハッキリしてね。と言っています。
対処としては、明示的に

void Start () {
		float dir = UnityEngine.Random.range (1, 359);

	
	}

としてあげましょう。