トップページgamedev
1001コメント373KB

【3Dゲームエンジン】Unity質問スレッド13 [転載禁止]©5ch.net

レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。2014/11/01(土) 14:21:34.61ID:PIUwqvpm
3Dゲームエンジン「Unity」の質問に優しく答えるスレです。
Windows/Mac用。JavaScript/C#/Booといった汎用言語を使用できるのが特徴です。
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他

次スレは>>970を踏んだ方が建てること。ダメなら>>980>>990が建てて下さい。

■前スレ
【3Dゲームエンジン】Unity質問スレッド12
http://peace.2ch.net/test/read.cgi/gamedev/1411226395/

■本スレ
【3Dゲームエンジン】Unity総合スレッド23
http://peace.2ch.net/test/read.cgi/gamedev/1404212872/

■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/

●リンク
・Unity(日本公式サイト)
 http://unity3d.com/japan/
・ユーザーガイド&リファレンス
 http://japan.unity3d.com/developer/document/
・チュートリアル
 http://japan.unity3d.com/developer/document/tutorial/
・スクリプトリファレンス
 http://docs-jp.unity3d.com/Documentation/ScriptReference/
・FAQ
 http://answers.unity3d.com/index.html
・MSDN
 http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
注意事項:アセットおじさんは優しく愛でましょう
0956名前は開発中のものです。2014/12/07(日) 22:10:15.99ID:zrzn7PDv
>>953
作るのは簡単なんです。問題は処理を効率化させたいのです。

最低でも開放したかどうかのフラグと、開放させる条件を1つ以上持つと思うんですが、
実績処理のコードを見たことが無いので、開放のタイミングをUpdataで常に変数チェックしているのかどうか
それともタイムカウントとって1秒経過したらif文でチェックして不要な処理を削ったりとか。
でもタイムカウントだと開放するタイミングに若干ラグが出ると思うんですが、そこは許容するのか、とかですかね。

実績を開放させるタイミングをどういう処理で監視してるのかが知りたいのです。
0957名前は開発中のものです。2014/12/07(日) 22:19:42.75ID:zrzn7PDv
>>955
敵を倒したら判定メソッドを呼び出すと言うのは実装しました

例えばゲーム開始からプレイ時間を計測して、t時間経過したら開放する
と言う判定があったとして、tには1分、3分、5分...と大体100個分の判定を設定した場合
インクリメントしている時間の間全てにif文で判定してるのは非常にまずいと思ってます
他のやり方は無いものかと調べてる最中ですが、こういうもんなんでしょうかね
0958名前は開発中のものです。2014/12/07(日) 22:26:03.43ID:Ln5oPSuW
>>957
実績の状態変化一覧を作る事から始めろよ
プレイ時間ならどこか1つのGameObjectがカウンタ処理するのはしょうが無いけど
他はほとんどトリガー条件だろう?(時間だって単位を10秒毎にすれば60fpsと仮定しても600フレームに一回だぜ)

敵を倒した数ならAddKillCount(int counts)とか
アイテム拾った数なら GotItem(SomeClassOfItem item)とか
トリガー条件以外はしょうがないけど、基本トリガーなんだから発生時にしかチェック関数なんか通らないよ
0959名前は開発中のものです。2014/12/07(日) 22:27:30.61ID:Fn64T9uD
やる前から効率化考えて手が止まるくらいなら一度やってから効率化考えた方がよっぽど効率的だと思う
0960名前は開発中のものです。2014/12/07(日) 22:46:38.56ID:ljhQ3ELU
if文の判定処理にかかるコストなんて微々たるもんだ。
そんなもの気にしてるぐらいなら、テクスチャの効率化。ドローコール軽減を意識して作った方がいいぞ。

処理の軽減だってif文の処理コストを掛けることで、毎回使用する無駄な演算を無くすとかいう方法で、俺はやってる。
0961名前は開発中のものです。2014/12/07(日) 22:47:31.74ID:Rx2GFKeA
そう思って作ると大抵「次回作ではもっとうまくやろう」でそのままになるよな
0962名前は開発中のものです。2014/12/07(日) 22:54:00.16ID:wobTMwax
実時間を捨てて何かの達成回数とかにしたほうが楽だと思う。
0963名前は開発中のものです。2014/12/07(日) 22:54:41.55ID:ljhQ3ELU
>>951を俺だったら、releaseResult関数を作って、プレイ時間だったら1時間2時間10時間とあったら。
まず、1時間以下かどうかだけ調べて、1時間実績開放後なら2時間以下かどうかだけ調べる。

