忍者ブログ
  • 2024.03
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.05
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/04/24 21:24 】 |
Unityで関数を渡す
引用
http://kan-kikuchi.hatenablog.com/entry/Delegate



public delegate void Delegate();
public void Method(Delegate delegateMethod){
/*処理*/

delegateMethod();
}





delegateの短縮系


//引数がstring
Action action1;
//引数がstringとint
Action<string, int> action2;

//返り値がint
Func func1;
//引数がstring、返り値がint
Func<string, int> func2;




ラムダ式の記述

(arg1, arg2) => { ... }






PR
【2018/01/27 19:28 】 | UNITY | 有り難いご意見(0)
他の開発者と共同で作業する
iOSの場合

provisioningの共有

方法1.
自分(certificateを登録している人)から、相手(certificateを登録していない人)に共有する

1.1 キーチェーンアクセスから秘密鍵を取り出す
1.1.1 キー一覧から、 iPhone Developer: your nameを選択
1.1.2 右クリックし、「(iPhone Developer: your name)を書き出す」を選択
1.1.3 p12ファイルができる

1.2 相手のUIDをプロビジョニングに登録するhttps://developer.apple.com/account/ios/certificate/

1.3 秘密鍵(.p12)と、プロビジョニングを相手に渡す

1.4 相手をiosDevチームに登録する
1.4.1 https://developer.apple.com/account/#/overview/ から、Peopleタブを選択し、相手を招待
1.4.2 ここで、開発者アカウントが個人だと招待が不可。相手に自分と同じアカウントで入ってもらうしかなくなる

1.5 相手がXcodeでチームアカウントに入る

1.6 相手がプロビジョニングをセットし、ビルド。これで通る

1.7 課金用の作業準備
1.7.1 相手に新しいメールアカウントを用意しておいてもらう
1.7.2 sanboxテスターに登録する。iTunesの内部ユーザではない!


方法2. 相手の情報をプロビジョニングに含める(多分)

2.1 相手から、csrをもらう

2.2 プロビジョニングに、もらったcsrから作った証明書を含め、書き出す

2.3 プロビジョニングを相手に渡す。

2.4 相手をiosDevチームに登録する

2.5 相手がXcodeでチームアカウントに入る

2.6 相手がプロビジョニングをセットし、ビルド。これで通る



Androidの場合
https://play.google.com/apps/publish/

1. 相手にアクセス権限を付与
1.1 Google play developer Console →設定→ユーザアカウントと権限→新しいユーザを招待
1.2 権限は「プロダクトリーダー」。(apk登録も可能にする場合)

2. 相手にテストアカウントを付与
2.1 Google play developer Console →設定→テスターの管理→リストを選択(なければ追加)→編集→追加→保存



Firebaseの場合

1.1 Overview横の設定→権限をクリック
1.2 権限:
プロジェクト→編集者
その他→Firebaseルールシステム

【2017/05/23 15:23 】 | 開発一般 | 有り難いご意見(0)
Photoshopのスクリプトを自分で書く
Photoshopは、レイヤー名に「.png」を書いておくと、
「自動で」psdファイルと同じディレクトリにpng画像を書き出しておいてくれる。便利

だが、画像を自動でトリミングしてしまうのが難点。
カンバスサイズのまま書き出して欲しい画像も、周辺が透明だと、切り取って小さいサイズで画像出力してしまう。
これが嫌なので、自分でスクリプトを書くこともできる

スプリクトの場所は以下。
/Applications/Adobe Photoshop CC 2015/Presets/Scripts
ルートユーザ(sudo)でなければこのディレクトリには操作できない
OSやphotoshopのバージョンが変われば移動する可能性がある

ファイル拡張子はjsx。javascript。
ファイルを追加or更新したら、photoshopを再起動。

画像をリサイズしない
http://qiita.com/kyubuns/items/d2831e4b0e0eff1892c7

なお、このスクリプトだと、すべてのレイヤー(.pngをつけていなくても)を書き出してしまう。また、拡張子に.pngを付け足してしまう

そこで、main関数を以下のように書き換えた

main = function() {
var copiedDoc, i, len, nameIndex, snapShotId, target, targets;
copiedDoc = app.activeDocument.duplicate(activeDocument.name.slice(0, -4) + '.copy.psd');
targets = allLayer(copiedDoc);
snapShotId = takeSnapshot(copiedDoc);
nameIndex = 1;
for (i = 0, len = targets.length; i < len; i++) {
target = targets[i];
if (target.name.indexOf(".png") >= 0) {
outputLayer(copiedDoc, target, nameIndex, targets.length - nameIndex + 1);
nameIndex += 1;
revertToSnapshot(copiedDoc, snapShotId);
}
}
return copiedDoc.close(SaveOptions.DONOTSAVECHANGES);
};



