質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1402閲覧

UnityのComputeShaderで使う変数について

seri

総合スコア422

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/06/23 07:15

変数が各カーネル間で共有されていないらしく、シェーダ内では0値が入っているようで困っています。

定義コードは。。

cs.SetBuffer(cs.FindKernel("AttackMain"), "Bullets", units); cs.SetBuffer(cs.FindKernel("btn_attack"), "Bullets", units); cs.SetBuffer(cs.FindKernel("AttackMain"), "Bullets2", Bullets2); cs.SetBuffer(cs.FindKernel("btn_attack"), "Bullets2", Bullets2); cs.SetFloat("instanceunitcount", Units.Count);//この値が入りません

実行コードは。。

#pragma kernel AttackMain #pragma kernel btn_attack RWStructuredBuffer<int> Bullets; RWStructuredBuffer<int> police; float instanceunitcount; [numthreads(8, 1, 1)] void btn_attack(uint3 id : SV_DispatchThreadID) { } [numthreads(8, 1, 1)] void AttackMain(uint3 id : SV_DispatchThreadID){ }

です。
変数をC#から代入する際にルール等まちがっていましたらアドバイスお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

問題箇所を絞った質問を上げさせていただいたのでこちらの質問に置き換えさせていただきます。
https://teratail.com/questions/81568

投稿2017/06/24 00:11

seri

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

うーん、正しそうですけどね。
ちなみに、Units.Countfloat型ですか?
int型だとfloat型にキャストしないと0になるようです)

投稿2017/06/23 08:02

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seri

2017/06/23 13:12

Floatでもきちんと動作してくれません。。試しにUnits.Countを数値に置き換えて実行しても動作しません。 実行箇所がfor分なのですが、もしかしてそれが原因でしょうか
edo_m18

2017/06/23 13:30

なるほど。実行環境はOpenGLですか? GLSLはループに変数が使えなかったかもしれません。 ただの変数として、計算だけに利用した場合は正常に動きますか?
seri

2017/06/23 13:53

計算で試したところ、なぜか特定の変数だけ動きません。 定義分では if (policecount > 100) cs.SetFloat("stagewidth", 27f); else { cs.SetFloat("stagewidth", 6f); } float polifloat = policecount; cs.SetFloat("mypoli",polifloat); のようなコードでして、このmypoliとゆう値だけが動かず、stagewidthとゆう値はきちんと定義されています。 試しにpolifloatに数値を代入しても動きません。 シェーダでの変数定義は float mypoli; float stagewidth; です。
seri

2017/06/23 13:56

どうやらカーネルの定義が関係しているようです。 特定のカーネルではmypoliの値が読み込まれますが、別ののmypoliでは0の値が入ってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問