トップページgamedev
984コメント389KB

【3Dゲームエンジン】Unity質問スレッド1

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2012/04/20(金) 13:11:07.27ID:wu5IoHob
3Dゲームエンジン「Unity」の質問に優しく答えるスレです。

Windows/Mac用。JavaScript/C#/Booといった汎用言語を使用できるのが特徴です。
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3他

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

■本スレ
【3Dゲームエンジン】Unity 13
http://toro.2ch.net/test/read.cgi/gamedev/1334399781/

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

●リンク
・Unity(日本公式サイト)
 http://unity3d.com/japan/

・ユーザーガイド&リファレンス
 http://unity3d.com/support/documentation/
 (日本語訳)
 http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/Manual/
・チュートリアル
 http://unity3d.com/support/resources/tutorials/
・FAQ
 http://answers.unity3d.com/index.html
・Unityのスクリプト公式
http://unity3d.com/support/documentation/ScriptReference/index.html

・MSDN
http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
0188名前は開発中のものです。2012/04/28(土) 12:49:16.17ID:vgw1yD7b
>>185
125と126のnewMaterialを適当な名前に置き換えればokだったと思う
newMaterial2とか
0189名前は開発中のものです。2012/04/28(土) 13:01:06.90ID:c3Xjxk2j
>>188
http://upload.fam.cx/cgi-bin/img-box/ak3120428125818.jpg
やっぱり無理みたいですね。
>>187
消してもやっぱり一緒でした。
0190名前は開発中のものです。2012/04/28(土) 13:08:23.17ID:IcajE+xP
>>189
そっちじゃない。
>>188が言ってるのは125行目の左側の変数だよ
同じ変数名のやつをリネームせんと

スペースは不要
0191名前は開発中のものです。2012/04/28(土) 13:21:14.53ID:I/CCHCTr
おお、なんで>>189になるんだ
125-126行目の変数名置き換えるなら

for (var newMaterial2 in fade.alphaMaterials)
;
Destroy(newMaterial2);

こうだよね
0192名前は開発中のものです。2012/04/28(土) 13:21:38.30ID:I/CCHCTr
へんな改行入ったけどそこだけスルーしておくれ
0193名前は開発中のものです。2012/04/28(土) 13:29:33.53ID:Xyyt2mPD
>>178
描画の仕組みを詳しく知ればわかるんだけど
描画する順番なんて単純な問題じゃねーんだよ
3Dの描画はZバッファちゅーもんが描き込み時にピクセルごとのZ値を保持しておいて
次に描くもんが描画するべきか否かを判断してるっちゅーわけよ

なので前後ろをきっちりわけたいゆーことは
このZバッファをクリアして次のもんを描画するか(その場合3D前後は保障されないポリゴン単位でおかしくなるので注意が必要)
Zバッファ機能をそもそもOFFにすることが必要になる

大抵3Dの描画は速度アップのために
不透過オブジェクトは前から描画(そうすることで後ろのもんは描画しなくてよいのでかなりの速度アップが見込める)
透過オブジェクトは後ろから描画(透ける=後ろのものから描画しないといけない)
になっているのでたとえZバッファをクリアしてオブジェクト同士の問題を解決したところで背景に一気に塗りつぶされる危険アリ
理由はわかるな