これくらいしか思いつかんな。
0964名前は開発中のものです。2014/12/07(日) 23:22:26.47ID:zrzn7PDv
長くてすいません、ビルドしてないので動くかわかりませんが、起動して5分おきに実績開放処理(最初は1分で実績開放)を
毎フレーム100回走らせるように書いてみました。タイムリリースなど仕込む場合こういう書き方でいいんですかね...
>>963みたいな処理だと多分変えないといけないですよね...
Updata()で配列をfor文で回すのは凄く抵抗あるんですが、どうなんでしょう...

const int arrnum = 100;
bool[] openflag;
int[] TimeCheck;
float timer;

void Awake(){
timer = 0; //setSave
openflag = new bool[arrnum];
TimeCheck = new int[arrnum];
for(int c = 0; c <= arrnum; c++){
openflag[c] = false; //setSave
if(c == 0) TimeCheck[0] = 1;
else TimeCheck[c] = 5*c;
}
}

void Update () {
timer += Time.deltaTime;
for(int i = 0; i < arrnum; i++){
if(!openflag[i] && timer >= TimeCheck[i]){
openflag[i] = true;
//ここで実績開放処理
}
}
}
0965名前は開発中のものです。2014/12/07(日) 23:23:29.61ID:duMchnGW
awakeでいちいち初期化する奴うぜーわw
0966名前は開発中のものです。2014/12/07(日) 23:37:48.33ID:6nkd1Zzi
>>964
とりあえず実際に作ってみてボトルネックだったら相談しに来てください
まだ起きてもいない現象についてどうこういえる人はいません
0967名前は開発中のものです。2014/12/07(日) 23:47:04.57ID:cw/zNIiD
そうか?明示的に偽をセットしておきたいんだろ?

>>964の処理で行けるかなとも思うけど、全く違ってくる処理で実績開放をフラグを立てるものもあるから、これは一例としか言えんね。
この関数は実績クラスの中の一関数に過ぎない気もする。
それに実績も多様になるならリストとかで管理したいな

あと、>>964の処理、単位が秒になってないか?
0968名前は開発中のものです。 転載ダメ©2ch.net2014/12/07(日) 23:47:33.87ID:mPj3cslA
とりあえず実績を解放(管理)する関数作ってupdateで毎回呼ぶようにしとけば管理しやすいでしょ
重くなった時にこの関数を切れば負荷の判定も容易だし
処理を分散させるなりの変更をする時もやりやすいと思うけど
どの程度ゲームが完成してるか分からないけど実績なんてオマケなんだから最後に実装したら?
本人の自由だけどオマケで時間取られて本編が完成しないのはどうかと思う
0969名前は開発中のものです。2014/12/07(日) 23:57:29.10ID:zrzn7PDv
よく考えたらTime.deltaTimeでインクリメントしたら5分おきじゃない気がする...

>>965
Awakeじゃだめなんですかね?
Startとどっちで初期化するべきなのかわからないので一番最初に処理されるAwakeが良いと思ってるんですが。

>>966
そもそもこういう書き方が正しいのかどうかがわからないんですよ
pro版のプロファイラ見たらボトルネックなのかどうか判断できるんですかね

>>967
うっかりしてました〜
Listはまだ勉強途中で、Listに複数の判定変数をどう持たせるべきなのかちょっとわからないんですよね…

>>968
それもそうですかね…StatsのFPSやCPU使用率見てもそこまで変化が無いので、
毎フレーム100回for文回す事は何てことないんですかね…
0970名前は開発中のものです。2014/12/07(日) 23:59:45.00ID:yEbjZ2si
実績処理に使う数値をキャッシュしておいて変数が変化したかどうかを調べ、変化していた時だけ実績のCheckをすればいいんじゃないの
0971名前は開発中のものです。2014/12/08(月) 00:02:55.03ID:XhXwCfjB
Unity+vuforiaを利用してAndroid用のARアプリを作っています。
C#でCamera機能を実装したのですが、
端末から撮影するとGalleryに反映されません。
SDカードの抜き差しで反映する辺り、MediaScanが必要だと分かったものの、
UnityのC#での記述法が全く分からず、途方に暮れています。
自力で調べたところ、Androidのプラグインを呼び出さなければならないとあったのですが、
NDKのインストールをした後、どうすればいいのか手詰まりの状態です。
どうかお助けください。
0972名前は開発中のものです。2014/12/08(月) 01:20:09.50ID:NwpRV4tl
>>969
>>970もそうだし、そもそも実績って逆行しないよね?
時間経過系とかレベル系とか、系ごとにテーブル作ってindexかステートで管理した方がいい。
試しに単一のリストでやるなら、
実績解除クラス{

//解除レベル。レベルそのものではない。
int levelIndex = 0;
//節目のレベル
List<int> levelList = new List<int>{5,10,20,50,99};

//レベルが変わった(上がった)時に外から呼ぶ
public void レベル系実績チェック(int currentLevel){
if(currentLevel >= levelList[levelIndex]){
解放(実績id);//id用にもハッシュがいる
currentLevelIndex++;
}
}
private void 解放(int id){}
}
とか。

