<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>今日も林檎の木を植える</title>
  <link>http://akai0ringo.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://akai0ringo.blog.shinobi.jp/RSS/" />
  <description>インディーゲームデベロッパー &quot;skydol&quot; の技術ブログ</description>
  <lastBuildDate>Sat, 27 Jan 2018 10:28:14 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>Unityで関数を渡す</title>
    <description>
    <![CDATA[引用<br />
<a href="http://kan-kikuchi.hatenablog.com/entry/Delegate" title="">http://kan-kikuchi.hatenablog.com/entry/Delegate</a><br />
<br />
<br />
<pre><br />
	public delegate void Delegate();<br />
	public void Method(Delegate delegateMethod){<br />
		/*処理*/<br />
<br />
		delegateMethod();<br />
	}</pre><br />
<br />
<br />
<br />
<br />
delegateの短縮系<br />
<pre><br />
<br />
//引数がstring<br />
Action<string> action1;<br />
//引数がstringとint<br />
Action&lt;string, int&gt; action2;<br />
<br />
//返り値がint<br />
Func<int> func1;<br />
//引数がstring、返り値がint<br />
Func&lt;string, int&gt; func2;<br />
<br />
</int></string></pre><br />
<br />
<br />
ラムダ式の記述<br />
<pre><br />
(arg1, arg2) =&gt; { ... }</pre><br />
<br />
<br />
<br />
<br />
<br />
]]>
    </description>
    <category>UNITY</category>
    <link>http://akai0ringo.blog.shinobi.jp/unity/unity%E3%81%A7%E9%96%A2%E6%95%B0%E3%82%92%E6%B8%A1%E3%81%99</link>
    <pubDate>Sat, 27 Jan 2018 10:28:14 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/334</guid>
  </item>
    <item>
    <title>他の開発者と共同で作業する</title>
    <description>
    <![CDATA[iOSの場合<br />
<br />
provisioningの共有<br />
<br />
方法1.<br />
自分（certificateを登録している人）から、相手（certificateを登録していない人）に共有する<br />
<br />
1.1 キーチェーンアクセスから秘密鍵を取り出す<br />
1.1.1 キー一覧から、 iPhone Developer: your nameを選択<br />
1.1.2 右クリックし、「（iPhone Developer: your name）を書き出す」を選択<br />
1.1.3 p12ファイルができる<br />
<br />
1.2 相手のUIDをプロビジョニングに登録する<a href="https://developer.apple.com/account/ios/certificate/" title="">https://developer.apple.com/account/ios/certificate/</a><br />
<br />
1.3 秘密鍵(.p12)と、プロビジョニングを相手に渡す<br />
<br />
1.4 相手をiosDevチームに登録する<br />
1.4.1 <a href="https://developer.apple.com/account/#/overview/" title="">https://developer.apple.com/account/#/overview/</a>　から、Peopleタブを選択し、相手を招待<br />
1.4.2 ここで、開発者アカウントが個人だと招待が不可。相手に自分と同じアカウントで入ってもらうしかなくなる<br />
<br />
1.5 相手がXcodeでチームアカウントに入る<br />
<br />
1.6 相手がプロビジョニングをセットし、ビルド。これで通る<br />
<br />
1.7 課金用の作業準備<br />
1.7.1 相手に新しいメールアカウントを用意しておいてもらう<br />
1.7.2 sanboxテスターに登録する。iTunesの内部ユーザではない！<br />
<br />
<br />
方法2. 相手の情報をプロビジョニングに含める（多分）<br />
<br />
2.1 相手から、csrをもらう<br />
<br />
2.2 プロビジョニングに、もらったcsrから作った証明書を含め、書き出す<br />
<br />
2.3 プロビジョニングを相手に渡す。<br />
<br />
2.4 相手をiosDevチームに登録する<br />
<br />
2.5 相手がXcodeでチームアカウントに入る<br />
<br />
2.6 相手がプロビジョニングをセットし、ビルド。これで通る<br />
<br />
<br />
<br />
Androidの場合<br />
<a href="https://play.google.com/apps/publish/" title="">https://play.google.com/apps/publish/</a><br />
<br />
1. 相手にアクセス権限を付与<br />
1.1 Google play developer Console &rarr;設定&rarr;ユーザアカウントと権限&rarr;新しいユーザを招待<br />
1.2 権限は「プロダクトリーダー」。（apk登録も可能にする場合）<br />
<br />
2. 相手にテストアカウントを付与<br />
2.1 Google play developer Console &rarr;設定&rarr;テスターの管理&rarr;リストを選択（なければ追加）&rarr;編集&rarr;追加&rarr;保存<br />
<br />
<br />
<br />
Firebaseの場合<br />
<br />
1.1 Overview横の設定&rarr;権限をクリック<br />
1.2 権限：<br />
プロジェクト&rarr;編集者<br />
その他&rarr;Firebaseルールシステム<br />
<br />
]]>
    </description>
    <category>開発一般</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E9%96%8B%E7%99%BA%E4%B8%80%E8%88%AC/%E4%BB%96%E3%81%AE%E9%96%8B%E7%99%BA%E8%80%85%E3%81%A8%E5%85%B1%E5%90%8C%E3%81%A7%E4%BD%9C%E6%A5%AD%E3%81%99%E3%82%8B</link>
    <pubDate>Tue, 23 May 2017 06:23:42 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/333</guid>
  </item>
    <item>
    <title>Photoshopのスクリプトを自分で書く</title>
    <description>
    <![CDATA[Photoshopは、レイヤー名に「.png」を書いておくと、<br />
「自動で」psdファイルと同じディレクトリにpng画像を書き出しておいてくれる。便利<br />
<br />
だが、画像を自動でトリミングしてしまうのが難点。<br />
カンバスサイズのまま書き出して欲しい画像も、周辺が透明だと、切り取って小さいサイズで画像出力してしまう。<br />
これが嫌なので、自分でスクリプトを書くこともできる<br />
<br />
スプリクトの場所は以下。<br />
/Applications/Adobe Photoshop CC 2015/Presets/Scripts<br />
ルートユーザ（sudo）でなければこのディレクトリには操作できない<br />
OSやphotoshopのバージョンが変われば移動する可能性がある<br />
<br />
ファイル拡張子はjsx。javascript。<br />
ファイルを追加or更新したら、photoshopを再起動。<br />
<br />
画像をリサイズしない<br />
<a href="参考" title="">http://qiita.com/kyubuns/items/d2831e4b0e0eff1892c7</a><br />
<br />
なお、このスクリプトだと、すべてのレイヤー（.pngをつけていなくても）を書き出してしまう。また、拡張子に.pngを付け足してしまう<br />
<br />
そこで、main関数を以下のように書き換えた<br />
<pre><br />
 main = function() {<br />
   var copiedDoc, i, len, nameIndex, snapShotId, target, targets;<br />
   copiedDoc = app.activeDocument.duplicate(activeDocument.name.slice(0, -4) + '.copy.psd');<br />
   targets = allLayer(copiedDoc);<br />
   snapShotId = takeSnapshot(copiedDoc);<br />
   nameIndex = 1;<br />
   for (i = 0, len = targets.length; i &lt; len; i++) {<br />
     target = targets[i];<br />
     if (target.name.indexOf(".png") &gt;= 0) {<br />
       outputLayer(copiedDoc, target, nameIndex, targets.length - nameIndex + 1);<br />
       nameIndex += 1;<br />
       revertToSnapshot(copiedDoc, snapShotId);<br />
     }<br />
   }<br />
   return copiedDoc.close(SaveOptions.DONOTSAVECHANGES);<br />
 };</pre><br />
<br />
<br />
また、同サイズ先頭の設定を<br />
<br />
<pre><br />
enableTrim = false // トリミングする<br />
outputInvisibleLayer = true // 非表示のレイヤーも書き出す</pre><br />
<br />
としておく。<br />
<br />
]]>
    </description>
    <category>グラフィック</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF/photoshop%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E8%87%AA%E5%88%86%E3%81%A7%E6%9B%B8%E3%81%8F</link>
    <pubDate>Thu, 26 Jan 2017 02:06:27 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/332</guid>
  </item>
    <item>
    <title>Ruby</title>
    <description>
    <![CDATA[サーバを立ち上げる<br />
<br />
$ sudo yum update -y (-yは、たぶん途中プロンプトで聞かれるときに y (yes) で応えるっていうオプション）<br />
$ sudo yum install httpd-devel -y<br />
$ sudo service httpd start<br />
$ sudo chkconfig httpd on<br />
$ chkconfig --list httpd<br />
<br />
<br />
<br />
gitをインストール<br />
<br />
$ sudo yum update<br />
$ sudo yum install git -y<br />
<br />
<br />
sudoを使えるようにする<br />
$ sudo su -<br />
# passwd<br />
（パスワード設定）<br />
# exit<br />
これで、パスワードが設定され、suでログインできるようになる<br />
<br />
suに入る<br />
$ su -<br />
（パスワード入力）<br />
<br />
<br />
<br />
Rubyインストール<br />
<br />
<a href="http://ticklecode.com/step9-ruby-rails-install/" title="">参考</a><br />
<br />
必要なライブラリをインストール<br />
$ su -<br />
# 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<br />
<br />
rbenvをインストール<br />
# git clone https://github.com/sstephenson/rbenv.git /opt/rbenv<br />
# echo 'export RBENV_ROOT="/opt/rbenv"' &gt;&gt; /etc/profile.d/rbenv.sh<br />
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' &gt;&gt; /etc/profile.d/rbenv.sh<br />
# echo 'eval "$(rbenv init -)"' &gt;&gt; /etc/profile.d/rbenv.sh<br />
<br />
<br />
ruby-buildインストール<br />
# git clone https://github.com/sstephenson/ruby-build.git /opt/rbenv/plugins/ruby-build<br />
<br />
rbenv アカウント作成<br />
# adduser rbenv<br />
# gpasswd -a ec2-user rbenv<br />
<br />
確認<br />
# cat /etc/passwd<br />
# cat /etc/group<br />
<br />
rbenvのパーミッション変更<br />
# chown -R rbenv:rbenv /opt/rbenv<br />
# chmod -R 775 /opt/rbenv<br />
# ll /opt/<br />
<br />
# rbenv install 2.3.1（最新のRubyバージョンを指定）<br />
（しばし待つ）<br />
# rbenv rehash<br />
# rbenv global 2.3.1<br />
<br />
rbenvはsuでないと、/opt/rbenv/versions以下に書き込み権限がない<br />
<br />
ここまでsuで行う<br />
# rbenv -v<br />
-&gt; 1.0.0<br />
# ruby -v<br />
-&gt;2.3.1になっていればOK<br />
<br />
<br />
<br />
なお、通常ユーザだと<br />
$ ruby -v<br />
-&gt;2.0.0<br />
になっている場合がある。その場合は、パスを通せば良い<br />
$ PATH=/opt/rbenv/shims:$PATH<br />
$ echo $PATH<br />
suで # which ruby をして確認すればOK<br />
<br />
<br />
railsをインストール<br />
$ gem update --system<br />
$ gem install nokogiri -- --use-system-libraries<br />
$ gem install --no-ri --no-rdoc rails<br />
$ gem install bundler<br />
$ rbenv rehash<br />
$ rails -v<br />
-&gt;最新っぽい数字になっていればok<br />
<br />
<br />
<br />
◯ここからrails作成手順<br />
環境<br />
$ ruby -v<br />
=&gt; ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]<br />
$ rails -v<br />
=&gt; Rails 5.0.0.1<br />
$ gem -v<br />
=&gt; 2.6.7<br />
$ rbenv -v<br />
=&gt; rbenv 1.0.0-33-gc7dcaf1<br />
<br />
<br />
$ cd /path/to/your/directory<br />
$ rails new &lt;アプリ名&gt;<br />
これでディレクトリができ、アプリが生成される<br />
$ cd &lt;アプリ名&gt;<br />
$ rails s<br />
<br />
もしここで失敗した場合は、以下のようにする<br />
$ vi Gemfile<br />
gem 'therubyracer', platforms: :ruby<br />
のコメントを外す<br />
$ bundle install<br />
<br />
で、再度<br />
$ rails s<br />
<br />
これでサーバが立つ<br />
<br />
$ curl http://localhost:3000/<br />
で確認<br />
ブラウザなら<br />
<br />
http://ec2-xxx.xxx.xxx.xxx.ap-northeast-1.compute.amazonaws.com:3000/<br />
で表示されればok<br />
<br />
<br />
<br />
]]>
    </description>
    <category>サーバ</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E3%82%B5%E3%83%BC%E3%83%90/ruby</link>
    <pubDate>Mon, 03 Oct 2016 08:48:36 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/330</guid>
  </item>
    <item>
    <title>IPv6対応</title>
    <description>
    <![CDATA[リジェクトされた<br />
<br />
<pre><br />
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.<br />
<br />
Upon launch, app displays error messages.<br />
<br />
In addition, tapping Shop tab results in displaying an error message.<br />
<br />
We've attached screenshot(s) for your reference.<br />
<br />
Next Steps<br />
<br />
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.<br />
<br />
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.<br />
<br />
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).<br />
<br />
Resources<br />
<br />
For information about supporting IPv6 Networks, please refer to Supporting IPv6 DNS64/NAT64 Networks and About Networking<br />
<br />
If you have difficulty reproducing a reported issue, please try testing the workflow described in Technical Q&amp;A QA1764: How to reproduce bugs reported against App Store submissions.<br />
<br />
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:<br />
- complete details of your rejection issue(s)<br />
- screenshots<br />
- steps to reproduce the issue(s)<br />
- symbolicated crash logs - if your issue results in a crash log<br />
<br />
</pre><br />
<br />
<br />
<br />
<br />
<a href="https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1" title="">ドキュメント</a><br />
<br />
<a href="http://qiita.com/shao1555/items/4433803419dfc72bf80b" title="">Qiitaの記事</a><br />
<br />
<br />
接続するテストをする。<br />
NAT64ネットワークを用意する必要がある。<br />
<br />
MacをNAT64ネットワークにできるので、iPhoneでMacに接続することになる。<br />
<br />
AirMac Stationにするということなので、macが接続する先のネットワークと、macに接続してくるネットワークと2経路持っておく必要がある。<br />
Macからは優先LAN(Ethernet)でルータにつないでおき、WiFiはiPhoneから接続してくるようにするのが良い。<br />
<br />
iPhone &rarr; WiFi &rarr; Mac &rarr; Ethernet &rarr; ルータ &rarr; (全世界へ)<br />
<br />
というわけでMacは、10.11以降でLANケーブルを刺せるものが良い。<br />
<br />
<br />
オプションキーを押しながら、「共有」をクリックし、そのまま「インターネット共有」を選択。<br />
すると、「NAT64ネットワークを作成」チェックボックスが出現する。これを確認したらオプションキーを離す<br />
<a target="_blank" href="//akai0ringo.blog.shinobi.jp/File/b5ec89fb.png" title=""><img src="//akai0ringo.blog.shinobi.jp/Img/1474966181/" alt="" /></a> <br />
<br />
「共有する接続経路」はEthernet（LANケーブルが刺せるmacでないと選択肢にそもそもない）<br />
「相手のコンピュータでのポート」をWiFiにする。<br />
WiFiオプション設定でネットワーク名やセキュリティ設定ができるが、しなくても良い<br />
<br />
これでOK]]>
    </description>
    <category>cocos2d-x</category>
    <link>http://akai0ringo.blog.shinobi.jp/cocos2d-x/ipv6%E5%AF%BE%E5%BF%9C</link>
    <pubDate>Tue, 27 Sep 2016 08:59:44 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/329</guid>
  </item>
    <item>
    <title>セキャプログラミング</title>
    <description>
    <![CDATA[http://www.ipa.go.jp/security/awareness/vendor/programming/index.html]]>
    </description>
    <category>開発一般</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E9%96%8B%E7%99%BA%E4%B8%80%E8%88%AC/%E3%82%BB%E3%82%AD%E3%83%A3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0</link>
    <pubDate>Tue, 27 Sep 2016 04:05:46 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/328</guid>
  </item>
    <item>
    <title>オイラー角からクォータニオンに変換</title>
    <description>
    <![CDATA[quaternion &amp;quaternion::SeTEuler(float yaw, float pitch, float roll){<br />
float cosY = cosf(yaw / 2.f);<br />
float sinY = sinf(yaw / 2.f);<br />
float cosP = cosf(pitch / 2.f);<br />
float sinP = sinf(pitch / 2.f);<br />
float cosR = cosf(roll / 2.f);<br />
float sinR = sinf(roll / 2.f);<br />
SetValues(<br />
cosR * sinP * cosY + sinR * cosP * sinY,<br />
cosR * cosP * sinY - sinR * sinP * cosY,<br />
sinR * cosP * cosY - cosR * sinP * sinY,<br />
cosR * cosP * cosY + sinR * sinP * sinY<br />
);<br />
return *this;<br />
}]]>
    </description>
    <category>開発一般</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E9%96%8B%E7%99%BA%E4%B8%80%E8%88%AC/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E8%A7%92%E3%81%8B%E3%82%89%E3%82%AF%E3%82%A9%E3%83%BC%E3%82%BF%E3%83%8B%E3%82%AA%E3%83%B3%E3%81%AB%E5%A4%89%E6%8F%9B</link>
    <pubDate>Tue, 27 Sep 2016 03:36:18 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/327</guid>
  </item>
    <item>
    <title>空間内の三角形同士の衝突判定</title>
    <description>
    <![CDATA[GameProgrammingGems<br />
空間内の三角形同士の衝突判定<br />
1.一方の三角形が載っている平面の式を求める<br />
ax + by + cz + d = 0<br />
(a,b,c)は平面の法線。(a,b,c)を求めたら、平面上の一点(x0,y0,z0)を式に代入して d を求める<br />
2.もう一方の三角形がその平面と衝突しているか調べる<br />
2点A(x0,y0,z0),B(x1,y1,z1)があるとき、媒介変数tを用いて<br />
a(x0*t + x1(1-t)) + b(y0*t + y1(1-t)) + c(z0*t + z1(1-t)) + d = 0<br />
となり、これを解いて 0&lt;= t &lt;= 1なら衝突している<br />
3.三角形を平面に投影する<br />
4.三角形の頂点が、もう一方の三角形の内部にあるかどうか調べる<br />
三角形の1辺に対して、頂点が重心と同じ側にあれば内側。これが3辺全部にあてはまれば内部にあることになる<br />
両方の三角形について行う<br />
一つでも当てはまる頂点があれば、衝突している]]>
    </description>
    <category>開発一般</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E9%96%8B%E7%99%BA%E4%B8%80%E8%88%AC/%E7%A9%BA%E9%96%93%E5%86%85%E3%81%AE%E4%B8%89%E8%A7%92%E5%BD%A2%E5%90%8C%E5%A3%AB%E3%81%AE%E8%A1%9D%E7%AA%81%E5%88%A4%E5%AE%9A</link>
    <pubDate>Tue, 27 Sep 2016 03:35:38 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/326</guid>
  </item>
    <item>
    <title>aws注意</title>
    <description>
    <![CDATA[multiAZだと、内部のデータセンターが勝手に変わったりする<br />
すると、サーバは生きていて、nagiosもエラーを吐かないが、コネクションは切れるということが起きる<br />
IPは変わらないが、コネクションだけ繋がらなくなるので、再度同じIPで接続をしないと繋がらない<br />
ということが起きるので、死活監視は必要]]>
    </description>
    <category>サーバ</category>
    <link>http://akai0ringo.blog.shinobi.jp/%E3%82%B5%E3%83%BC%E3%83%90/aws%E6%B3%A8%E6%84%8F</link>
    <pubDate>Tue, 27 Sep 2016 03:34:42 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/325</guid>
  </item>
    <item>
    <title>Unity描画負荷</title>
    <description>
    <![CDATA[http://unity3d.com/support/documentation/Manual/iphone-DrawCall-Batching.html<br />
<br />
unityで負荷を減らすためにすべき3つのこと<br />
http://www.cratesmith.com/archives/183<br />
・Update()関数での処理を減らす<br />
・強制的にGCする<br />
・トライアングルは7500以下、drawcallは20以下<br />
　・同じマテリアルを使い回す<br />
　・動かないモデルならstatic指定をする<br />
　・オーバードローや複雑なシェーダにも気を配れ<br />
　・profilerを使って調べるのがもっともよい方法<br />
<br />
http://answers.unity3d.com/questions/14578/whats-the-best-way-to-reduce-draw-calls.html<br />
・マテリアルもテクスチャも違うメッシュを1つにまとめることもできる<br />
　　テクスチャアトラス<br />
　　マテリアルは1つになってしまうけど、drawcallは1で済む<br />
<br />
http://www.google.co.jp/search?client=safari&amp;rls=en&amp;q=unity3d+drawcallを減らす&amp;ie=UTF-8&amp;oe=UTF-8&amp;redir_esc=&amp;ei=oiDFTrrZBe2amQXF_YyXCw#sclient=psy-ab&amp;hl=ja&amp;client=safari&amp;rls=en&amp;source=hp&amp;q=unity3d+draw%E3%80%80call&amp;pbx=1&amp;oq=unity3d+draw%E3%80%80call&amp;aq=f&amp;aqi=&amp;aql=&amp;gs_sm=e&amp;gs_upl=13610l13610l5l13826l1l1l0l0l0l0l192l192l0.1l1l0&amp;bav=on.2,or.r_gc.r_pw.,cf.osb&amp;fp=75cd20b0589e05c6&amp;biw=1250&amp;bih=649<br />
<br />
メッシュをコンバインするスクリプト<br />
http://unity3d.com/support/documentation/ScriptReference/Mesh.CombineMeshes.html<br />
<br />
メッシュ生成<br />
http://answers.unity3d.com/questions/10249/combining-meshes-with-submeshes.html<br />
http://www.unifycommunity.com/wiki/index.php?title=MeshCreationHelper<br />
<br />
最初に見つけた、material,meshをまとめる<br />
http://forum.unity3d.com/threads/88604-One-draw-call-for-each-shader-with-dynamic-meshes-The-Bob-script.?highlight=draw+call<br />
<br />
オブジェクトごとに必ずdrawcallが1回呼ばれるという証言（マテリアルの共有に関わらず）<br />
http://unity3d.qatohost.com/questions/16098/draw-call-reduction-for-a-stream-of-bullets.html<br />
<br />
particle system1つにつき1回draw callが呼ばれる<br />
<br />
公式の説明文<br />
http://unity3d.com/support/documentation/Manual/iphone-DrawCall-Batching.html<br />
CombineChildrenScriptというのがある<br />
<br />
batchというUNITYの自動処理があり、これによってdrawcallの回数を節約できる<br />
batchが効くのは、同じマテリアルを使用しているオブジェクト同士<br />
textureだけが違うマテリアルを使っている場合は、アトラス化すれば同マテリアルにできる<br />
スクリプトからsharedMaterialにアクセスする場合、Renderer.sharedMaterialを使うこと。Renderer.materialを使うとコピーしてしまう<br />
dynamic batchingもできるが、頂点数300以内のmeshに対してのみ行われる。自動で行われる<br />
CombineChildrenスクリプトについても調べておく必要がある（調べたがちょっと出てこない）<br />
<br />
static batchingもある。マテリアル共有で、一切動かないmeshに対して指定できる。Inspectorの右上、staticチェックボックスを有効にする。ただし、メモリ消費が増えるので、やらないほうがいいときもある。。。これはiOS advancedでのみ使用可<br />
<br />
パフォーマンス関連公式<br />
http://unity3d.com/support/documentation/Manual/Optimizing%20Graphics%20Performance.html#iPhoneOptimizingGraphicsPerformance<br />
<br />
iPhone系のテク<br />
アルファテストはアルファブレンドに変える<br />
頂点数は40000以下に。旧世代なら10000以下<br />
モデル&hellip;過剰なフェイスを使わない,UVマップの数をできるだけ減らす。実際に処理する頂点数は、見えている数ではなく、モデルを形作るのに必要な数。法線やUVマップなんかを複数持っている頂点は分割される。<br />
テクスチャ圧縮&hellip;iOSネイティブのPVRT圧縮フォーマットが使われる。<br />
マテリアル&hellip;計算を減らす、小オブジェクトをバッチしてdraw call減らす、staticオブジェクトをバッチするなどを行う。テクスチャをまとめてマテリアルを同一にする<br />
<br />
その他チェックポイント<br />
Mobile/VertexLitが最速のシェーダ。<br />
同一シーン内のマテリアルはできるだけ統一<br />
動かないオブジェクトはstatic指定<br />
PVRTCフォーマットにする、16bitにする<br />
テクスチャはまとめる<br />
シェーダの型、pow,sin,conの使用を減らす、<br />
pixel lightはひとつだけ、ライトはベイクしたほうがいい<br />
アルファテストよりアルファブレンド<br />
フォグは不要なら使わない<br />
オクルージョンカリングを生かす<br />
<br />
http://unity3d.com/support/documentation/Manual/Modeling%20Optimized%20Characters.html<br />
インポートしたモデルには、スキンメッシュレンダラーが付く。これは1モデルに1つにすべし<br />
マテリアルは1つ。複数のマテリアルを使うというのは、複数のシェーダを使いたいときに限るべし<br />
骨は少なく。30本くらいが最高<br />
ポリゴン数は300&minus;1500(三角形)くらい<br />
インポート時にIKはFKにベイクされる。だからノードは不要<br />
<br />
MeshMerger<br />
http://www.unifycommunity.com/wiki/index.php?title=MeshMerger<br />
3.5でも行けるのでは]]>
    </description>
    <category>UNITY</category>
    <link>http://akai0ringo.blog.shinobi.jp/unity/unity%E6%8F%8F%E7%94%BB%E8%B2%A0%E8%8D%B7</link>
    <pubDate>Tue, 27 Sep 2016 02:52:35 GMT</pubDate>
    <guid isPermaLink="false">akai0ringo.blog.shinobi.jp://entry/324</guid>
  </item>

    </channel>
</rss>