市販のもんできっちり前後わけられてるようなゲームはおそらく
どっかのテクスチャに一旦描画してそれをビルボードかなんかでもう一回描画してんじゃなかろーか?
0194名前は開発中のものです。2012/04/28(土) 13:30:48.46ID:c3Xjxk2j
>>191さんの通りにやったら無事にプレイ画面に行きました。ありがとうございます
>>190
勘違いですいませんでした。
0195名前は開発中のものです。2012/04/28(土) 16:39:59.08ID:0wIWnV8V
webプレイヤーって30fpsがデフォルトなん?
0196名前は開発中のものです。2012/04/28(土) 17:16:24.87ID:5VYsZfDo
そんなことはない
0197名前は開発中のものです。2012/04/28(土) 22:03:16.95ID:iL/JqVi1
デフォルトいくつだっけ?
0198名前は開発中のものです。2012/04/28(土) 22:07:20.48ID:BKsWWcMX
確認できませんか?
0199名前は開発中のものです。2012/04/28(土) 22:19:04.61ID:AIlp/IeL
質問です
blenderから読み込んだ3dモデルがrigidbodyを追加しても他のrigidbodyを追加したオブジェクトを通過してしまいます
どうすれば物理挙動をしてくれるのか教えて下さい
0200名前は開発中のものです。2012/04/28(土) 22:34:09.63ID:0wIWnV8V
>>199
それは検索した方が早いよ。
0201名前は開発中のものです。2012/04/28(土) 22:59:21.98ID:AIlp/IeL
>>200
改めて検索したら出てきました、スレ汚してすいません
0202名前は開発中のものです。2012/04/29(日) 01:15:11.45ID:pJw9ouEu
3DPlatformTutorialはバージョン古いときの奴で今といろいろ違ってトラブル出るし
ちょっとUnityやプログラム理解しないと対処しづらいからチュートリアルとしてはちょっと、と思った
0203名前は開発中のものです。2012/04/29(日) 01:20:49.11ID:eMZ/a5pp
>>202
質問以外は総合スレに書くようにしてくれまいか。すまんね。
0204名前は開発中のものです。2012/04/29(日) 03:15:26.99ID:0edDrWsF
自分アニメーションは基本AnimationStateのオンオフで部分ごとに使い分けてるんだけど
これだとCrossFadeの時みたいに自然な切り替えができない

こういう場合、やっぱりWeightをいちいち変えていかないとダメかな?
0205名前は開発中のものです。2012/04/29(日) 03:19:37.98ID:eMZ/a5pp
なんだか良くわからんがアニメーションレイヤーはわかる?
0206名前は開発中のものです。2012/04/29(日) 03:41:34.26ID:0edDrWsF
知ってるって何が?全然関係なくね?
0207名前は開発中のものです。2012/04/29(日) 03:57:01.98ID:eMZ/a5pp
なくねえよw
0208名前は開発中のものです。2012/04/29(日) 08:53:36.21ID:yhPWZvLq
ゲームエンジンってライブラリと違うの?
C++でも使えますか?
0209名前は開発中のものです。2012/04/29(日) 08:56:15.61ID:VKuklqm4
>>202
同意。FPS Tutorialの方が100倍わかりやすい
0210名前は開発中のものです。2012/04/29(日) 16:04:43.80ID:bxrAnjnF
>>208
どんなライブラリですか?に対して、ゲームエンジンだ、と答えるような場面もあれば、
このゲームエンジンの中の物理演算部分は○○ライブラリを利用してると答えたり

目的やまとまりの概念、その名称のこと

C++でコーディングインタフェースは、Free版での提供は無いけど、
そう言う意味でなく、C++で書いた自前のメインコードから利用する、みたいな意味なら基本的に無理
0211名前は開発中のものです。2012/04/29(日) 17:00:54.76ID:Kav1tEbR
(3D)ゲームエンジン=(3Dゲーム)ツクール
0212名前は開発中のものです。2012/04/29(日) 17:09:10.72ID:XIPPf9sI
ライブラリ、フレームワーク、API、ゲームエンジン、アーキテクチャ
このあたりの言葉って結構あいまいだよね
0213名前は開発中のものです。2012/04/29(日) 17:23:06.81ID:bxrAnjnF
>>212
簡単に言えば文脈と意図の表現だもんな
だから初心者の人がひとつの説明だけで丸覚えの暗記だけで済まそうとすると、
コミュニケーションの道具にも使えないって罠
0214名前は開発中のものです。2012/04/29(日) 17:35:16.20ID:bxrAnjnF
一応念のため、文脈と意図 って話を1レスで補足しておくと、例えば
何かの実装方法について話している時に、方法論的な主題に焦点があったりして、そんな時に
「それは Unityのフレームワークではこういう考え方や手段で実装して云々」 とか、