また、同サイズ先頭の設定を


enableTrim = false // トリミングする
outputInvisibleLayer = true // 非表示のレイヤーも書き出す


としておく。

【2017/01/26 11:06 】 | グラフィック | 有り難いご意見(0)
Ruby
サーバを立ち上げる

$ sudo yum update -y (-yは、たぶん途中プロンプトで聞かれるときに y (yes) で応えるっていうオプション)
$ sudo yum install httpd-devel -y
$ sudo service httpd start
$ sudo chkconfig httpd on
$ chkconfig --list httpd



gitをインストール

$ sudo yum update
$ sudo yum install git -y


sudoを使えるようにする
$ sudo su -
# passwd
(パスワード設定)
# exit
これで、パスワードが設定され、suでログインできるようになる

suに入る
$ su -
(パスワード入力)



Rubyインストール

参考

必要なライブラリをインストール
$ su -
# yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel

rbenvをインストール
# git clone https://github.com/sstephenson/rbenv.git /opt/rbenv
# echo 'export RBENV_ROOT="/opt/rbenv"' >> /etc/profile.d/rbenv.sh
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
# echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh


ruby-buildインストール
# git clone https://github.com/sstephenson/ruby-build.git /opt/rbenv/plugins/ruby-build

rbenv アカウント作成
# adduser rbenv
# gpasswd -a ec2-user rbenv

確認
# cat /etc/passwd
# cat /etc/group

rbenvのパーミッション変更
# chown -R rbenv:rbenv /opt/rbenv
# chmod -R 775 /opt/rbenv
# ll /opt/

# rbenv install 2.3.1(最新のRubyバージョンを指定)
(しばし待つ)
# rbenv rehash
# rbenv global 2.3.1

rbenvはsuでないと、/opt/rbenv/versions以下に書き込み権限がない

ここまでsuで行う
# rbenv -v
-> 1.0.0
# ruby -v
->2.3.1になっていればOK



なお、通常ユーザだと
$ ruby -v
->2.0.0
になっている場合がある。その場合は、パスを通せば良い
$ PATH=/opt/rbenv/shims:$PATH
$ echo $PATH
suで # which ruby をして確認すればOK


railsをインストール
$ gem update --system
$ gem install nokogiri -- --use-system-libraries
$ gem install --no-ri --no-rdoc rails
$ gem install bundler
$ rbenv rehash
$ rails -v
->最新っぽい数字になっていればok



◯ここからrails作成手順
環境
$ ruby -v
=> ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
$ rails -v
=> Rails 5.0.0.1
$ gem -v
=> 2.6.7
$ rbenv -v
=> rbenv 1.0.0-33-gc7dcaf1


$ cd /path/to/your/directory
$ rails new <アプリ名>
これでディレクトリができ、アプリが生成される
$ cd <アプリ名>
$ rails s

もしここで失敗した場合は、以下のようにする
$ vi Gemfile
gem 'therubyracer', platforms: :ruby
のコメントを外す
$ bundle install

で、再度
$ rails s

これでサーバが立つ

$ curl http://localhost:3000/
で確認
ブラウザなら

http://ec2-xxx.xxx.xxx.xxx.ap-northeast-1.compute.amazonaws.com:3000/
で表示されればok



【2016/10/03 17:48 】 | サーバ | 有り難いご意見(0)
IPv6対応
リジェクトされた


We discovered one or more bugs in your app when reviewed on iPad running iOS 10.0.1 on Wi-Fi connected to an IPv6 network.

Upon launch, app displays error messages.

In addition, tapping Shop tab results in displaying an error message.

We've attached screenshot(s) for your reference.

Next Steps

Please run your app on a device while connected to an IPv6 network (all apps must support IPv6) to identify the issue(s), then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue(s). For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue(s).

Resources

For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking

If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&A QA1764: How to reproduce bugs reported against App Store submissions.

If you have code-level questions after utilizing the above resources, you may wish to consult with Apple Developer Technical Support. When the DTS engineer follows up with you, please be ready to provide:
- complete details of your rejection issue(s)
- screenshots
- steps to reproduce the issue(s)
- symbolicated crash logs - if your issue results in a crash log