とはいいつつ、レベルが飛び級しないなら
Contains()でやっちゃうほうがシンプル。
その場合はListじゃなくてHashSetでいい。
結局Containsの中身はfor文みたいなもんだけど、
そもそもこの例みたいに頻繁に呼ばないから気にしない。
0973名前は開発中のものです。2014/12/08(月) 01:37:47.83ID:nswkqCin
>>943 >>944 >>945
アドバイありがとうス
0974名前は開発中のものです。2014/12/08(月) 01:38:29.15ID:nswkqCin
ありがとうございました でスパム扱いされる・・・
0975名前は開発中のものです。2014/12/08(月) 02:19:49.16ID:RE6rDcDf
>>971
アセットをかえば助かりますよ
0976名前は開発中のものです。2014/12/08(月) 02:24:16.31ID:YwO1C2C1
Update()で毎回判定するのが無駄だと思うなら
コルーチンのWaitForSecondsを使う手もあるよ
0977名前は開発中のものです。2014/12/08(月) 07:12:06.18ID:XhXwCfjB
>>975
ありがとうございます。
どのアセットですか?
IOS用のものなら販売されていますが、
Android用のものがあれば知りたいです。
0978名前は開発中のものです。2014/12/08(月) 09:01:27.25ID:NwpRV4tl
普通に反応されたらされたで困るんじゃねーよwww
0979名前は開発中のものです。2014/12/08(月) 10:12:04.67ID:SWcEblTm
Unity で作っているシーンに対して
マウスやキーボードを自動操縦させて
繰り返しテストを自動で行いたいのですが
何か方法はありますか?

あるいはどのアセットを買えばそれができるようになりますか?ww
0980名前は開発中のものです。 転載ダメ©2ch.net2014/12/08(月) 10:21:20.12ID:NksoxLpC
そういうソフトは普通にあるだろ
少しは自分で調べろ
そんな頭で本当にプログラムできてんの?
0981名前は開発中のものです。2014/12/08(月) 12:02:32.91ID:xpUnwv+U
Unity上でスプライトにPollygonCollider2Dをアタッチするように
スクリプトからアタッチする方法ってありますか?
それともスプライトの形に応じて自動でColliderを生成するのではなく
普通はスプライトの数だけそれぞれColliderを編集しておくものなのでしょうか?
0982名前は開発中のものです。2014/12/08(月) 12:07:59.02ID:1quzVRGJ
>>981
アセットをかえば実装できると思いますよ
0983名前は開発中のものです。2014/12/08(月) 13:18:18.35ID:VBauB1Vr
Googleplay Game Serviceをプラグインから導入しようとしているんですが
ビルドの際に
Error building Player: Win32Exception: ApplicationName='C:\Program Files (x86)\Java\jre7\bin\javac.exe', CommandLine='-bootclasspath

が出ます。
要するに指定の場所にパス通ってないぞ?
ってことなんでしょうが、そもそも自分のjreのバージョンは8です。

ここのプラグインなんですが
https://github.com/playgameservices/play-games-plugin-for-unity

jre8でビルド出来るように出来ないでしょうか。
同じプラグインから導入成功したかた居ますか?
0984名前は開発中のものです。2014/12/08(月) 14:22:18.94ID:5VRsWQc+
>>983
アセットをかって解決しましょう
0985名前は開発中のものです。2014/12/08(月) 17:37:43.65ID:VBauB1Vr
>>983
間違えましたjreのバージョンは7.*
jdkのバージョンが8.*です。

しっかりpathも通ってるんだけどなぁ。
0986名前は開発中のものです。2014/12/08(月) 20:03:15.86ID:XhXwCfjB
アセットを買えば〜というのはネタだったんですね。
真剣に質問していたので真っ正直に受け取ってしまった自分が
なんだか恥ずかしいです。
やはり自力で解決すべきだと痛感しました。
0987名前は開発中のものです。2014/12/08(月) 20:45:23.53ID:VBauB1Vr
>>983
自己解決。。。