具体的な何か、例えばラスタ画像処理のパッケージだとか、音声処理だとか、その他もろもろ何でも
処理のパッケージ単位について話す時、「そのライブラリはこういう利用のされかたを想定してるようで云々」 とか

もっと実装の実際のコード、個別な細かい何かについて話す時、「それはこのAPIだと、この関数やクラスで云々」 とか、

全体設計面で、例えば Unityでの描画パイプラインなんかについて話す時、
「Unityのそのアーキテクチャは利用コード側の責任で何々、API側が云々と階層を成していて」 だとか、

ざっくり目の前のフレームワーク、ライブラリ、API群について、その目的について話す時
「これはゲームエンジンと呼ばれる種類のプロダクトで」 だとか、そんな感じの区別。
0215名前は開発中のものです。2012/04/29(日) 17:44:38.01ID:m0pPvQtG
つまりここの人たちって理解の仕方がとっ散らかってるレベルなのね
別の意味で納得した
0216名前は開発中のものです。2012/04/29(日) 18:11:23.05ID:bxrAnjnF
>>215
初心者多いところはどこでもそうだよ
誰でも最初からわかる人なんていないでしょ
0217名前は開発中のものです。2012/04/29(日) 18:11:53.86ID:Kav1tEbR
学問じゃなくて、どっちかというと商売の分野だから、
同じものに違う名前付けたり、時代によって呼び方変えてみたり、環境の変化で指すものが変わってきたりするから、早い話正解はない。
0218名前は開発中のものです。2012/04/30(月) 12:51:59.80ID:EP0Cu66l
モーションの再生を完全にupdateと同期させる方法は無いでしょうか?
どうもフレームの進行とは関係なくモーションが再生されてるようだ。
0219名前は開発中のものです。2012/04/30(月) 17:51:47.76ID:e769/Aem
>>218
deltaTime使ってる?
使わないとアニメーション再生速度に問題が出るよ
0220名前は開発中のものです。2012/04/30(月) 17:53:59.79ID:EP0Cu66l
>>219
いや、使ってません。delta.Timeを応用してモーションの再生速度を規制できるんでしょうか?
0221名前は開発中のものです。2012/04/30(月) 17:59:09.37ID:PXWKZh7d
さすがに検索したらすぐ出るものくらい調べろよ・・・
と思ったが最初に書いたやつが誤字ってるじゃねーか

Time.deltaTime
http://unity-yb.github.com/articles/frame_and_update.html

C#のスレで優しくされたから俺も優しくしておこう
0222名前は開発中のものです。2012/04/30(月) 18:00:31.40ID:PXWKZh7d
と思ったら誤字ってなかった
質問者が勝手にドット入れてただけだった
すまんwww

読んでみてね
0223名前は開発中のものです。2012/04/30(月) 18:02:19.36ID:e769/Aem
誤字って何処の事?

取り敢えず使ってる言語判らないけどこれ見て試してみて
http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/ScriptReference/index.Keeping_Track_of_Time.html
0224名前は開発中のものです。2012/04/30(月) 18:12:19.70ID:EP0Cu66l
>>221
これはスクリプトによって動きを作ってる場合に時間ごとに処理をさせるためのものですよね?
俺が言ってるのはモーションをフレームと同期させたいという事なんですよ。
あるモーションの再生時間を見ると終端がいつも違う値になりますよね?
これだとうまく処理できないんです。なんとかする方法がありませんかね?

>>222
deltaTimeですね。気をつけます。