ドキュメント

Qiitaの記事


接続するテストをする。
NAT64ネットワークを用意する必要がある。

MacをNAT64ネットワークにできるので、iPhoneでMacに接続することになる。

AirMac Stationにするということなので、macが接続する先のネットワークと、macに接続してくるネットワークと2経路持っておく必要がある。
Macからは優先LAN(Ethernet)でルータにつないでおき、WiFiはiPhoneから接続してくるようにするのが良い。

iPhone → WiFi → Mac → Ethernet → ルータ → (全世界へ)

というわけでMacは、10.11以降でLANケーブルを刺せるものが良い。


オプションキーを押しながら、「共有」をクリックし、そのまま「インターネット共有」を選択。
すると、「NAT64ネットワークを作成」チェックボックスが出現する。これを確認したらオプションキーを離す


「共有する接続経路」はEthernet(LANケーブルが刺せるmacでないと選択肢にそもそもない)
「相手のコンピュータでのポート」をWiFiにする。
WiFiオプション設定でネットワーク名やセキュリティ設定ができるが、しなくても良い

これでOK
【2016/09/27 17:59 】 | cocos2d-x | 有り難いご意見(0)
セキャプログラミング
http://www.ipa.go.jp/security/awareness/vendor/programming/index.html
【2016/09/27 13:05 】 | 開発一般 | 有り難いご意見(0)
オイラー角からクォータニオンに変換
quaternion &quaternion::SeTEuler(float yaw, float pitch, float roll){
float cosY = cosf(yaw / 2.f);
float sinY = sinf(yaw / 2.f);
float cosP = cosf(pitch / 2.f);
float sinP = sinf(pitch / 2.f);
float cosR = cosf(roll / 2.f);
float sinR = sinf(roll / 2.f);
SetValues(
cosR * sinP * cosY + sinR * cosP * sinY,
cosR * cosP * sinY - sinR * sinP * cosY,
sinR * cosP * cosY - cosR * sinP * sinY,
cosR * cosP * cosY + sinR * sinP * sinY
);
return *this;
}
【2016/09/27 12:36 】 | 開発一般 | 有り難いご意見(0)
空間内の三角形同士の衝突判定
GameProgrammingGems
空間内の三角形同士の衝突判定
1.一方の三角形が載っている平面の式を求める
ax + by + cz + d = 0
(a,b,c)は平面の法線。(a,b,c)を求めたら、平面上の一点(x0,y0,z0)を式に代入して d を求める
2.もう一方の三角形がその平面と衝突しているか調べる
2点A(x0,y0,z0),B(x1,y1,z1)があるとき、媒介変数tを用いて
a(x0*t + x1(1-t)) + b(y0*t + y1(1-t)) + c(z0*t + z1(1-t)) + d = 0
となり、これを解いて 0<= t <= 1なら衝突している
3.三角形を平面に投影する
4.三角形の頂点が、もう一方の三角形の内部にあるかどうか調べる
三角形の1辺に対して、頂点が重心と同じ側にあれば内側。これが3辺全部にあてはまれば内部にあることになる
両方の三角形について行う
一つでも当てはまる頂点があれば、衝突している
【2016/09/27 12:35 】 | 開発一般 | 有り難いご意見(0)
aws注意
multiAZだと、内部のデータセンターが勝手に変わったりする
すると、サーバは生きていて、nagiosもエラーを吐かないが、コネクションは切れるということが起きる
IPは変わらないが、コネクションだけ繋がらなくなるので、再度同じIPで接続をしないと繋がらない
ということが起きるので、死活監視は必要
【2016/09/27 12:34 】 | サーバ | 有り難いご意見(0)
Unity描画負荷
http://unity3d.com/support/documentation/Manual/iphone-DrawCall-Batching.html

unityで負荷を減らすためにすべき3つのこと
http://www.cratesmith.com/archives/183
・Update()関数での処理を減らす
・強制的にGCする
・トライアングルは7500以下、drawcallは20以下
 ・同じマテリアルを使い回す
 ・動かないモデルならstatic指定をする
 ・オーバードローや複雑なシェーダにも気を配れ
 ・profilerを使って調べるのがもっともよい方法

http://answers.unity3d.com/questions/14578/whats-the-best-way-to-reduce-draw-calls.html
・マテリアルもテクスチャも違うメッシュを1つにまとめることもできる
  テクスチャアトラス
  マテリアルは1つになってしまうけど、drawcallは1で済む

