【3Dゲームエンジン】Unity質問スレッド32
■ このスレッドは過去ログ倉庫に格納されています
フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。
プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他
次スレは>>950以降にできるだけ早く(できれば回答者が回答した後にでも余裕を持って)建てて下さい。
■Unity 2ch Wiki(まとめ、過去ログ、リンク集)
http://www24.atwiki.jp/unity2ch/
●リンク
・Unity(日本公式サイト)
http://unity3d.com/jp
・マニュアル
http://docs.unity3d.com/ja/current/Manual/index.html
・チュートリアル
http://unity3d.com/jp/learn/tutorials
・スクリプトリファレンス
http://docs.unity3d.com/ja/current/ScriptReference/index.html
・FAQ
http://unity3d.com/jp/unity/faq
・MSDN
http://msdn.microsoft.com/ja-jp/ms348103←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
前スレ
【3Dゲームエンジン】Unity質問スレッド31
https://mevius.5ch.net/test/read.cgi/gamedev/1504366121/ クラスは本来newしてインスタンス化しないと呼び出せない筈。
(生成前に呼ぶと、実体が無いからコンパイラに怒られる)
普通は使う時にインスタンス化してコンストラクタで初期化して実体にする。
不要になったらdeleteで破壊、その時に呼び出されるのがデストラクタ。
newとdeleteがセットで、newしたものは必ずdeleteしないといけない。
C#は初期化しなくても勝手に初期化されるとか、MonoBehaviourが介入してて、
ルールが厳格でないし、あとC#自体が緩い。 >>526
大正解
>>527
手抜き
そして俺も手抜き
>>528
初心者が理解できないマニュアル的回答 >>523
これでわかったな
てめえで調べろ!
沢山調べて自分に分かりやすい場所を見つけろ 明示的にインスタンスの生成と破壊をしないから、分かりにくいっつーだけだが、
多分C#だけとかUnityだけじゃ分からないんでないの? 2017を最初インストールしてその時はちゃんと動作してて、その後Unity5に入れ直して、また5消して2017入れ直して、2017を起動したら
・MSVCP120.dllが見つかりません。再度インストールし直すと解決する可能性があります。
・MSVCR120.dllが見つかりません。再度インストール・・・
と2つエラーが出て起動できなくなって何度アンインストールして入れ直しても同様に起動できないのですがどうすればいいのでしょうか >>531
初心者のインスタンス分からない病はそれ以前の問題
何故インスタンスが必要なのか
インスタンスのメリットとかの概要から説明しないとだめ >>512
>アセットストアから購入した3dモデルをインポートし、 fbxをヒエラルキーに追加しました。
これでインスタンス化=ヒエラルキービューに配置されてる
>>521
>インスタンス化した状態で実行したら全てうまくいきました。
???
512で言った通り、GameObject.Find ("f05_blazer_020_h"); が見つかる時点でインスタンス化されてるんだけど・・・
GameObject.Findってシーン上のオブジェクト探すものだよね
あとf05_blazer_020_hにkuriControllerが付いててGetComponentした場合、失敗するケースなんてないと思うんだけどなあ
ほんとについてるの?って思う
自己解決されてるようだが、謎 >>534
高卒専卒プログラマにはこれが理解できないんだよな
理系大卒を未だに採用しないといけない理由がこれ KuriControllerとkuriController >>523
>変数にゲームオブジェクトを代入するとメモリが確保されてそれが実体です。と覚えてるけど合ってる?
初心者はコード乗っけた方がいいと思う。言葉だとざっくりしすぎ
var go = new GameObject();
⇒これならgoという変数にゲームオブジェクトがインスタンス化=実体化される。
[SerializeObject] GameObject otherGameObject;
var go = otherGameObject;
⇒これは変数に参照を渡しただけでメモリ確保とは言わない。
int n = 10;
配列じゃない数値型を初期化しかときにメモリ確保なんて言わないよね。これと一緒 知り合いのゲーマーがUNITYのゲームはクソゲーしか無いからUNITYで作るなと言われました
どうしたらいいでしょうか? >>540
ゲーマーが喜ぶようなゲームを作るにはUnreal Engineを使いましょう
Unityは簡単に安く低スペックでゲームを作れることが強みです インスタンスの説明はここでは無駄だと言ってるのに何で続けてるんだお前ら?
初心者を完全に理解させる説明するにはメモリー本体のハードウェアの話しと
メモリーのアドレス空間、そしてC言語のアドレスとポインタの説明が必要不可欠なんだよ。 >>535
具体的には、ヒエラルキー上で青色のf05_blazer_020_hに対して
うまくいかなかったものを、
メニューのGameObject -> BreakPrefabInstance
を実行して黒色にしたらうまくいくようになりました。
「インスタンス化したら」という表現は適切でない書き方でした。すみません。
たしかにヒエラルキーにあれば、黒も赤も青もインスタンスはインスタンスですね。
あれ?でも別のヒエラルキー上の青色のオブジェクトに対しては
別オブジェクトからgetComponentできてる・・・
うまくいったのは別の理由?と思ったけど、それ以外操作してないんだよなあ・・・ 何も理解してないことを認識できてよかったな
無知の知だよ >>544
いや、正直あんま理解せず使えるもんだから、まぁこうすりゃ動くねいままで作ってきた私には、理解した上で、先の説明は合点がいったw
上の先生方、ありがとう。 >>544
あほくさ
>>546
プレハブとのリンク切ったからGetComponentできるようになりましたなんて、ありえないよ
まあなにかほかの要因でしょう コンポーネント名が小文字から始まるものって見たことないな
エラー文 plz >>541
ありがとうございます!
Unreal Engineを勉強します!
>>543
神ゲーいいですね!
Unreal Engineで神ゲー目指しますね! >>549
あほくさだと?
お前がインスタンスの仕組みを理解せずに参考書通りのマニュアル回答している人なのはよくわかった
言っとくがお前の>>538の説明はインスタンスの使い方の説明であって
インスタンスその物をまったく理解しておらず間違ってるから人に説明する時は気を付けることだな お前は予備知識があるから少しの説明で済みそうなので教えてやる。
インスタンスはクラスのコピーとポインターを足したような機能をイメージしろ。
大元となるオリジナルのクラスは実行時に静的アドレス空間に1つだけ展開されている。
これをひな型だと思え。
インスタンスとは、このひな型の一部を別のアドレス空間にコピーし、コピーしなくて済む部分はひな型のあるアドレス番地を直接参照して
大元のクローンを作って仕様することを言う。
この方法により容量制限のあるメモリーを節約して効率よく使用できるのと
メモリー空間にバラバラに変数が展開と解放を繰り返しゴミデータ化し
GCが頻繁に発生するのを防ぐのに役立つ
結果、各値の参照をする時の速度低下を防ぎプログラムの実行速度低下を防止している
これがインスタンスだ
わかったかボケ>>553 知ったかで話してるんじゃねえぞ?
誰かに物を教える時はてめえ自身がよく理解を深めて置け >534で必要とかメリット言ってる時点でダウト
バレバレだから触られてないって気付けよ地雷 >>556
え?馬鹿なの?最初の質問100回読み直したら?>>523
概念についての質問だぞ
使い方ではなく 概 念 な
頭冷やしてみな
お前が相当馬鹿な事言ってるの理解できるはずだ でだ、その概念について自称初心者の523にいきなり>>554なんかぶつけて理解できると思う訳?
だからググレとこのように誘導している>>525
実に的確だろう
それを>>528や>>538のように質問者が教えてほしい事とはまったく関係ない返しをしてるのに
自分はわかってます風でしゃしゃり出てくる頭でっかち連中
ちゃんと質問者の質問を汲み取って回答したれや
そんな頭でっかち連中は最後はこんなですわ
幼稚幼稚 >>553 >>556
とりま今後は言葉に気を付けた方がいいだろう
間違えると俺みたいな面倒な奴が噛みつくぜ? 素晴らしい!
皆さんのお陰でインスタンスの理解が格段に深まりました!心より御礼申し上げます。 って思うじゃん?
心の目でみるようにしないと人生損するぜ?
なんでも疑心暗鬼にいきてるとスネ夫みたいになるぜ?
答えは1つ
自演ではありません ↑のような発言を行なう者は統計学的にぺニスが著しく小さな成人中年男性に見られる傾向があります。 >558 20:17:20.94
>559 20:17:56.28
その間僅か36秒 >>561
ま!お前以外の当事者全員が自演じゃないことはわかってるんだけどな!
お前だけが真実を見えてないわけよ
ID1つが人1人で見た通り素直にみたほうがいいぜ
主要メンバーは俺含めて4〜5人でのやり取りだからな >>564
うんうんそれでそれで?
じゃあ>>563と>>564も自演ってことになるのかな?
違うよね。お前ならわかるわな。
世の中偶然が重なる事って沢山あるんだよ。
勉強になっただろ。 https://codegenius.org/open/courses/24/sections/212
このサイトの通りに敵の攻撃を停止させるアイテムを作成した所
そのアイテムのistriggerの欄にチェックを入れると
そのオブジェクトアイテムが床をすり抜けてしまいました
どうすればいいでしょうか? 雛形の元のインスタンス〜♪
つーきぬけろ愛のインスタンス〜♪ >>567
ああん!?てめえしばくぞ!!
当たり判定はトリガーかコライダーかどっちか1つしか使えねえんだよ!!
何でそうなってるかわかるか!?
どっちも本質は同じだからだよ!!
どちらか片方できればもう片方もできるからだ!!
すり抜けたくなかったらトリガーじゃなくてコライダー使えや!!
しばくぞ!! >>567
頭にきたからもっと言ってやる!
トリガーってのはな!もともとすり抜けてもいいオブジェクトにつけるもんなんだよ!
でもよ幽霊みたいに壁をすり抜けると、あれ?幽霊が壁に当たった時ってどうやって判定するわけ?
ってなるだろ!!!
そういう時に使うもんだ
イズトリガー >>554
で、結局きみは>>523の力になれたわけ?
なれてないよね〜、それよか>>528とかの方が具体的には説明してるだろ
君の
>本体のハードウェアの話しとメモリーのアドレス空間、そしてC言語のアドレスとポインタの説明が必要不可欠
とかなんとかあたかも自分はいろいろ知ってるぜ的な主張は何も説明できてないわけ。あほくさ
そもそもハードウェアって単語がなんででてくるのか、あほくさ。
>>554
を最初に言えば難しい説明だけどましなんちゃう?
ただ、この方法により〜から下の内容は関係ないとおもいまーす Colliderを設定することは、ゲームで言うところの当たり判定枠を設定すること
当たり判定時に衝突させるか、通過させるかは、isTriggerというフラグで切り替え
衝突を行いたいとき(通過させたくないとき)は、isTriggerをオフにして、
接触をOnCollisionEnter(Collision)イベントで判定する
判定相手は、Collisionで取得し参照が可能
衝突を行いたくないとき(通過させたいとき)は、isTriggerをオンにして、
接触をOnTriggerEnter(Collider)イベントで判定する
判定相手は、Colliderで取得し参照が可能
どちらも、「Enter」を、「Stay」や「Exit」に変えれば、
接触開始時、接触中、接触終了時をそれぞれ判定可能 >>567
オブジェクトA(自機)に対して、オブジェクトB(床)に対しては衝突して、
オブジェクトC(敵)に対しては通過したい場合ですかね?
オブジェクトをレイヤー分けするか、タグ付けすると良いですよ
Aは、レイヤー:A、Colliderあり:「isTrigger」オフにして、
Aの子オブジェクトを空オブジェクトDとして作成し、
Dは、レイヤー:D、Colliderあり:「isTrigger」オンにします
床:Bは、レイヤー:B、Colliderあり
敵:Cは、レイヤー:C、Colliderあり
Physics設定で、レイヤー間の判定表を、
A-B 接触あり
D-C 接触あり
それ以外 接触なし
自機Aは床Bと接触して衝突を起こし、
OnCollisonEnterイベントを生じます
また、自機の子Dは敵Cと接触するが通過し、
OnTriggerEnterイベントを生じます
レイヤーを使わない場合は、
OnCollisonEnterイベントやOnTriggerEnterイベント内で、
接触相手のタグを判定して挙動を変えます 何か荒れた感じだけど、近年になかった充実した講習内容だなぁ。
それぞれの方は、イライラもあったりしてるかもしれないけど、たぶんにみんなのためになってると思うから。ありがとう。 >>571
なれてるんじゃね?
本人が皆さんのおかげでと言ってるしな
お前の説明の何処が具体的な概要説明なんだ?
まあしかしだ、そんなお前のも力には慣れたんじゃねーの
もう一度言うが、皆さんのおかげでと言ってるからな
何を言ってるんだお前
最初の質問で、あいつには俺の説明は難しいから回答しなかったのだが
それを偉そうだとか
全然ダメだお前!マジダメ!
だから人の書き込みをもっと読んで真意を汲み取れるようになれって言ってるだろう
俺の書き込みからすら読み取れてないから質問者のも読み取れないんだよ
メモリーをハードウェアじゃないとでも思ってるのか
メモリー交換どうやるんだお前
バーチャルに浸り過ぎじゃねーのか?大丈夫か? >>574
安心しろ
俺はいつも平常心だ
こんな場でイライラしてるようでは世の中生きていけない、つーかハゲるぞ
その時の気分でわざと怒ってるフリ
したり〜♪
吹っ掛けて相手をイラつかせて楽しんだり〜♪
応戦したり反論したり無視したりと
本来の2chの楽しみ方を超堪能している利用者だから安心しろ
例えばコイツも→>>571
頑張って反論してきてるなと思って猫じゃらしで遊んでる気分
可愛いよママン。(^ω^)ペロペロ 技術者ってのはある程度自分の知識ややってきたことに自信を持ってるやつが多い
すると頑固者が多い
メリットにもデメリットにもなる
その聖域をつつくと結構カチンと来て反論してくる奴が多いわけよ
開発チームでデザイナーとプログラマーがよく衝突するなんてのは有名
それ分かっててやってるからな
俺は言葉遊びと言葉誘導、そしてマインドコントロールと相手の心読むのも得意だぜ?(^ω^)ペロペロ それにこういう所の面白いのは
昨日は仲良く話してた相手だったりするんだよな
今日言い合っても明日は普通にここでやりとりしてるわけよ
知らずにな
わざわざNGにしたことひけひらかしたり、それを幼稚行為と罵ったり
これらが掲示板の醍醐味っしょ! そりゃそうだ
荒れないような言葉選びでやってるわけじゃないからな
しかし変に技術的知識があり質問にも回答しちゃうところが厄介だろ?
いーひひっひ スレとは関係ないんだけど、どうしても発言したいことがある。
菊池寛賞は文学賞ではなく、すぐれた文化活動をした人に与えられる賞である。
それなのに文化活動などまったくした痕跡のない浅田真央が菊池寛賞を受賞した!!
理由は「氷上の華麗な演技によって人々に深い感銘を与えた」からだと!!
どこから働きかけがあった!?電通か?NHKか?
姉のことを「まい」と呼び捨てにする真央が菊池寛賞を受賞したw
姉まいに荷物を持たせて、前をいつも歩く真央が菊池寛賞を受賞したw
許せないな!!! キムチの線を消して安心しきったキムチってオチもありそうだな 正体は僕でふた(^^
1人も当てられなくててざんねんでふたね(^^
ボッキング!(^^ >>569
比較するならトリガーとコリジョンだな
これらはいずれもコライダーを用いて判定され、単一のコライダーはこのどちらか一方の判定しか返さない
こんな基礎の基礎すらわかってないど素人がゴロゴロしてる場所で他人に教えるつもりなら最低限言葉は正確に使えよ
万一教えてる本人が区別して使えてないなら他人に教えられるだけの能力がないってことだ
ど素人は喜ぶかもしれんがね、こうした一見正しそうに見える間違いだらけの講釈を鵜呑みにすると、後々混乱したり間違って覚えてたりで苦労するから注意な せめて似たトリップ持ってきてくらふぁい(^^
大使スラングの使い方もガバガバでふ(^^
こんなのでよく成りすまそうと思いまひたね(^^
それより新情報(^^
実はキムチ、アセットおじさん、都合の悪い人が全部同一人物に見える人などなどは全部僕でふ(^^
ほかにも通常レスの9割は僕でふ(^^
このスレはあまりにも過疎いので僕が自演して盛り上げてまんこ(^^
ようするにこのスレは僕と君だけのスレでふ(^^
ボッキング!(^^ アセットおじさん、キムチ、ボッキング、"自称"講師
華やかなスレだな >>590
IsTrigger=falseのコライダーでも、相手側のコライダーがIsTrigger=trueならOnTrigger○○は呼ばれるから両方を扱えるでしょう
どちらか一方ではない Rigidbody2Dの挙動について
グラディウスVの5面のように隕石をよけつつ破壊するゲームを作っているのですが
隕石をRigidbody2Dで制御して動かしていると、タイトルバーのクリック時や移動などでゲームが一瞬停止し、再び動いた時に
Rigidbodyで動かしているオブジェクトがワープしたような状態になってしまうのですが、これの対処法はあるのでしょうか
Rigidbodyオブジェクトの移動の停止にラグがあるような感じがします
ちなみに別のアプリケーションをアクティブ化してゲームを停止させる場合はこの現象は起きません >>593
相手と自分のどちらか一方じゃなくて、OnTriggerかOnCollisionのどちらか一方ってことでしょ >>594
画面外クリックされたときに、ポーズ画面があるなら遷移させてあげて、
Time.timeScale = 0;とかしたら大丈夫なんじゃないかな >>593
この場合、OnTriggerXXはisTrigger=trueに設定された相手側のコライダーの作用によるもので、それが通知されているに過ぎないんだが確かにその説明はしてないな、補足サンクス グラディウスVなんて知らないので
最低でもドリフトスピリッツ以上にダウンロードされたゲームで頼む じゃあグラディウスVはドリスピよりダウンロードされてないからクソゲだなw グラディウスIIIもVも売り上げはドリフトスピリッツ以上のゲームです。
グラディウスは全国のアーケードでフル稼働していたうえに
その後、様々な家庭用ゲーム機に移植されて販売されました。
これらの総数はドリフトスピリッツを遥かに超えている。…ものと推測されます。 >>596
なるほどtimeScale自体の操作で即座に止めてしまってもいいわけですね
RigidbodyやPhysicsの設定で間違っているのかと悩んでいました
この方法で試してみます。 ありがとうございました RigidbodyはfixedTimeのスケールで動いているので、
時間が飛ぶと、処理も飛んで、物理挙動が怪しくなります。
確かに、時間自体を停止した方が良いですね。 >>604
アセットを買えばうまくいくんじゃないですか? Unityの3Dのプリミティブ、ちょっと少なすぎる気がする
円柱
カプセル
球
立方体
平面
円錐
円板(円盤型)
トーラス(円環型・ドーナツ型)
・・・くらいあった方が良い気がする
拡張機能とかアセットであるのかな?? 複数の変数の中身を比較して最大値の変数を選択する処理をさせたいのですが、
思いつく書き方だとifやmaxで比較を繰り返していくような冗長な文しか思い浮かびません
値を比較する処理と変数を指定する処理をうまいことやるにはどんな感じに書くのがいいのでしょうか
変数の中身の値は動的に入れ替わるものです float xMax = Mathf.Max(x1,Mathf.Max(x2,Mathf.Max(x3,Mathf.Max(x4))))
x1, x2, x3, x4の中で、最大のものを変数xMaxに代入みたいな? xの個数が不定なら、
xを配列にして、配列インデックスの最大値まで比較できるように、
ifでインデックスを確認して、最大値まで比較を繰り返すようにして、
比較部分を再帰にしたほうが良いかも この場合できるのはそれぞれの変数の中身の値の比較だけですよね?
その値が入っている変数を選択して次の処理に持ち越せないというか
結局、その値を持つ変数がどれなのかを判定する処理が同じような感じで必要になりませんか?
値が同値だった場合もまた問題でるでしょうし
と考えてしまったのですが、それは私の考えが間違っているのでしょうか 冗長でいいだろ
何でも便利な魔法があるとか言う発想の方が可笑しい >>610
T Max<T>(params T[] values) => values.Max();
void Start()
{
float a = 1, b = 5, c = 3;
var max = (new[] {a, b, c}).Max();
Debug.Log(max);
max = Max(a, b, c);
Debug.Log(max);
}
>>612
最大値を計算して変数にいれて、そっち使えばええやん >>606
円板は、円柱を高さ方向につぶせばできるんじゃ?
円錐は確かに欲しいかも >>606
プリミティブって、キャラ入れる前にテストで使うぐらいだろ?
モデルデータ作らないの? >>616
>>606じゃないけど、テストで使うにしても、
方向を示せる『尖がった図形』は欲しいかなと思った
特に、3D回転が入ると向きがわかりにくくなるから、
Quaternion回転がわかるように、進行方向を指す矢印として、
円錐は正直欲しいかも
今は、太い円柱と細い円柱を、2段ロケットみたいに連結して、
グループ化してやっているけど・・・
いちいち3Dソフトでプリミティブ図形を作って持ってくるのは面倒で >>619もちろん、
1度円錐を作っちゃえば、Assetsデータとして、
それをプロジェクト間で使い回わせば良い話だけどね
ただ、3Dソフトなしでもすぐ作成できるように、
円錐くらいはプリミティブとしてあっても良いかなと
ベクトルの向きを表すのに、円柱だと両端が同径だから、
一方向を示すコンパス的な役割は厳しくて・・・ >>620
ぐぐったら上から2番目にあったよ
任意サイズの円錐メッシュがUnity上でつくれる
ttp://wiki.unity3d.com/index.php?title=CreateCone カキコ失礼します。Android向けのVRソフトを作っているのですが、
VRとしてのステレオビューを確保したままヘッドトラッキング機能だけを無効にするには、
どのようにすればいいのでしょうか。
環境はUnity(2017.2.0f3), Google VR SDK for Unity(v1.110.0) です。
スレチor情報不足だったらすみません。よろしくお願いします。 >>621
サンクスです!
やっぱり、円錐が欲しいと持った人は他にもいたんだな〜 >>622
VRもってないからわかんない
これのこと?
ttps://github.com/googlevr/gvr-unity-sdk/issues/631
一番下のコメントでVR描画にはヘッドトラッキングとステレオ描画が必要で、個別に無効にする機能はないって言ってるよ 円錐が本当に欲しいと思う人は、上の人が言っている通りフリーとかでもいいから3Dソフトで作ると思う
こういうコードを作った人は技術的好奇心かあるいはプロシージャル関連のものを扱ったプロジェクトのスニペットじゃないかなと考えるよ
円錐が欲しいと思ってもこんなコード書くのだるすぎっしょ >>609
速度とか気にしないなら配列にしてsortして先頭取り出すのが楽 >>626
array.OrderByDescending().First()
のどこが楽なんだよ・・・ ■ このスレッドは過去ログ倉庫に格納されています