>>223
animation.Playあたりにこれを使えればいいんですけどね。いや、でもこれ使えても時間に同期するだけか。
0225名前は開発中のものです。2012/04/30(月) 18:17:51.23ID:PXWKZh7d
俺の作ってるゲームはモーションタイミングは誤差で構わないから、あんまり意識してないんだが
FixedUpdate内でdeltaTime使えば、同じ時間のタイミングでモーションを起こして、同じ時間の経過でモーションが終わらないか?
0226名前は開発中のものです。2012/04/30(月) 18:23:29.05ID:lpQAYLg0
unityは可変フレーム式でモーションとフレームを同期させるのは合わないんじゃないの
フレーム管理はエンジン側だろうし
0227名前は開発中のものです。2012/04/30(月) 18:25:23.29ID:EP0Cu66l
>>225
それだと、俺の場合はちょっと重すぎるかな。フレームきっちり終わるように作れって事なんですかね。
1フレームあたりで進行するモーションの速度が違う。その代わりにモーションはフレームのズレを無視して美しく再生されるってことか。
0228名前は開発中のものです。2012/04/30(月) 18:26:44.81ID:EP0Cu66l
>>226
わかるけどね。そういうものが必要とされる状況が少ないから、ほとんどの場合でフレーム無視して作ったとおりに時間通りに再生されるほうが需要が多いというのは。
0229名前は開発中のものです。2012/04/30(月) 18:32:50.22ID:vQGoZ1pl
分かってないじゃないか。
0230名前は開発中のものです。2012/04/30(月) 18:49:28.48ID:PXWKZh7d
FixedUpdateだと重いとかあるの?
基本FixedUpdateだからわかんね

FixedUpdate+deltaTimeじゃないと環境の処理速度によって動作が変わるから困ると思うんだが・・・

フレームとモーションを同期したい理由がわからない
フレーム単位で処理したいだけならFixedUpdateの方が楽な気がするし、
しょぼい環境によってはモーションが飛ばされるから使いたくないってくらいしか理由が思いつかん
0231名前は開発中のものです。2012/04/30(月) 20:07:27.70ID:ErrziFNp
・deltaTimeを使用しない
毎フレームFBXのモーションを1Fづつ読み込むので可変フレームだと環境・状況によって10秒のモーションが11秒だったり9秒にもなる
>>224にあるようにモーションの再生時間がいつも違う値になる

・deltaTimeを使用する
間隔時間で補間するので10秒のモーションなら10秒で終わる

さっき暫く試したけどやっぱ上の様な処理になる

フレームに合わせたいと書いてあるけどUnityはデフォルトでフレームに合わせてFBXからモーション取得するので
FPSが30にも40にも変動する環境上、モーションの再生時間がいつも違う値になるのは当然な気がするのだけど
0232名前は開発中のものです。2012/04/30(月) 20:24:28.55ID:EP0Cu66l
>>229
えっ!?

>>230
モーションの終わりを正確に検出しなければならないんですよ。

>>231
ありがとう。
fixedか…う…ぐっ…
0233名前は開発中のものです。2012/04/30(月) 20:31:22.06ID:PXWKZh7d
deltaTimeを使用しつつ、deltaTimeカウントするだけでいいんじゃねーの
誤差も0.1〜0.2秒くらいだろ
それも嫌なら、正直、ゲーム設計から考え直した方がいいんじゃ・・・

>>231の言う通り、FPS自体が変動するから、完全に同期しても動作がめちゃくちゃになるだけだと思う
0234名前は開発中のものです。2012/04/30(月) 20:32:24.16ID:PXWKZh7d
つか、deltaTime試した?
試してから次のレスを頼む
0235名前は開発中のものです。2012/05/01(火) 01:33:38.87ID:TU0U+0Cb
基本60FPSで出力するところを24FPSで出力してない?

アニメーションの時間がおかしい場合は、その可能性が一番高い。
ツールにもよるけど再生フレーム数と出力フレーム数が違ったりするとたまにそうなる。
0236名前は開発中のものです。2012/05/01(火) 01:56:12.12ID:GjiyNsxP
モーションの再生フレームレートってどこで見れんの?
0237名前は開発中のものです。2012/05/01(火) 01:57:47.41ID:GjiyNsxP
1フレームで1フレームだけどモーションが再生されれば良いのに。
0238名前は開発中のものです。2012/05/01(火) 15:26:40.59ID:E4gFhBmQ
switchcase文の条件分岐15個とかあるんだけどこれって普通?
0239名前は開発中のものです。2012/05/01(火) 15:45:53.01ID:fCkj/PYy
こんなんで1フレームずつ進むかな

