【ゲームエンジン】Unityなんでも質問スレpart6
■ このスレッドは過去ログ倉庫に格納されています
雑談はこちらで
■総合スレ
【3Dゲームエンジン】Unity総合スレッド36
https://mevius.5ch.net/test/read.cgi/gamedev/1625893813/
すまんpart7だったの間違えたorz >>1
乙です。
2Dでプレイヤーが歩行しているアニメーションクリップを作っています
アニメーションウインドウを開いて、歩行アニメは7コマ分画像あるので画像を7つセットしていきます。
アニメが再生されてなぜか6枚目の画像になった時だけ画面に表示されなくて、プレイヤーはいっしゅん透明になります そして7枚目になると再び表示されます
7枚の画像はファイル形式、タテ・ヨコのピクセルもピボットも全部統一してあって、アニメーションウインドウにはこの6枚目もちゃんと表示されているのにSceneやGame上ではこの6枚目だけ表示されません
どういった理由が考えられるのでしょうか? オーダーインレイヤー上げたら(なんで6枚目だけが下になるかはわからないけど)直りました
すみません FBXファイルにテクスチャを貼り付けたいんだけどどうしたらいい?
houdini側ではちゃんと貼られてたのに、Unity側でテクスチャとFBXをどうやって結びつけるかわからない
適当にドラッグアンドドロップすると gun_aluminum というマテリアルを使わずに適当なマテリアルが生成されて差し替わってしまう
https://i.gyazo.com/8cc9aee82444e5c592da09f29ba62f16.png fbxのマテリアルタブからExtract Materialsを押して保存先を選べば、モデルと紐付けられたマテリアルが抽出できる
あとはそのマテリアルのAlbedoにカラーテクスチャ貼ればとりあえず色が塗れる
houdiniやってないからいい感じの連携はわからん
https://docs.unity3d.com/ja/2019.4/Manual/FBXImporter-Materials.html 初心者です
VRoidでベース作り→blenderで服改造→Unityで髪とスカートのひらひらや当たり判定をつけてVRMでエクスポート
というところまでいき、VRoid Hubにアップしたらスカートが片方だけ尋常ではないくらいめくれ上がっていました
何か考えられる原因はありますでしょうか?
ボーンやウェイトはVRoidで最初から設定されている時のままいじってません >>9
スケール弄ったらそんなこと起きた記憶
ポリゴンだけ縮小→当たり判定はデカいまま→暴走
どっかの変換でスケール変わってない? テストプレイ中、GameタブでScaleを変えた際に拡大箇所はスクロールできないのでしょうか? public の配列Y_lineを作成し、この配列のelementはy座標を意味するので
インスペクターにこの配列を表示した際、表示される順をこの配列だけは降順にしたほうがわかりやすいのでそうしたいのですができないでしょうか? ParticleSystemのRenderのRenderModeをMeshにして複数登録すると、複数のメッシュを表示してくれますが、どうもランダムな順番で表示されるっぽいです
アニメーションみたいな感じにしたいので順番を指定したいのですが、どうすればできますか? メッシュを差し替えるスクリプト制御でやりたい事は出来ましたが、もっと軽い方法がありましたらお願いします コルーチンを使って、フラグが上がるまで処理を止めておく事はできないでしょうか?
テキスト送りが終了するまでコルーチンの中で止めておきたいのですが。 >>17
どういう処理を書いてるかにもよる
いちばん簡単なのはコルーチンの中に
while(フラグ) {
Yield return null;
}
こう書いておけば、フラグが変わったときにwhileから抜ける コルーチンで判定するまでループは自分も使うことあるんだけど
無限ループ=フリーズのイメージがあって
こんな使い方しても大丈夫なんかな?ってふと思ったりする それはコルーチンの動作理解してないから理解したほうがいい どうもありがとうございます。
無事にコルーチンを作ることが出来ました!
何かの不具合でフラグが立たなかった時の為にupdate関数で時間を計測して、
while文の中にif文を作って時間が経ったらbreakで抜けるようにしておいた方がいいでしょうか?
それと右クリックするまでコルーチンの中で止めておく処理を作りたい場合
private void Update()
{
右クリックフラグ = false;
if (Input.GetMouseButtonDown(0))
{
右クリックフラグ = true;
}
}
IEnumerator コルーチン関数()
{
while (右クリックフラグ == false) //右クリックが押されると下に抜ける
{
yield return null;
}
}
このように書いて、コルーチンの中で何回も止めても大丈夫なのでしょうか? >>23
別にいいけど、その設計は目的がよく分からない
それなら最初からコルーチンじゃなくてUpdateの中でやるか、それとも異なる処理を順番にやりたいならその分だけコルーチンを分けて作って一つずつ順番に動かして行ったほうがいい
そもそも非同期でなくてもいいようにも見えるし、非同期の意味が分かってないなら一度自分が何をしているのか分かるようになるまで調べたほうがいい
それとwhileのカッコ内はtrueのとき繰り返すから逆な気がする それと時間計測して強制的にbreakしたいならそのループ内で計測した方がいい
コルーチンが終わってもUpdateで無駄な測定をする必要はない updateがいやならunirxを使うと幸せになれるぞ >>24
どうもありがとうございます。
今書いているコードはUdemyの教材で、ターン性バトルのテキストが敵味方交互に表示されるもので
自動でテキストが流れてしまうので、コルーチンの中を編集してみて治せないか試していたところです。
時間計測というのはUpdate関数の中で、Time.deltaTime を使ってやるという認識だったのですが、
コルーチン関数の中のwhile文の中で同じような事が出来るのでしょうか?
その場合どのようなコードを記述すると時間計測ができるのでしょうか? >>27
Time.deltaTimeをコルーチンの中でできるかどうかを質問するよりもスクリプトに書いた方が早かったんじゃないか?
IEnumerator コルーチン() {
float timer=0;
while(true) {
yield return null;
timer += Time.deltaTime;
Debug.Log(timer);
}}
教材でどう勉強するかは余計なお節介だと思うけど、教材を改造して理解するよりゼロから教材のプログラムに似せて作るとか自分の作りたいゲームを作る方にシフトした方が楽しいと思うぞ >>28
どうも有難うございます!
update関数を使わなくてもコルーチンの中だけで時間計測ができました!
貴重なアドバイスをどうもありがとうございます。これから頑張りたいと思います。 >>27
良ければその教材教えてくれませんか?
自分まだUnity勉強し始めでUnityの教科書の次の教材を探しております 教科書なんて読むな!捨てろ!
いきなり1本作るのが最短の習得法だって云ってんだろ!? youtubeでunityで検索すればゲーム作成講座の動画出てくるから教材買わなくても、それ見れば基本はわかるよ。
動画見て知らない単語はググればある程度理解はできる。 Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】
と言う教材ですが始めたての学習で適当かどうかわかりません。
セールの時に1700円くらいになるけど最初はyoutubeの無料動画がいいと思います。 int型の引数を設定して、0は右のボタン、1は真ん中のボタン、2は左のボタン
という感じで数字をインスペクタから入力して設定する事があると思いますが
引数を列挙型にした方が分かりやすいと思い、列挙型を作って引数に設定すると、
Event Triggerで設定する候補から関数が消えて設定できなくなってしまいます。
どうして列挙型を引数にした関数はEvent Triggerに設定できないのでしょうか? >>35
理由はわかんないけどunity側の仕様でUnityEventにenumは渡せない
回りくどいけどenumを設定するためだけのクラスを作って引数に指定すればつかえる >>36
質問者ではないけど
マ?と思ってやってみたらできなかったどうやるんだ?
public void OnClick(SerializableClass s){}
[SerializeField] UnityEvent onClick;
これだと候補にすら出てこない
[SerializeField] UnityEvent<SerializableClass> onClick;
こうしたら候補に出てきてアタッチもできるがインスペクタから引数を入力することはできなかった 普通のC#でもEventには幾つか情報が入ってて
pointerの座標や何クリックなのかや何から呼ばれたのかとか
データが入ってる場合がある
UnityでもEventDataから押したGameObject.nameが取得出来るようだ どうしても操作キャラがリアルに動かない
いかにもカーソルが動いてる感じ
もっと重厚感ある人間味な動きにしたい
MGS5の操作感にするにはどれだけスクリプト組めばいいんだか 加速や旋回で凄く人間味のある動きに出来るアセットあったな
設定が難しいらしいけど rigidbody2D.addForceでオブジェクトを動かしています。このオブジェクトのfreezeRotation.Z軸は固定しない仕様です
addforce(transform.up・・・で真上にジャンプさせようとした時に、オブジェクトが回転してて横向いてる時は斜めに飛んでしまいます
オブジェクトのrotatinのZ軸の向きに関係なく、addforceは画面に対しての方向でさせたいのですがどうすればいいのでしょうか >>41
transform.upをVector2.upにしたらたぶんいける
前者はローカル座標、後者はワールド座標 SimCityのような都市開発シミュレーションゲームを
作りたいのですが、下記画像のようにGUIからアイテムを選択して
ワールド上に配置する方法を解説されたサイト、
またはチュートリアル動画ってご存知無いでしょうか…
参考画像
https://imgur.com/a/hwqF2yS ビルドしてみようと思ってEDIT > External Toolsを開くと
You are missing the recommended JDK. Install the recommended version using UnityHub.
というのが表示されているので、検索したらUnityHub>モジュールを加えるからJDKを入れろと言うようなことが書いてあるのですが
Unity2020.0.30f1を使っているのでそれをUnityHubでみても以下3つともちゃんと「インストール済み」と表示されてて入れてあるのですがどうすればいいのでしょうか
・Android Build Support
・Android SDK & NDK Tools
・OpenJDK 英語圏でもgodotよりunityの情報量が多いのですかね? >>45
一度その3つチェック外して入れ直してみ
それで治るから ゲーム作ってるとスクリプトが10個20個と思ったより増えてしまいます
どれとどれが参照や関連してるとかだんだんわからなくなってきます
みなさんどうやってるんでしょうか いくつかエディタのバージョンは入れてて、今回また新しいバージョンのエディタをインストールしようとしたら、途中で
failed to delete old unity android support instaliation files. mayby unity or some of its tools are stiill running
みたいなダイアログが英語で表示されたのですが、どのファイルのことを言っているのかわからないし、
再試行してもダメそうなのでとりあえず無視してインストール自体はしたのですが、どうすればいいのでしょうか? >>48
自分でフォルダ分けしろ
ステージのスクリプトとキャラクターのスクリプトとって分けてけ unity初心者なんですけど、キャラの移動はrigidにaddforceしています
しかし、物理と任意の操作を組み合わせると重くなるのではないでしょうか?
前後左右への移動はキー操作で行う
落下は物理に任せる
落下もスクリプトでコントロールしたほうがかるそうですね
であれば、rigidにこだわる必要もないなと Sceneビューで拡大して動いている間の当たり判定を見たいのですが対象が動いている場合、画面の外に行っちゃうのですが
対象のオブジェクトを常にビューの中心に追随してくれるモードとかないんでしょうか? インストールしたんですけど
起動したらライセンスエラーって出て
hubの方で何度ライセンス取得しても起動してくれません
サイトの方でアカウント見たらunity personalが有効化されてないって出てます
どうすればいいんでしょう ScriptableObjectって変数名(シンボル)変えただけでInspectorから設定した値全部消えるんですけど、こんなデリケートで保守性皆無のファイルってデータベース的に使う事を想定されてないんでしょうか?
結局jsonしか選択肢がない気がするんですけど、なにか勘違いしてるところありますか? >>51
rigidの中身はスクリプトだよ
もともと用意されてるものを使うか
自分でイチから書くかの違いだよ
当たり判定にしろ地面移動にしろ細かい計算が必要になるわけで自分で書くことはおすすめしないよ
物理を使わない移動ということは
マス目移動とかシューティングゲームみたいな話になってくるよ
アクションゲームならrigidいるよ
どちらにしろ物理は毎回計算してるわけで制御がどこにあろうと変わらないよ
これがないと接触の判定も壁あたりの判定もできないよ
addForceより厳密にコントロールしたいならvelocityを使うといいよ >>56
ありがとうございます。面倒ですが定数的に保持することにしました Update内で任意の範囲にコライダーがあるかどうかを調べる方法をお願いします
任意の範囲がコライダーの中に完全に埋まってるとRaycastやSphereCastAllが反応しないので...
MeshColliderのConvexをオンにすれば反応してくれますが、それではMeshColliderの物理判定がガバガバになってしまうのでダメでした unityHUB経由で入れたSDKのバージョンってどこで見れるんでしょうか
AndroidStudioでもSDKマネージャー見当たらなくなってよくわからなくなりました ワールド上に道路を作成したいのですが、
プレイヤー(ゲーム内)画面上で編集できるツールって存在しますか?
ストアを探してもどれも拡張エディターで作用するものばかりで… マイクラレベルなら
アセットなどなくても
建築要素20行くらいで作れたけどな おしえてください!
Unityインストールしたんですけど、
ツールバーのアイコン(再生とか)がまったく表示されません。
直す方法はありますでしょうか? スクリプト内でpublic等にした、インスペクターに表示されてる変数を、#regionやListの変数みたいに自在に省略、表示する方法ってありますか? 3Dゲームにおいて、装備品の色合い変更をある程度プレイヤーが行えるようにしたいのですが、
マテリアルを複数割り当てると処理が重くなるという事らしいので、
今後オンラインマルチプレイも実装するため何とか少ないマテリアルで実現しようと考えています
しかし、良い方法が分からず困っています
色彩パターンごとにオブジェクトを用意する事も考えたのですが、着色箇所が5つもあると極基本的な色味パターン8種(三原色+混ざり+白黒)で3万3千弱通りになるため現実的ではなく
合う色合いだけに限定しても相当数になるため現実的ではありません
かと言って5つ全て(実際はもっと多く)にマテリアルを割り当てると重くなってしまいます
2〜3くらいなら気にしなくてよいとあってのでその数に抑えた上で色変更を可能にしたいのですが、
そうするとカラーパレットとして作った画像ファイルにUV展開で着色する事になり、
結局色パターンごとにオブジェクト作成が必要になります
そもそもなのですが、キャラエディット機能を実装しているため各パーツごとに個別にマテリアルが割り当てられており、
特に頭部は透過テクスチャを4つ重ねて表示しており、全身合わせるとそれこそ1キャラクターに20以上はマテリアルを使う事になるのですが、
これがオンラインマルチプレイでどこまで影響するか分かりません
何か良い知恵があれば教えてください >>69
とりあえずテストして問題なけりゃいいんじゃね?
100人が入り乱れるアクションゲームとかなら問題あるかもだけど
プログラマじゃないので詳しくはわからんが
バッチを減らすのにテクスチャのアトラス化(大きなテクスチャにまとめる)して
マテリアルを共通にする方法があるみたい
で、もっとドンピシャな機能があったわ
URPかHDRPなら
SRP Batcherなる機能をオンにしてれば
マテリアル多数あっても重くならないってさ
https://blog.unity.com/ja/technology/srp-batcher-speed-up-your-rendering >>70
情報ありがとうございます。
早速利用してみます。 再生中にシェーダーのパラメータを変える事で
マテリアルのインスタンスが作られて個別に色変えられるのは御存じ?
色変えるのにマテリアルアセット何個も用意する必要ないよ、
よっぽど色見にこだわりがある場合覗いて >>72
色変えた時点で個別にドローコール走るっぽいよ Sharedかそうでないかによるんでなかったっけ?
知らんけど SRPで6マテリアル60fpsくらいからアトラス化&1マテリアル化で
120fpsくらいまで簡単に上がったことがあるので
無駄に増やすより工夫して減らす方向の方がいいとは思う エディタ中のSceneやGame上では正常にマテリアルが表示されてるのに、テストプレイをすると大分変わってしまいます(氷の青白いマテリアルがタールのような真っ黒のマテリアルになる)
別のシーンではテストプレイをしても正常に表示され、カメラ、PostProcessing、DirectionalLight、対象オブジェクトをそれぞれのシーンで入れ換えてテストプレイしてみましたが、それらには問題は無く、どうやらシーンそのものに問題がありそうですが、シーンのどの辺を探るべきか分かりません シーンそのものではなく、シーンを切り替えるとマテリアルが正常に表示されない様です
どこを直せば良いのでしょうか...
シーンの切り替えは普通にSceneManager.LoadSceneでやってます シーンを切り替えた後に新しくオブジェクトを生成してもこの現象が起きます
シーンの切り替えをせずに生成すると正常に表示されます >>76
> Directional Light
まさかこれの影で真っ黒になってるだけってことはないよな? >>79
同じ状況(カメラの角度とかその他諸々)でもシーンを跨いだか否かによって表示が違うので、DirectionalLightでは無いと思います 環境光じゃね?
window - rendering - lightingのenvironment - environment lightingのsourceをcolorにしてみたら 初めてunityを使うんですが、おすすめのunityの勉強法は何でしょうか? UNITYでダークソウルみたいな3Dゲームアクション作るとして
自分の剣攻撃が敵に当たった時の判定ってどんなふうにとるのが一般的でしょうか? 5億回挟まれてるってピン刺してんのに引かないゴミカスとやんのマジでおもんねぇ >>87
剣のオブジェクト事態にコライダつける感じでしょうか?
それとも攻撃時に攻撃判定専用のオブジェクトを発生させるんでしょうか? そのマップ全体に敵オブジェクトを配置してて、プレイヤーが近づいたときだけ敵オブジェクト(スクリプトのupdateメソッド)を動くようにしたいのですが、
コレはなんかカンタンな仕組みってあったりするのでしょうか? >>84
Unity公式のゲーム制作アセット(2Dと3D両方有り)があるからそれのサンプルゲームをいろいろいじくってみるといい >>89
単純な切り替えならステートパターンが楽
コード書くの苦手ならboltのステートグラフを利用するといい
もっと複雑なのが欲しくなったら
ビヘイビアツリー switchでステートかくのはおすすめしない
インターフェースか継承でやった方が楽 と思ったけど
外からどの状態でも呼び出せるようにするって意味なのか…? ステートマシンは状態の推移/管理がキモじゃなくて、
状態ごとにクラスが独立してパーティションのようになっていることに意味があると思う
ステートを手続きなしでまたげるならバグりそう >>92-93
ありがとうございます
それぞれのupdate関数内でplayerとの距離を計算して近かったら状態を切り替えるというふうにするということでしょうか
仮にobjectの数1000くらいあってもコレくらいならいけますかね >>90
>>91
分かりました
ありがとうございます
その通りにさせて頂きます アプリをリリースする時、利用規約は必ず必要なのでしょうか?
自分で作る場合はホームページを作って書けばいいのでしょうか? CC0やPublic Domainでいんじゃね?
ないんだよね? ■ このスレッドは過去ログ倉庫に格納されています