http://www.google.co.jp/search?client=safari&rls=en&q=unity3d+drawcallを減らす&ie=UTF-8&oe=UTF-8&redir_esc=&ei=oiDFTrrZBe2amQXF_YyXCw#sclient=psy-ab&hl=ja&client=safari&rls=en&source=hp&q=unity3d+draw%E3%80%80call&pbx=1&oq=unity3d+draw%E3%80%80call&aq=f&aqi=&aql=&gs_sm=e&gs_upl=13610l13610l5l13826l1l1l0l0l0l0l192l192l0.1l1l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=75cd20b0589e05c6&biw=1250&bih=649

メッシュをコンバインするスクリプト
http://unity3d.com/support/documentation/ScriptReference/Mesh.CombineMeshes.html

メッシュ生成
http://answers.unity3d.com/questions/10249/combining-meshes-with-submeshes.html
http://www.unifycommunity.com/wiki/index.php?title=MeshCreationHelper

最初に見つけた、material,meshをまとめる
http://forum.unity3d.com/threads/88604-One-draw-call-for-each-shader-with-dynamic-meshes-The-Bob-script.?highlight=draw+call

オブジェクトごとに必ずdrawcallが1回呼ばれるという証言(マテリアルの共有に関わらず)
http://unity3d.qatohost.com/questions/16098/draw-call-reduction-for-a-stream-of-bullets.html

particle system1つにつき1回draw callが呼ばれる

公式の説明文
http://unity3d.com/support/documentation/Manual/iphone-DrawCall-Batching.html
CombineChildrenScriptというのがある

batchというUNITYの自動処理があり、これによってdrawcallの回数を節約できる
batchが効くのは、同じマテリアルを使用しているオブジェクト同士
textureだけが違うマテリアルを使っている場合は、アトラス化すれば同マテリアルにできる
スクリプトからsharedMaterialにアクセスする場合、Renderer.sharedMaterialを使うこと。Renderer.materialを使うとコピーしてしまう
dynamic batchingもできるが、頂点数300以内のmeshに対してのみ行われる。自動で行われる
CombineChildrenスクリプトについても調べておく必要がある(調べたがちょっと出てこない)

static batchingもある。マテリアル共有で、一切動かないmeshに対して指定できる。Inspectorの右上、staticチェックボックスを有効にする。ただし、メモリ消費が増えるので、やらないほうがいいときもある。。。これはiOS advancedでのみ使用可

パフォーマンス関連公式
http://unity3d.com/support/documentation/Manual/Optimizing%20Graphics%20Performance.html#iPhoneOptimizingGraphicsPerformance

iPhone系のテク
アルファテストはアルファブレンドに変える
頂点数は40000以下に。旧世代なら10000以下
モデル…過剰なフェイスを使わない,UVマップの数をできるだけ減らす。実際に処理する頂点数は、見えている数ではなく、モデルを形作るのに必要な数。法線やUVマップなんかを複数持っている頂点は分割される。
テクスチャ圧縮…iOSネイティブのPVRT圧縮フォーマットが使われる。
マテリアル…計算を減らす、小オブジェクトをバッチしてdraw call減らす、staticオブジェクトをバッチするなどを行う。テクスチャをまとめてマテリアルを同一にする

その他チェックポイント
Mobile/VertexLitが最速のシェーダ。
同一シーン内のマテリアルはできるだけ統一
動かないオブジェクトはstatic指定
PVRTCフォーマットにする、16bitにする
テクスチャはまとめる
シェーダの型、pow,sin,conの使用を減らす、
pixel lightはひとつだけ、ライトはベイクしたほうがいい
アルファテストよりアルファブレンド
フォグは不要なら使わない
オクルージョンカリングを生かす

http://unity3d.com/support/documentation/Manual/Modeling%20Optimized%20Characters.html
インポートしたモデルには、スキンメッシュレンダラーが付く。これは1モデルに1つにすべし
マテリアルは1つ。複数のマテリアルを使うというのは、複数のシェーダを使いたいときに限るべし
骨は少なく。30本くらいが最高
ポリゴン数は300−1500(三角形)くらい
インポート時にIKはFKにベイクされる。だからノードは不要

MeshMerger
http://www.unifycommunity.com/wiki/index.php?title=MeshMerger
3.5でも行けるのでは
【2016/09/27 11:52 】 | UNITY | 有り難いご意見(0)
| ホーム | 次ページ>>