var animName : String = "";
var frame : int = 0;

function Start () {
animation.Play(animName);
animation[animName].speed = 0;
}

function Update () {
++frame;
var state : AnimationState = animation[animName];
var maxFrame : int = Mathf.FloorToInt(state.length * 60);
frame = Mathf.Repeat(frame, maxFrame);
state.time = frame / 60.0f;
}
0240名前は開発中のものです。2012/05/01(火) 17:56:54.00ID:fT2gxy1N
>>238
別に問題はない
0241名前は開発中のものです。2012/05/01(火) 21:22:47.67ID:fj4ueXwk
フレーム数を固定にする事もできるの?
0242名前は開発中のものです。2012/05/01(火) 23:51:46.73ID:BRdwkEDi
Asset Store からダウンロードまではできるがインポが…

Error while importing package: Couldn't decompress package
UnityEditor.AssetStoreContext:OpenPackage(String, String)

ちなみに64bit環境。
0243名前は開発中のものです。2012/05/02(水) 00:59:05.18ID:nk4IIMpZ
>>242
保存先のパスに日本語が入ってると失敗するみたい
0244名前は開発中のものです。2012/05/02(水) 01:03:50.14ID:p3i7pKC8
>>242
これなんのアセット?
0245名前は開発中のものです。2012/05/02(水) 14:29:16.34ID:pDXbjGeT
>>241
完璧に固定は不可能だがFPSの指定は可能
指定した値から若干上下するが10にも300にも出来る
0246名前は開発中のものです。2012/05/02(水) 22:03:26.29ID:BRdVmq3F
>>245
d
固定フレーム数の時に処理が遅れた場合って、強制的に描画スキップするのかな?
海外製のエンジンだから、スローになったりするイメージはないんだけど…
0247名前は開発中のものです。2012/05/02(水) 22:59:42.53ID:p3i7pKC8
>>246
エラーが出てスローになる。
0248名前は開発中のものです。2012/05/03(木) 04:28:04.86ID:MBWgnq9z
FPSでリロードする時のアニメーションはどうやって作れば?

マガジンの入れ替えとか結構精密な動作あるから、Blenderで動きだけ作って
Unityにインポートしてから手のボーンの子に武器を配置するのだと、結構誤差がでてくると思う

Blenderで武器もインポートして武器ごとそのリロードアニメーションとして出力するってありかな?

0249名前は開発中のものです。2012/05/03(木) 09:58:03.58ID:sLKpUhPv
>>246
Unity自体は可変フレームレート前提で固定フレームレートにするなんて設定は無いだろ
>>245の言ってるのはApplication.targetFrameRateでフレームレートの上限が設定できるって事でさ

固定フレームってフレームレートが固定されてる状態の事を言ってるなら
常に目標フレームレート以上出してそれを制限するんだから処理が遅れてる時点で実現できてないし
フレームレートが固定されている前提で組まれてる処理の事なら
Time.deltaTimeを見なければそれっぽくなると思うが
当然処理が遅れるとスローになるしアニメーションとかPhysicsの処理は
エンジン側で勝手に時間基準で進められるから
フレーム基準のUpdate内の処理と時間基準のアニメーション・Physicsがずれて変な見た目になりそう

>>239のでアニメーションは無理やりフレーム基準な状態にできるっぽいけど
0250名前は開発中のものです。2012/05/03(木) 22:06:51.51ID:8U2xJ6MB
360のコントローラーを使いたいのですが
Lトリガーで左の武器、Rトリガーで右の武器を使うようなのはどう実現したら良いんでしょうか
9th axisと10th axisがLRに対応してるようなことが海外のサイトに書いてあったのですが、全く反応してくれません

