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

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

レス数が950を超えています。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←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
注意事項:アセットおじさんは優しく愛でましょう
0891名前は開発中のものです。2014/12/06(土) 05:24:59.71ID:mf0JoPih
>>889-890
ありがとうございます。Vector3にしたらできました。回転とかは使わないです。

解決したんですが中身を全部newというのがわからないです。具体的にどうすれば良かったんですかね?
配列の領域確保はできているわけじゃないですか。Vector3についてはnewしてるし・・・
0892名前は開発中のものです。2014/12/06(土) 07:31:57.71ID:q5dIpTXb
>>891
C#の本読めば解る事だけど
public Transform[,] _spawnPoints;
↑は_spawnPointsって言うTransform型の2次元配列の宣言
_spawnPoints = new Transform[4,3];
↑はTransform型の2次元配列の設定
でも_spawnPointsはTransform[,]を持っているが
_spawnPoints[0,0]は未だにnull値

ついでに言うとTransform型はcomponentなんで直接インスタンス生成できないよ
0893名前は開発中のものです。2014/12/06(土) 10:22:51.35ID:uw5cyAGI
>>891
プログラムは大変ですね。Unityにはアセットがあります。
アセットをかえばプログラムは要りませんよ
0894名前は開発中のものです。2014/12/06(土) 13:29:28.98ID:ofIL77Rn
C#のclassとstructの違いだな
0895名前は開発中のものです。2014/12/06(土) 15:17:17.76ID:3apivZD4
GetInstanceID()について

上でゲームオブジェクトに固有IDを自分で付ける事はできないってあるけど
コンポーネントには付けれるんだよね?

ググったら

//インスタント生成しながら、ゲームobj設定
clone = (GameObject)Instantiate(p_Block_01,xxx,xxx);
//スクリプトコンポーネント Block01 で定義
Block01 Block01obj;
//IDをつけたいobjのスクリプトコンポーネント呼び出し
Block01obj = clone.GetComponent<Block01>();
//IDを与える
Block01obj.BlockID = init.BlockNum;

ってあったんですが、これはオブジェクトコンポーネントへのID設定なので
ユーザーが自由につけれるって事ですよね?
0896名前は開発中のものです。2014/12/06(土) 15:25:22.29ID:S3PdYDgG
>>895
>ユーザーが自由につけれるって事ですよね?

アセットをかったら自由ですよ
0897名前は開発中のものです。2014/12/06(土) 15:49:37.87ID:UmobguLX
>>895
それはスクリプト(Block01)にID用のメンバ(BlockID)を用意してるから当然自由に値を入れられる
自由だからコードをミスれば重複や見当違いの値が入る可能性が考えられる
GetInstanceID()で得られるインスタンスIDとは違う
0898名前は開発中のものです。2014/12/06(土) 16:15:54.98ID:3apivZD4
>>897
すみません、よく見たら意味が分かりました
単なるフィールドにユニークな値を入れてそれをIDとしてるだけって事ですよね
勘違いしていましたすみません
0899名前は開発中のものです。2014/12/06(土) 16:44:07.63ID:lq1gU5pb
public class Test1 {
 GameObject aa;
 public void init( GameObject a){
  aa=a;
 }
 public void Honge(){}
}
public class Test2:MonoBehaviour{
 public GameObject Pref1;
 Test1 test1Obj;
 void Init() {
  test1Obj = new Test1();
  test1Obj.Init( (GameObject)Instantiate(Pref1) );
 }
 Start(){ Init(); }
 Update() {
  test1Obj.Hoge();
 }
}
//
こんな風なソースなんですが、実行中にソースを修正したりすると test1Obj.Hoge();
のところでNullReferenceException が出てしまいます。
実行中のリコンパイルのあとに test1Obj がnullになっているようなのですが、
Unityの作法的にnewはしないのが正しいのでしょうか?
対処法が思いつきません、知恵を貸してください…
0900超初心者2014/12/06(土) 16:45:11.85ID:77qq4iMC
超初心者ですが、4.6にしたら
空のgameobjectを作ってコンポーネントでGUIText追加したのですが
表示されません。どなたか教えて頂けませんか?
0901名前は開発中のものです。2014/12/06(土) 16:47:21.17ID:lq1gU5pb
>>900
canvasを先に作ってその下に他のUIは配置すれば表示されるよ
GameObject
 Canvas
  Text
