ゲーム制作その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();
ダメージエフェクトがポップされました。
Realm1.0入門 with Xcode7.3
iOSアプリ開発時、DB選択肢のひとつとして挙がるのがRealm
国内でのコミュニティも活発で、初心者でも取っ付き易い雰囲気があります。
当然realmでweb検索すると、情報は山程出てきますが、objc時代の名残を引きずったTipsが多くあり、 私自身迷ってしまう事がありました。
そこで、2016/June現在最新の手順をここに記します。
cocoapodsをインストール
cocoapods
ターミナルから、Xcodeプロジェクトのディレクトリへ移動をして
pod init
上記コマンドでcocoapods設定ファイルを作成します。 作成された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というファイルが作成されています。
プロジェクトを開いたら、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で作成したテーブルを見れます。
どこに参照するスキーマがあるかはこれを使用すると簡単
或いは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がインストール出来ない問題の簡単な解決方法.
まず、ダウンロードしてきたkomplete7のインストーラーをデスクトップなどに移動します。
移動したファイルをコントロールを押しながらクリックすると表示される、コンテンツの内容を表示するを選択します。
すると、"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のショートカットを作成する!
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); } としてあげましょう。