初心者なので用語の使い方が間違っていたらごめんなさい
0251名前は開発中のものです。2012/05/03(木) 22:08:38.21ID:KZvaRW9+
>>250
まず値を取ることから始めましょう。そのパッドはとてもイージーです。俺も苦労しました。
0252名前は開発中のものです。2012/05/03(木) 22:36:53.52ID:8U2xJ6MB
面倒なので3から10まで順に割り当てて見たところ、やはり9と10で理想の動作をしてくれました!
さっきは動かなかったのに・・・

>>251
Debug.Log("L:" + Input.GetAxis("L_Trigger") + " R:" + Input.GetAxis("R_Trigger"));
と書いていましたが、ずっと0と表示されていました
0253名前は開発中のものです。2012/05/05(土) 15:33:40.14ID:4Z1053c5
このSet関数の使い方がわかりません。どなたか教えていただけねえかこの野郎。
http://unity3d.com/support/documentation/ScriptReference/Vector3.Set.html
0254名前は開発中のものです。2012/05/05(土) 17:38:43.33ID:ejQe8rzi
Vector3(1, 2, 3)って内容のv3って変数があった時に、v3.Set(3,2,1)したら
Vector3(3,2,1)に変わるみたいな?
0255名前は開発中のものです。2012/05/05(土) 17:57:57.25ID:4Z1053c5
>>254
ありがとうございます。transform.positionに入れるのと同じですよね?
0256名前は開発中のものです。2012/05/05(土) 18:13:03.31ID:0geYQKDJ
「=」するよりもSet()関数の方が速いという噂。
0257名前は開発中のものです。2012/05/05(土) 18:18:08.06ID:ZLDNkYAd
なんだと・・・
書きなおすの面倒だからいいか
0258名前は開発中のものです。2012/05/05(土) 18:33:56.40ID:L823ItE1
実装とか速度はわからんけど、なんでセッターゲッターがあるかというと、
オブジェクト指向的に入出力は直接アクセスしないでそれ使えってのと、可能ならメソッドチェーンできるから、くらいの意味かね。
0259名前は開発中のものです。2012/05/05(土) 19:52:10.24ID:4Z1053c5
めちゃ勉強になります。
0260名前は開発中のものです。2012/05/05(土) 20:11:18.03ID:ZLDNkYAd
話変わるけど、
俺の場合、VC#のフォームデザイナーでEditorとか作るとユーザーコントロール作って何個も置いたりするから、オブジェクト指向っぽくなるけど、
ゲーム作ってると手続型に近くなるんだよなー

何個も似たようなクラス作って継承するくらいなら、最初のクラスを拡張すればいいじゃん?
みたいな気分になる
マップ管理もキャラクター管理も結局一箇所にデータまとめた方が楽に感じるんだよね・・・
敵と味方と村人の違いは配列に属性持たせてメソッドの振り分けで終わっちまう
0261名前は開発中のものです。2012/05/05(土) 20:44:12.44ID:M8cXfY/C
>>260
そんな事は無い
内容次第
0262名前は開発中のものです。2012/05/05(土) 21:11:16.94ID:4Z1053c5
>>260
>>261
オブジェクト志向できない俺としてはだな。
拡張を繰り返してる内に、
イチから別クラスを立ち上げた方が良いと判断する時って
わかりやすさとめんどくささによるから
人によるというだけの事なのかな?
と思う。
0263名前は開発中のものです。2012/05/05(土) 21:21:21.97ID:ZLDNkYAd
>>261
よければその具体例をくれ