こんな感じのヒエラルキで。
出すだけならGameObjectはなくてもOK
0902超初心者2014/12/06(土) 17:04:03.15ID:77qq4iMC
>>901さん
有難う御座います。
GUITextでは、駄目なのですか?
少し古い本に、そのような手順であったもので・・・
UI Text配置だとsciptエラーになってしまいます(汗
0903名前は開発中のものです。2014/12/06(土) 17:09:01.96ID:lq1gU5pb
4.6からちょうどUI周りが一新されてるので
古いUIを使うなら
http://japan.unity3d.com/unity/download/archive
ここから4.5.5とか落としてくるのがよさそう
0904超初心者2014/12/06(土) 17:12:10.96ID:77qq4iMC
ご親切に有難う御座います!
やはり、新しいバージョンは大変なんですね・・
unity5とかの購入は改めた方が良いのでしょうか?
0905名前は開発中のものです。2014/12/06(土) 17:17:18.60ID:UmobguLX
>>899
Hongeになってますけど
0906名前は開発中のものです。2014/12/06(土) 17:18:56.48ID:lq1gU5pb
大変っつーかまだ情報が少ないだけで
そのうち4.6や5.0向けの本も出るんじゃないのかなと
覚えることが多いのは4.5.5も4.6も一緒だしね

ライセンス購入しなくてもだれでも使えるのがUnityだけど
Pro版の機能を使いたいならそうするしかない
まぁお好きにとしか言えませんけどね(・∀・)
0907超初心者2014/12/06(土) 17:25:06.14ID:77qq4iMC
有難う御座います。
頑張ってみます!
0908名前は開発中のものです。2014/12/06(土) 17:28:13.30ID:lq1gU5pb
>>905
構造だけ合わせた擬似コードでそこはタイプミスです
本物のコードはここに掛けるほど短くないので…

・通常実行〜編集している最中は問題なく動作していて、リコンパイルがかかった瞬間にオブジェクトが消えてしまう
・該当ソース以外を修正していても発生する
・条件がリコンパイルだけなのか判別が付かない(今のところ動的リコンパイル時にしか発生してない)
終了→実行の手順で元通り動くのですが、動き・処理の調整などは実行しながらの修正でやっていたので
それが出来なくなって困っています。
0909名前は開発中のものです。2014/12/06(土) 17:39:54.57ID:clhTOfm8
>>899
なぜ実行中に自由にソース弄れるもんだと思ってるのか。
普通はリコンパイル後に一から実行する必要があるでしょ。
再生が強制的に止まらないのはUnityの優しさ。
0910名前は開発中のものです。2014/12/06(土) 17:53:39.41ID:lq1gU5pb
>>909
自由にっつーか数字を調整したりするのは動いていたし
実行中でも変更を検知してリコンパイルが自動でかかるのは
それを見越した仕様だからじゃないの?
0911名前は開発中のものです。2014/12/06(土) 18:07:03.79ID:sWkRTglr
>>909

unityタスク切り換え時に内部でリコンパイルしてるよ
再生中にタスク切り換えてコード書き換えてみ?

エディタ画面に戻って来てエラーが無かったら何事もなくコード反映して動く
何気に凄い仕様
0912名前は開発中のものです。2014/12/06(土) 18:12:11.07ID:clhTOfm8
ちなみに変数を弄るだけならpublicにするなりしてインスペクタに露出させてやればいい。
再生中のリコンパイルで全スクリプトのAwakeやStartが再度実行されることは無いから
オブジェクト参照は失われる事がほとんどだろうね
0913名前は開発中のものです。2014/12/06(土) 18:28:20.10ID:lq1gU5pb
初期化をUpdate()内でやるようにしても駄目だった。
class Test1 をstructで動く形に変更して new しない構造にしても
プレハブからInstantiate()したオブジェクトの参照を保存してる 899 でいうところの
GameObject AA がnullになって結局だめだった。
リコンパイル時に参照の保存ができない、てことなんだろうかとおもったが
他の部分では似たような感じでInstantiateでつくったクローンのスプライトは保持されてる。
よくわかんないや

とりあえずnewは関係ない、てのだけははっきりしました。
ググってもNullRef~~が出てる人はちらほら見かけるけど違うケースみたいだし
自力でこうならない構造を探してみます。
0914名前は開発中のものです。2014/12/06(土) 18:33:22.95ID:q5dIpTXb
>>913
publicでもserializable指定もない変数がコンパイル後にreloadしたときにnullになるからしかたない
やってやれないことはないがとても面倒(作っているのがEditor拡張ならやる意義ある)
0915名前は開発中のものです。2014/12/06(土) 18:43:50.28ID:lq1gU5pb
>>914
諸々publicにしてみたけど駄目でした。

これはもう行儀の悪いプログラムだとしてUnityで問題のないC#の書き方を
勉強するほうが建設的かな、と思った。
デザインパターン的に美しくなさ過ぎるとか
参照の持ち方とかばらけてる感じはしているので修行がたんないなーと。

お騒がせしました
0916名前は開発中のものです。2014/12/06(土) 18:52:08.38ID:S3PdYDgG
>>915
アセットをかえば修行は要りませんよ
0917名前は開発中のものです。2014/12/06(土) 19:28:38.71ID:bAfHOFFE
unityで使えるプログラミング言語は3種類ですが、このなかで学んでおいた方が良い言語はなんですか?
難度ではなく、よく使われている、就職で有利になる、現場で使えるような言語を教えてください。
0918名前は開発中のものです。2014/12/06(土) 19:29:56.95ID:S3PdYDgG
>>917
言語は要りませんよ、UNITYで一番使われているのはアセットですから
0919名前は開発中のものです。2014/12/06(土) 19:41:00.20ID:q5dIpTXb
>>915
生のclassをexportableにするのは無理(structは結構行けるが持ち方の問題が大きい)
>>917
C#にしとけ
UnityのJavascriptは実はJScriptって言う変種でしかない(本来のJavaScriptはプロトタイプベースと言う分類でJScriptの様なclass指向じゃない、そのためJavascriptと思っていると罠に落ちる)
Booはサポート終了

unity javascriptでも十分書けるけどコンパイル順序とかのめんどくさい仕様のせいで躓くと時間がもったい無い。
0920名前は開発中のものです。2014/12/06(土) 19:52:22.61ID:bAfHOFFE
>>919
返答ありがとうございます。
C#で開発させていただきます。
0921名前は開発中のものです。2014/12/07(日) 01:44:46.18ID:qztY5xMY
Google playのランキングシステム使おうかと思うんだけど、
まずAndroidの内部ストレージって簡単にアプリ内データを弄れるのかな?

弄れるとしたらチートだらけのライキングなんて萎える要素にしかならないのでやめようかと。

あとAdMobの インタースティシャル広告表示が難しい、、、
Unity用のパッケージどこかにないしら?
0922名前は開発中のものです。2014/12/07(日) 01:53:17.73ID:gXPUYEQO
JavaScriptの変数をC#内でも適用できる方法教えていただけませんか?
例えば「Java.js」という名前の javaスクリプト内で
public static var Switch = false;
と定義した変数Swichのfalse,trueの変化をC#でも適用できる方法です
よろしくお願いします
0923名前は開発中のものです。2014/12/07(日) 02:28:06.97ID:Ln5oPSuW
>>922
>>919が書いてる面倒事がこれ
コンパイル順序の関係でjsコードの参照がcsharpから見えない
簡単に解決するなら優先的にコンパイルされるPluginsフォルダかStandard Assetsフォルダに自分のjsコードを移動する

ここの最後の方とか
ttp://archan.hatenablog.com/entry/2012/01/31/162712
公式のこことか
ttp://docs-jp.unity3d.com/Documentation/Manual/ScriptCompileOrderFolders.html
0924名前は開発中のものです。2014/12/07(日) 02:35:54.86ID:jSS5HbXB
簡単なカードを使ったテーブルゲーム(超簡単な遊戯王みたいな)を作る場合
こういう処理やメソッドが必要だろうなというのをだいたいでいいので教えて下さい

例えばサイコロを使うと思うからサイコロにアタッチするrigidbody、addforceなどがいるだろう、的なレベルでいいので
0925名前は開発中のものです。2014/12/07(日) 02:37:05.25ID:jSS5HbXB
途中で書き込んでしまった・・・

カードは複数あるのでinstantiate、HPや属性などは全てのカードに共通するので
interfaceも使うから覚えておいた方がいい、とか

そういうのを適当に列挙して欲しいです
0926名前は開発中のものです。2014/12/07(日) 03:25:59.09ID:xZw7sF97
>>925
ゲームマネージャークラス作る。
ターンのフロー考えて整理する。
マネージャー内はenumでステート管理。
適宜Inputを取得してステート進行。
デッキクラス、カードクラス等を作成。
最初はテキストとDebug.Logで簡易実装。
画像表示に置き換えていく。

っていうか、大体はわかってるみたいだし
何かわかんない事出てきてから聞きにきて欲しいな。
やみくもに挙げるのは無駄が多くて面倒。
0927名前は開発中のものです。2014/12/07(日) 03:27:25.06ID:jtV7k+Ho
マリオ64みたいな、三人称視点のアクションゲーム作ってるんだけど、例によってカメラの実装が面倒。
何か良いアセットか、参考にできるような資料ない?
0928名前は開発中のものです。2014/12/07(日) 08:19:28.45ID:0aDyQXl4
>>927
TPS用のアセットって無かったけ?
せめてTPSでアセットを検索するかunity+TPS+カメラでググッてから来いよ
これ書きながらググッたら普通に出まくったし付属のやつでできるみたいだし
そんなスタンスじゃ一生掛かってもクソゲー1つ完成させられんぞ
0929名前は開発中のものです。2014/12/07(日) 10:40:32.48ID:j9nR8QPV
デカイ図書館があれば、Game Programming Gemsとかに
カメラについての記事もあるかも?
0930名前は開発中のものです。2014/12/07(日) 10:44:40.88ID:Ln5oPSuW
>>929
あの本は買う価値あるけど高いよね、8巻全部買ったけど
0931名前は開発中のものです。2014/12/07(日) 10:45:51.82ID:jPpyuGUS
>>927

公式のチュートリアルプロジェクトみてる?
0932名前は開発中のものです。2014/12/07(日) 11:25:25.65ID:14KehsFw
馬鹿な質問するやつは聞くまでもなく公式すら見てないって相場が…
0933名前は開発中のものです。2014/12/07(日) 12:23:43.41ID:jPpyuGUS
まあ、あれも日本語化されてないからな・・・
どれぐらい差がついてるんだろう海外と
0934名前は開発中のものです。2014/12/07(日) 12:41:39.12ID:f49w6oQw
実際にやってみもしないで具体的でない質問するヤツはホントどうにもならんねw
基本「FF作りたいんだけど?」と変わらん。
0935名前は開発中のものです。2014/12/07(日) 13:05:42.19ID:qzGqO/Uy
今時ファイティングファンタジーとかありえんわ
0936名前は開発中のものです。2014/12/07(日) 13:11:18.43ID:jPpyuGUS
3DPlatformTutorialStartってもう公式にないのね
何故無くしたのだろう…

ファイナルファイトは俺も作りたいと思ってたよ
0937名前は開発中のものです。 転載ダメ©2ch.net2014/12/07(日) 13:48:29.83ID:t3S2YXT3
>>924みたいなunity以前の質問や
>>927みたいなググれば大量に出てくるような事を質問するバカはゲームを完成させられる訳ないんだから答えるだけ無駄
>>927に至っては長々と文章書いて質問するよりも数文字のキーワードでググった方が遥かに早いんだぜ?
最近の小学生の方がマシなんじゃね?ってレベル
0938名前は開発中のものです。2014/12/07(日) 14:19:45.97ID:TwZnmKcy
アセットをかえば全て解決すると思いますよ
0939名前は開発中のものです。2014/12/07(日) 16:51:11.52ID:jSS5HbXB
>>926
ありがとうございます。
0940名前は開発中のものです。2014/12/07(日) 17:31:09.89ID:1BE7ujaa
アイテムのシステムについて詳しく載ってる書籍ありますか?

色々探してるんですが殆どアクションゲームの作り方の本ばっかりなので・・・
本などを参考にしたという方がいれば教えていただきたい
0941名前は開発中のものです。2014/12/07(日) 17:53:27.91ID:lUkbAcJu
ステンシルテスト以外で画像の切り抜きする方法って無いでしょうか?
NGUI3.x系で使えるスクロールビューのサンプル動画を見ていて
矩形外に出た画像が切り抜かれてるような挙動をしてるの見て
Unityでステンシル使うのはPro版必要だったと思うしどうやってるのだろうと思ったものの
さっぱり分からなかったのでその辺詳しい人いたら教えて欲しいです
0942名前は開発中のものです。2014/12/07(日) 17:56:26.87ID:TwZnmKcy
>>940

本は買わずにアセットをかいましょう。アイテムシステムも簡単です

>>941
画像の切り抜きにはアセットをかいましょう。簡単ですよ
0943名前は開発中のものです。2014/12/07(日) 18:09:43.83ID:6U59HLYv
>>940
結論から言うとそんな本は無いです

まずゲームによってアイテムのシステムは変わりますのでこのシステムを実装するとOK的なものはないと思います
次にあなたが作ろうとしているアイテムのシステムがどんなシステムなのかあなたにしか分かりませんので誰もアドバイスできません

RPG系でしたらRPGツクール関連の本にもしかしたら書いてあるかもしれません
0944名前は開発中のものです。2014/12/07(日) 19:09:24.96ID:Ccg3Xa8F
市販ゲームのセオリーを一から十まで教えてくれるプロなんてこんなとこにはいないんだし
素人のプログラムなんて思い通りに動けばそれで正義なんだよ
0945名前は開発中のものです。 転載ダメ©2ch.net2014/12/07(日) 19:14:24.80ID:t3S2YXT3
>>940
多分本は無いけどRPGの作り方の動画は結構あるからその中で扱ってるかもしれない
どんな仕様にしろexcelなりでデータを管理しないとやってられないからまずはexcel等で管理するやり方を探した方がいいと思う
コレはググれば腐る程出てくるからやりやすいものを選べばいい
0946名前は開発中のものです。2014/12/07(日) 19:29:59.07ID:U4H1rzfn
>>941
ステンシルテストは4.6からフリーでも使えるようになってなかったっけ?
ステンシル以外の方法だとレイヤーとカメラを組み合わせれば可能
0947名前は開発中のものです。2014/12/07(日) 19:45:25.19ID:TwZnmKcy
ググってプログラムの勉強するよりも、アセットストアで検索するほうが早いですよ
0948名前は開発中のものです。2014/12/07(日) 19:56:40.72ID:Ln5oPSuW
>>941
NGUIの切り取りはshaderで実装されてる
追いかけるのは大変かもしれない。
0949名前は開発中のものです。2014/12/07(日) 20:41:30.75ID:ljhQ3ELU
プログラムやゲームとして、崩壊してる手法だろうけど、
中間の値をemptyObjectのtransformとかにでも放り込んでやれば、一応Java Scriptとc#間での値のやり取りはできるよね…
0950名前は開発中のものです。 転載ダメ©2ch.net2014/12/07(日) 20:56:36.47ID:t3S2YXT3
>>940
アセットを買えばアイテム管理は簡単にできますよ








宗教上の理由で無料の物しか使えないならダメだけど
$5払えるならこれでも買ってみたら?
XML Database of Items
https://www.assetstore.unity3d.com/jp/#!/content/23385
見た感じググれば出てくるレベルの物っぽいけど簡単にアイテム管理できるんじゃない?
0951名前は開発中のものです。2014/12/07(日) 21:40:34.50ID:zrzn7PDv
ゲームプレイ中にスコアなど複数の値を参照して実績を開放する処理ってUpdata()で毎回スコアとか色々な変数を参照して
条件と開放フラグを実績の数分for文で回して、if文で変数とフラグの判定するんですか?

例えば実績の種類が200個あるとして秒間1万2千回捜査するとんでもない処理な気がしますが、そんなやり方しないですよね...
お金が無いので残念ながらアセットは買えませんが、C#で効率的な実績の開放の仕組みはどうすればよいでしょうか?
0952名前は開発中のものです。2014/12/07(日) 21:44:49.45ID:duMchnGW
必要なときだけ関数呼ぶだろ普通
0953名前は開発中のものです。2014/12/07(日) 21:49:25.75ID:qzGqO/Uy
>>951
それでいんだよ
まずは動けばいい

何もしないでこうすればいいとか聞いていつまでも何もしないアホだと
アセットおじさんになる
0954名前は開発中のものです。2014/12/07(日) 21:51:37.33ID:G01DPf5Q
>>945
ありがとうございます!やってみます
0955名前は開発中のものです。2014/12/07(日) 22:06:01.54ID:Rx2GFKeA
例えばお金を増やすときは必ずAddGoldメソッドを使う、というように
同じ処理は一ヶ所にまとめて、お金の量に関する実績の判定も全部そこで行う
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
精神的に病んでるだから優しくしてあげなよ
レス数が950を超えています。1000を超えると書き込みができなくなります。