2013年12月27日金曜日

[Unity]GameCenterから現在の自分のランキングを取得

GameCenterのLeaderboardsから自分のランクを取得する方法が面倒だったのでメモ。

void Start() {

  Social.localUser.Authenticate (ProcessAuthentication);
}

void ProcessAuthentication (bool success) {
  if (success) {
    ILeaderboard leaderboard = Social.CreateLeaderboard();
    leaderboard.id = "hoge-ranking";
    leaderboard.LoadScores (result => {
      int rankNo = leaderboard.localUserScore.rank;
      Debug.Log(rankNo);
    }
}

これで取れる。

2013年11月14日木曜日

twitterをWebパラメータでつぶやく時に改行する

twitterをWebパラメータでつぶやくには


https://twitter.com/intent/tweet?text=(内容)

URLを仕込みたいときは


https://twitter.com/intent/tweet?text=(内容)&url=(URL)

タグを仕込みたいときは


https://twitter.com/intent/tweet?text=(内容)&url=(URL)&hashtags=(タグ)

改行したい時は

アスキーコードで出来た
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html

0xの代わりに、%を使う。

例えば改行

%0a

例えば空白

%20

まとめ


ぼっち野球!
こんなに飛んだよ 2000m ganablo.com #ぼっち野球

↑これをつぶやくには

https://twitter.com/intent/tweet?text=ぼっち野球!%0aこんなに飛んだよ%202000m&url=http://ganablo.com&hashtags=ぼっち野球

↑これで完成。

2013年9月4日水曜日

[SVN]E000002エラーで、cleanupでもロックが外れない時の対処

SVNが動いてる最中に、とあるファイルを上書き保存とかしていたら、
コミットに失敗してロックされてしまった。

さて cleanupしろというのでやってみるも、うまくいかない。

で、対処法を探したらこんなサイトを発見。

http://changilkim.wordpress.com/2012/12/10/svn-cleanup-fails/

環境はmacだったので、sqlite入ってた(∩´∀`)∩ワーイ
そして治った。


2013年8月7日水曜日

[Unity]FreezeRotation・FreezePosition

スクリプトでFreezeRotation・FreezePositionする方法が分かりづらかったからメモ。
設定はtransform.rigidbody.constraints に対してするんだけれど、
一度に設定しないといけないのがミソ。
以下サンプル。

【解除】
transform.rigidbody.constraints = RigidbodyConstraints.None;

【FreezeRotation】
transform.rigidbody.constraints = RigidbodyConstraints.FreezeRotation;

【FreezePosition】

transform.rigidbody.constraints = RigidbodyConstraints.FreezePosition;

【Z軸のFreezePositionとFreezeRotation同時】
transform.rigidbody.constraints = RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotation;

↑ or演算子を使って繋げる。

これにハマったった。

2013年8月6日火曜日

[Unity]animationのcallback中に自身のオブジェクトを消す

animationの中にfunctionを指定して、そのfunction中で自身のオブジェクトを
消そうとしたら、こんなエラーが出た。

Destroying GameObjects immediately is not permitted during physics trigger/contact or animation event callbacks. You must use Destroy instead.

タイトルをアニメーションさせて、アニメーション後はそのタイトル自体が不要になるから消したかったわけよ。

検索したらこんな記事が。
Destroying GameObjects immediately is not permitted during physics trigger/conta

Updateの中で消すようにして、それをフラグで制御して、Callback中でフラグを切り替えたらいいんじゃね?的な。

あ。そうねと思って実装したら解決した。( ´,_ゝ`)プッ

bool deleteFlg = false;
void Update() {
  if (deleteFlg) 
  Destroy(GameObject.Find("Title"));
}



【レポート】うち水っ娘大集合!2013 画像特集 – がなぶろ

【レポート】うち水っ娘大集合!2013 画像特集 – がなぶろ

ここで紹介されている画像は、私の撮影したものです。
綺麗にまとめられていましたので、ぜひご覧下さい。

2013年7月22日月曜日

[Unity]画面の中央にオブジェクトを移動

クリックしたら画面の中央にぐぐぐっとオブジェクトを持ってくる演出をしたかった。
あれこれ調べて頭が痛くなったけれど、突然ひらめいた!!
そういえば今作ってる奴、画面の中央=カメラのポジションだったわww

移動量も割り算すればなめらかねぇ〜〜。
以下をUpdateで回した。

mobeObj.transform.position += new Vector3(
(uiCamera.transform.position.x - mobeObj.transform.position.x) / 8
(uiCamera.transform.position.y - mobeObj.transform.position.y) / 8,

0);

2013年7月18日木曜日

[Unity]アニメーションの逆再生

Unityのアニメーション機能で、再生したアニメーションを逆再生させたかった。
面倒だったのでメモ。

【参考にした記事】
HELP!! Animation wont reverse.. - Unity Answers
http://answers.unity3d.com/questions/43915/help-animation-wont-reverse.html

つまり、
animation["hogehoge"].time で、アニメーション開始位置
animation["hogehoge"].speed で、アニメーション再生速度を指定できると。
んで、指定した後に、
animation.play("hogehoge");
で、その通りに再生される。

なので、逆再生にしたければ speed に - 1 を入れて再生すればおk。

注意点としては、一度アニメーションの開始位置と再生速度を指定すると
ずっと覚えてる点。
通常再生のつもりで呼び出しても、逆再生の設定をしていると逆再生のまま Playされる。

上のリンク先のように、通常再生?逆再生?で分岐させて使うといい。

2013年7月6日土曜日

[mmf2]時間の計算

5分経ったら1回復・・・・ というような、よくあるゲームアプリを開発しようと思ってたら
超苦労したので方法をメモ。 

5分経ったら回復を実装するには?

1、プレイ中に現在の時間を秒で保存
2、起動時に保存された秒の時間と、現在の時間を比較
3、5分(300秒)の倍数分、回復させる。

さて実装

いざ実装しようと思ったら、「日付&時間」オブジェクトしか時間を知るすべがないじゃないですか。 で、そこから取得できるのが、現在の「年、月、日、時間、分、秒」とかそんな単位。
このままでは、秒を割り出せません。
いや、頑張れば出来るのかもしれないけど、何年に2月の日数は幾つ?とか計算し出したら、膨大な処理になっちゃう。
(とくにmmf2は・・・)

解決方法

アメリカのフォーラムを探してみたら、素敵なextensionを発見!!

このextensionをインストールすれば、Unix Time を取得できるようになります。
UnixTimeとは、1970年1月1日からの経過時間なのです!
これを使えば、上記秒数の差分を取得できますね。


疲れた・・・
この問題解決に3時間も掛けてしまった(´・ω・`)

2013年5月29日水曜日

[SVN]Subversionのコマンドで一括コミット・一括削除

Subversionのコミットを、コマンドでやろうとすると凄くいろんなことが面倒臭い。

WindowsならGUIソフト使えばいいんけど、Macには有料のばかりなので、コンソールからコマンドで叩いたほうが早いわけなん。
けど面倒臭い。

そもそも何でMacでSVNを使おうと思ったかというと、Unityをチーム開発したかったから。それについて注意点もあるんけど、それはどっかのサイトで調べるといいw

とりあえずメモっとく。

一括コミット・一括削除(Unity用) 

commit.sh
#!/bin/bash
svn st hoge/Assets/ | grep "^\?"|cut -d ' ' -f 8-|sed "s/^\(.*\)$/'\1'/g"|xargs svn add
svn st 
hoge/Assets/ | grep "^\!"|cut -d ' ' -f 8-|sed "s/^\(.*\)$/'\1'/g"|xargs svn rm
svn ci 
hoge/Assets/
svn st 
hoge/ProjectSettings | grep "^\?"|cut -d ' ' -f 8-|sed "s/^\(.*\)$/'\1'/g"|xargs svn add
svn st 
hoge/ProjectSettings | grep "^\!"|cut -d ' ' -f 8-|sed "s/^\(.*\)$/'\1'/g"|xargs svn rm
svn ci 
hoge/ProjectSettings
Unityでhogeプロジェクトをコミットしたかった訳だけど、コマンドで一括追加が面倒くさい。
そこで以下のサイトを参考にさせて頂いて、上のスクリプトを作ってみました。
Subversionでaddremove — ディノオープンラボラトリ

-f 7 を -f 8- に変更しました。
私の環境のMacだと、7だと文字が取れなかったんです。
使う人の環境によって調整しないといけないかもしれない。
8- にしたのは、8番目以降も文字がある場合があるんで。スペースのあるファイル名とか。
あと sed "s/^\(.*\)$/'\1'/g" も追加しました。
頭と後ろに ' を付けないと、スペースのあるファイル名のせいでコミットが成功しないんですよ。

んでもって、Unity用なのは、例えばhogeプロジェクトだと Assets と ProjectSettings だけコミットすればよくて、それ以外はコミットする必要はないらしい。
ということで、このコミットスクリプトを使えばUnityをMacで開発するときにSVN管理しやすいですよん。

わかりやすいコマンド一覧のサイト

バージョン管理ツールSubversionで使えるsvnコマンドのまとめ

SVNのドキュメント

Subversion によるバージョン管理

2013年5月21日火曜日

[Unity]scriptを無効にする

GameObjectに付けられた Script を、一時的に外したかった。
そこで調べたスクリプトで無効にする方法。

enable/disable specific components - Unity Answers

例えばC#で書くと、

gameObject.GetComponent<UIButton>().enabled = true;
こんな感じ。

2013年5月16日木曜日

[Unity]GameObjectの存在確認

GameObjectをどっかの処理で削除して、それがまだあるか?の存在確認方法。

if (GameObject.Find("cube") != null) {
  // exist
} else {
  // dead
}

[Unity]ピンチイン・ピンチアウト(ズームイン・ズームアウト)

Androidで2本指でそれやりたくて調べた。

こちらのサイトを参考にしました。
【Unity】Androidアプリ開発 備忘録④ Android ピンチイン・ピンチアウトで拡大・縮小(C#) | D-lagoon BLOG

で、私はカメラを「orthographic」で使っているのでちょっと改造。

23行目以降

Camera came = (Camera)transform.GetComponent("Camera");
float newSize = came.orthographicSize + transZ; 
if (0 < newSize && newSize <= 20) {
  came.orthographicSize += transZ;
}
これでオッケー(^ρ^)

2013年5月15日水曜日

[Unity]androidで横向きにビルド

Unityで開発したアプリをandroidに転送した時のメモ。
横向きアプリなのに縦に出よった。

横にしたいときはこうする。

BuildSetting → PlayerSetting → Resolution and Presentation → Default Orientation

縦向き → Portrait
横向き → Landscape Left


UnityでAndroidゲーム開発 : Nanashi-soft
こちらを参考にしました。

2013年5月7日火曜日

カラオケDAMでテレビみたいな採点

テレビで採点が流行ってるので行ってみたら、DAMの採点機能が分かりづらかった。
手順はこちら!

1. 曲名検索を開く
2. 「さいてん」と入力
3. 精密採点を選んで送信

これでテレビのような採点が出来る。
けど、めちゃくちゃ難しいww

2013年5月3日金曜日

[mmf2]スワイプの方向を検知してイベントを起こしたい

「右にスワイプすると発射」するオブジェクトを作りたかったのだけれど、
分かりづらかった。

自分が実装した方法はこう。


まず、マルチタッチオブジェクトをフレームに置く。

マルチタッチオブジェクトは、ドラック角度を取得できる。

→が0
↑が90
←が180
↓が270
という具合に角度を取得できる。
今回は、右にスワイプしたいので、
90以下と270位上なら検知したい。

こいつはイベントで直接呼べないので、
「特別」から「2つの一般値を比較」を使う。

オブジェクトからマルチタッチオブジェクトを選択して、
ドラッグ→角度を取得



タッチ番号は0を入力。
「以下」にプルダウンを合わせて、比較する数字は90を入力。

こんな感じ。


それで最後にイベントトリガーとして、マルチタッチをタッチが移動したをセットして完成!
イベントは2つ用意してあげる。

面倒だけど同じイベントを2つセット。
高速ループでイベント先をまとめてもいいかもね。

できたー(^q^)

2013年4月20日土曜日

[mmf2]小数点が出ちゃう計算をしたい

問題発生編


こんなんをやりたかった。

((80/320)*35)+45

本当の答えはこう。

53.75

だけど、mmf2で計算させようとすると、馬鹿になってこうなる。

45


うはwwwww


これはここのwikiにも書いてある。
http://wikiwiki.jp/mmf2/?%BB%C5%CD%CD%C5%F9%BB%A8%C2%BF%BE%F0%CA%F3#qa5bdc5a


解決編


へー。
どちらかの数字に1.0を掛ければいいのか。
なのでこうしたら直った。

((80*1.0/320)*35)+45
   ↑一番最初の掛け算のところがいいみたい。


なんでこんな計算しているかというと、2つのオブジェクトの座標から計算して
結果を使おうとしてたら、どうやっても45しか返ってこねぇ。

なんでだろう?と思って、その時に出ていた値をダミーで出してみて、
さっきの計算式になってたわけです。

なんかおかしい数字になってない?と思ったら、一旦オブジェクトからX座標を取得してぇ
みたいなのは後回しにして、数字だけで期待値通りの数字が取れるか、まずはやったほうがいいですね。

問題再勃発編!!


さて、こうして 80 と 320 のところに、本来やりたかったオブジェクトの座標やらの式を入れ込んだ。

返ってきた結果が

天文学的数字wwwwwwwwww
なんでこうなんだよ!!!wwww

80  のところに入れたかった式だけにして表示しても、問題ない
320 のところに入れたかった式だけにして表示しても、問題ない

意味がわからん・・・。

本当の本当の解決編

もうね。何やっても馬鹿になっちゃう。

一つ一つが正常な数字なのに、一度に計算したら馬鹿になってしまう!!

そんな時は、一つ一つの計算結果を、どこかの変数に格納してしまおう。
んで、さっきの

((80*1.0/320)*35)+45

こいつに代入してやる。



((変数A*1.0/変数B)*35)+45

こうしたら、今度こそ解決できた。

あーーーー!!
これに1時間かけました。チャンチャン。

[mmf2]マルチタッチについて

マルチタッチオブジェクトを使ってタッチの座標を取得するときの話。

画面にボールがあって、タッチしたところにボールの位置を設定したかった。

そこで、以下のように設定したらダメだった。

条件
 マルチタッチオブジェクト:新規タッチが発生した、数字 0

 ボール
  X座標
   マルチタッチ:タッチXを取得(タッチの数 0)
  Y座標
   マルチタッチ:タッチYを取得(タッチの数 0)

こうすると、一つ前の操作時のタッチのXY座標がとれてしまうというwww
なんでだよ!!w
1テンポ遅れちゃうwww


そこで、色々試行錯誤した結果、こうしたら期待通りの動きをした。

条件
 マルチタッチオブジェクト:新規タッチが発生した、数字 0

 ボール
  X座標
   マルチタッチ:ドラッグ 始点X座標を取得(タッチの数 0)
  Y座標
   マルチタッチ:ドラッグ 始点Y座標を取得(タッチの数 0)

謎だ。

2013年4月11日木曜日

技術系のメモブログです

がなぶろ」のサーバーを管理してます。
がなぶろGamesシリーズとして、日々ショボゲー作ってます。

開発ソフトはmmf2というソフトを使っているのですが、iPhoneでの開発の参考サイトが少ない!
ノウハウやほか色んな情報をメモ代わりに載せようと思ってます。
ダラダラと。。

がなぶろ」のがなこちゃんも応援してあげて下さいませ~!
よろしくです。