俺の場合、最初にデータ読み込んで、そのデータ通りにキャラを置くから、そこで一緒に管理した方が楽ってなってるのかもしれん
0264名前は開発中のものです。2012/05/05(土) 21:29:31.00ID:L823ItE1
Unityとは関係ないけど、作りこんだクラスなら、あとでいくらでも使いまわしできるけど、
その場限りで同じ処理あるからまとめとけって使い方なら、サブルーチンでも関数化でも同じようなレベルってだけだと思う。
だから、クラスにまとめようが、まとめないでやろうが、そんなに変わりはないってだけじゃないかね。
0265名前は開発中のものです。2012/05/06(日) 04:45:16.32ID:RPhFyz4y
>>264
サブルーチンや函数化ってオブジェクト指向とあんまり相性よろしくなくない?
引数を得て操作した結果を返すってのと、オブジェクトに対して操作要求(メソッド呼び出し)って
意味論的にものすごく相性悪いと思うのだけど
0266名前は開発中のものです。2012/05/06(日) 05:25:43.01ID:pkjhMuV3
>>258
>実装とか速度はわからんけど、なんでセッターゲッターがあるかというと、
>オブジェクト指向的に入出力は直接アクセスしないでそれ使えってのと、可能ならメソッドチェーンできるから、くらいの意味かね。


C#はプロパティが使えるから、セッターゲッターは過去の産物だろ。
0267名前は開発中のものです。2012/05/06(日) 05:39:01.51ID:YNtUl0Kb
>>266
それ、ただのシンタクスシュガーでしょうが…

持ち主が知らぬ間にメンバの書き換えが起こりうる状態を避けたいとか、入出力の際にその判断や関連する動作を書ける、ってのが要点で、

それがメソッドの形でも、それを隠したプロパティの形でも、
意味する所は同じ。
0268名前は開発中のものです。2012/05/06(日) 06:08:39.66ID:pkjhMuV3
>>267
プロパティがあるのにあえてVector3.Setを用意する意味は?
って話じゃ?
0269名前は開発中のものです。2012/05/06(日) 07:05:45.96ID:nuHwIyae
>>268
代入のためだけに一時変数作らなくていいからだろ
0270名前は開発中のものです。2012/05/06(日) 07:12:19.44ID:pkjhMuV3
>>269
うん、そうだよね。
だから>>258のレスは的外れだよね?
0271名前は開発中のものです。2012/05/06(日) 08:32:35.50ID:nuHwIyae
>>270
まあ確かに>>258は的外れになっちゃってるかも
一般的なセッター・ゲッターについて書きすぎてて
元のVector3.Setについての質問とは少しずれてきた感じ
スクリプトリファレンス見たらSetの返り値がvoidになってたからメソッドチェーンできなさそうだし

でも一般的なセッター・ゲッターについてならあまり間違ってない
0272名前は開発中のものです。2012/05/06(日) 09:27:38.84ID:w8We8mJf
>>269
>代入のためだけに一時変数作らなくていいからだろ

float3つ分の一時変数が作られる罠。
Vector3を1つ作るのより遅そうなイメージ。
0273名前は開発中のものです。2012/05/06(日) 10:35:14.26ID:nuHwIyae
>>272
最適化かかると同じになるかもしれないとは一応言っておくが
こんな感じと言えばわかるか

Vector3 piyo;
があるとして

piyo.Set(1, 2, 3);

piyo.x = 1;piyo.y = 2;piyo.z = 3;

piyo = new Vector3(1, 2, 3);

Vector3 temp;
temp.x = 1;temp.y = 2;temp.z = 3;
piyo.x = temp.x;piyo.y = temp.y;piyo.z = temp.z;
書いてるのと同じ

つまりnew Vector3(1, 2, 3);の部分が無駄になる可能性がある
ただし
Vector3 hoge;
がある場合

piyo.Set(hoge.x, hoge.y, hoge.z);

piyo = hoge;
はほぼ変わらんだろう
むしろ読みやすいから
piyo = hoge;
の方がいい
0274名前は開発中のものです。2012/05/06(日) 11:04:35.15ID:5wPGrv4K
よくわからんが数千個だか設置して比べるのが確実じゃね
0275名前は開発中のものです。2012/05/06(日) 12:42:27.21ID:nuHwIyae
>>274の言うとおり試してみるのが確実だがテキトーなテストコードを書くと
キャッシュのヒット率とか最適化の関係で
実際に使う時のコードで計測した場合と別の結果が出る事があるので注意