ここ3日間くらい悩みすぎて2回ほど吐いた
0988名前は開発中のものです。2014/12/08(月) 22:01:41.28ID:5VRsWQc+
>>986
ネタではないですよ。Unityはアセットがあるからいいのです。アセットをかえばほとんどの問題は早期に解消します。
恥ずかしいことなんて無いですよ
0989名前は開発中のものです。2014/12/08(月) 22:24:35.28ID:SwF87S4N
ネタじゃなくてただの荒らしです
0990名前は開発中のものです。2014/12/08(月) 22:53:03.56ID:/FEHsSSn
精神的に病んでるだから優しくしてあげなよ
0991名前は開発中のものです。2014/12/08(月) 23:54:28.52ID:C0euCyv2
>>988みたいな返しがスクリプトに可能なのか?
どう考えてもスクリプトだろと思ってたが、まさかマジで手動でレスしてるのか?
0992名前は開発中のものです。2014/12/09(火) 01:39:03.07ID:u4mL7if8
なんでアプリストアの凄く綺麗でヌルヌル動くゲームと、俺の小汚い2Dカクカクゲームがどっちも30Mなん?
0993名前は開発中のものです。2014/12/09(火) 02:47:31.85ID:FYaMPrjw
俺もわりと単純な2Dゲームを作ってるんだけど
android版が20M、iOS版が80Mとかになってて不安になる
0994名前は開発中のものです。2014/12/09(火) 03:30:00.66ID:yNwnBmCl
unityでシェーダいじってるんだけどセマンティクスのPOSITIONとUV_POSITIONの違いがわからない。
知ってる人いたら教えてくれー
0995名前は開発中のものです。2014/12/09(火) 11:51:01.22ID:u4mL7if8
>>993
NGUI使ってる?
なんだかんだでインポートしてからファイルサイズ跳ね上がった気がする
0996名前は開発中のものです。2014/12/09(火) 13:26:12.13ID:KvkkIOHH
>>994
http://msdn.microsoft.com/ja-jp/library/bb509647(v=vs.85).aspx
0997名前は開発中のものです。2014/12/09(火) 13:34:53.22ID:4lA1EcVh
>>994
アセットをかえば違いがわかると思いますよ
0998名前は開発中のものです。2014/12/09(火) 13:41:32.54ID:FYaMPrjw
>>995
アセットはGoogleMobileAdsPluginしか使ってない
空のプロジェクトを作って試そうかと思ったが
ゲームも完成させたいので気にしないようにしている
0999名前は開発中のものです。2014/12/09(火) 14:26:52.92ID:Two6fh6w
>>998
Assets/*anydepth*/Resourcesフォルダに画像入れていると使ってない奴も入っちゃうからでかくなるとかじゃないの?
あとはテクスチャやスプライトの指定が16ビットで十分だったりするのにTrueColor指定になってるとこれまたでかくなる(元画像が16ビットとか関係なくimport設定の方)
1000名前は開発中のものです。2014/12/09(火) 14:44:29.94ID:Q0GG68g+
               __
              ,,.-..''":::::::::::::::::゙''.‐.、
      __,,,_ /:::::::::::::::::∧:::::::::::::::::::\
     /:::::::::/::::::/::/_/|::/ ヽ:|ヽ::|l::::i:::::::V'''..ー.、
   /:::::::::::/::/::/ト'レ⌒レ   ヽ⌒:|`ヽ|::::i:ヽ::::::::::::ヽ、
   /:::::::::::::::|::/|/レr''";;;ヽ   '"゙;;;゙`ヽ::|::::|:::i::::::::::::::::ヽ
  ./::::::::::::/レ. |. i"|;::::;;;;;;|   |;;;;;;;;;;;;| ゙i::|::ト'''ヽ、:::::::::::::i
  i:::::::::/  | y l i;;;;;;;;;;ノ   i;;;;;;;;;;ノ l レ`)|  ヽ、::::::::|
 └ '"     ヽ」.  `'''''"    `'''''"  .r ノ    ヽ、::ノ
          ヽ,      r─‐┐    /‐'
            ヽ、┌‐┴─┴‐┐_/  
            |    /OOO|
            |    ''''"" |
            ○      ○
            |       |
            L_____」
             /,,L,|__|__L.i
              ト┤ト┤
              r'-|. |-'、
                   ̄.  ̄
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。