あと一時変数が作られる程度の無駄なんて1フレームに数回通る所じゃ気にしなくていい
1フレームに数万回以上呼び出される所だと気にしないと遅くなるけどな
0276名前は開発中のものです。2012/05/06(日) 12:43:31.29ID:SEqkI7ox
あくまで一般論だけど、変数1個ずつアクセスできるってのと、
まとめてでしかアクセスできないってのは違う。
0277名前は開発中のものです。2012/05/06(日) 12:54:17.50ID:CgdBpbQW
piyo.Set(1,2,3);

piyo = new Vector3(1,2,3);
それぞれ
500万回実行
俺の環境でそれぞれ
69ms
82ms
何度か回したが
大体1.18倍程度かなあ
参考まで。

ちなみに時間計測にはStopwatchクラスを使用。
0278名前は開発中のものです。2012/05/06(日) 12:57:06.40ID:5y39eaOs
Setの方が早いのか。
0279名前は開発中のものです。2012/05/06(日) 13:27:59.27ID:YNtUl0Kb
>>273
見てる人はわかってると思うけど一応書いておくと、
=で結んでコピーって、C#の場合、対象がstructとclassで動作違うから注意な
structがディープコピーで、classはシャローコピー

structでシャローコピーさせたい場合は ref しないとダメ
0280名前は開発中のものです。2012/05/06(日) 13:44:12.60ID:CgdBpbQW
piyo = hoge;

piyo.Set(hoge.x,hoge.y,hoge.z);
それぞれ500万回も同様にやってみたがそれぞれ、
24ms
60ms
だった。
ドット三連コストの負けか。
0281名前は開発中のものです。2012/05/06(日) 14:08:57.49ID:quxC+YZV
>>280
>>279
0282名前は開発中のものです。2012/05/06(日) 14:11:56.37ID:nuHwIyae
>>279補足助かる
まだC++の感覚のまま書いててたまに間違えそうになるからな

>>280の結果はhogeの読み出しにコストかかってる感じかね
0283名前は開発中のものです。2012/05/06(日) 14:37:56.09ID:CgdBpbQW
>>280
>>277のテストタイムと合わせて考えると、より低レベルで実装されてるであろう構造体のコピーだけってのが単純に速いって感じかも。
0284名前は開発中のものです。2012/05/06(日) 14:46:27.10ID:MCmxwxtm
>>273
もうテスト結果も出たし蒸し返す必要ないけど、一応。

>piyo.Set(1, 2, 3);
>は
>piyo.x = 1;piyo.y = 2;piyo.z = 3;

それは参照渡しの場合ね。
Set関数は値渡しだから、

float x = 1;
float y = 2;
float z = 3;
piyo.x = x; piyo.y = y; piyo.z = z;

って事をやってる。
0285名前は開発中のものです。2012/05/06(日) 15:22:28.54ID:nuHwIyae
piyo = new Vector3(1,2,3);
の時間が
Vector3 hoge;
hoge.Set(1, 2, 3);
piyo = hoge;
ってやってそうな感じの時間だなぁと思ったり

>>284
まあ引数を渡す機構上そうなるのは知ってるんだが
参照渡しの場合はその表記になるって事は
参照渡し版Set関数が実装できてそっちの方が速いって事?
0286名前は開発中のものです。2012/05/06(日) 16:39:13.90ID:t1dXxOYS
ゲーム完成させてから気にしたらよくね?
気になるならC#スレいったらいいと思うよ
タコってくれるから
0287名前は開発中のものです。2012/05/06(日) 17:10:42.61ID:YNtUl0Kb
>>282
C++のイメージで言うと、先にオペレータオーバロードされてないか、
とかが真っ先に浮かぶよな
POD型としてのコピーももちろんそうだけど
■ このスレッドは過去ログ倉庫に格納されています