フリー版で開発したゲームは個人・法人を問わず追加のロイヤリティーなしで販売できます。 プラットフォームサポートはiPhone/iPod Touch/iPad、Mac、PC、Web、Wii、Xbox360、Android、PlayStation 3、PlayStation 4、PS Vita他
■注意事項
質問と答え以外は禁止
■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←スクリプトのエラー番号をこれで検索すると原因が日本語で出てきます。
■前スレ
【ゲームエンジン】Unityなんでも質問スレpart11
https://mevius.5ch.net/test/read.cgi/gamedev/1691129256/l50
【ゲームエンジン】Unityなんでも質問スレpart12
■ このスレッドは過去ログ倉庫に格納されています
2023/11/06(月) 16:50:23.83ID:aWH6Xwln
215名前は開発中のものです。
2023/11/25(土) 20:38:13.49ID:6mVYgNka >>213
(なんかわいのぶち込むって言い回しがこのスレ内で伝染してるな・・・)
UnityプロジェクトのAssetsフォルダ内に資産一式を配置することになると思うけど、この中でクラス名の重複は認められない
実質的にスクリプトファイル名の重複も認められてない
一応C#のnamespaceっていう仕組みを利用すれば重複可能になるけど、C#の理解が浅いうちは無暗に首ツッコまないほうがいいかも
ということでAssetsフォルダ内の全csファイルのクラス重複確認をすれば解決する・・・はず
(なんかわいのぶち込むって言い回しがこのスレ内で伝染してるな・・・)
UnityプロジェクトのAssetsフォルダ内に資産一式を配置することになると思うけど、この中でクラス名の重複は認められない
実質的にスクリプトファイル名の重複も認められてない
一応C#のnamespaceっていう仕組みを利用すれば重複可能になるけど、C#の理解が浅いうちは無暗に首ツッコまないほうがいいかも
ということでAssetsフォルダ内の全csファイルのクラス重複確認をすれば解決する・・・はず
216名前は開発中のものです。
2023/11/25(土) 20:48:46.18ID:c7/JKC6p >>215
返信ありがとうございます!
一応アセット内での被りは無さそうなんですよね。unityのウィンドウ内で出来る範囲とは別に、PC側のファイルの保存フォルダ側に問題あるのかなって気もしてます
ちなみにこのスレを開くのは初めてなので言い回しは残念ながら偶々です。
返信ありがとうございます!
一応アセット内での被りは無さそうなんですよね。unityのウィンドウ内で出来る範囲とは別に、PC側のファイルの保存フォルダ側に問題あるのかなって気もしてます
ちなみにこのスレを開くのは初めてなので言い回しは残念ながら偶々です。
217名前は開発中のものです。
2023/11/25(土) 21:04:25.66ID:9rpRVGI9218名前は開発中のものです。
2023/11/25(土) 21:22:04.21ID:tUq1KY+K >>217
SSDは持ち運びする&iPhoneなどのバックアップ入れるなら大目に。そうでなけりゃできれば512もあればよろし。
256にするとどうなるかはわかんないけど、最近のアプリを見るとちょっと心許なく。
SSDは持ち運びする&iPhoneなどのバックアップ入れるなら大目に。そうでなけりゃできれば512もあればよろし。
256にするとどうなるかはわかんないけど、最近のアプリを見るとちょっと心許なく。
219名前は開発中のものです。
2023/11/25(土) 21:24:36.25ID:tUq1KY+K プロとしてやっていくなら、もりもりでw
最初ちょろちょろ、あとモリモリでもいいけどそれが良いかは結果の後にわかる事なので、最初からモリモリなら本気度マックス、とか形からでw
最初ちょろちょろ、あとモリモリでもいいけどそれが良いかは結果の後にわかる事なので、最初からモリモリなら本気度マックス、とか形からでw
220名前は開発中のものです。
2023/11/25(土) 21:28:38.36ID:c7/JKC6p >>216
PC側のファイルフォルダを見てみたら2つのプロジェクトファイルが作成されてて同じスクリプトファイルが生成されてます
でもそれ以外に不審な点は見つからないですね。これがダメならプロジェクト別でもスクリプトクラスが被ったらダメってことなんですかね…?
VisualStudio側でプロジェクトが分けられていない?とかネットに書いてあったのでVisualStudioも見てみようかな…初心者だし手探りで頭が痛いよ…
PC側のファイルフォルダを見てみたら2つのプロジェクトファイルが作成されてて同じスクリプトファイルが生成されてます
でもそれ以外に不審な点は見つからないですね。これがダメならプロジェクト別でもスクリプトクラスが被ったらダメってことなんですかね…?
VisualStudio側でプロジェクトが分けられていない?とかネットに書いてあったのでVisualStudioも見てみようかな…初心者だし手探りで頭が痛いよ…
221名前は開発中のものです。
2023/11/25(土) 21:33:14.98ID:6mVYgNka >>220
Everythingっていうソフトおすすめ
「"C:\aaa" .cs」って検索するとC:\aaaフォルダの下にいる拡張子が.csのファイルを全部一覧表示してくれる
それで特定のプロジェクトフォルダ配下に名前ソートかけて同名のcsファイルが2ついないか見るとか
Everythingっていうソフトおすすめ
「"C:\aaa" .cs」って検索するとC:\aaaフォルダの下にいる拡張子が.csのファイルを全部一覧表示してくれる
それで特定のプロジェクトフォルダ配下に名前ソートかけて同名のcsファイルが2ついないか見るとか
222名前は開発中のものです。
2023/11/25(土) 21:53:05.91ID:c7/JKC6p223名前は開発中のものです。
2023/11/25(土) 22:15:04.00ID:c7/JKC6p224名前は開発中のものです。
2023/11/25(土) 22:19:21.88ID:9rpRVGI9 >>218
色々調べてるけど
新型の情報はないのかな?
まあ新型出ても初めは高いだろうし
MacBook AirM2かMacBook ProM3かで悩む
14インチと15インチ、16インチの違いはどう?
色々調べてるけど
新型の情報はないのかな?
まあ新型出ても初めは高いだろうし
MacBook AirM2かMacBook ProM3かで悩む
14インチと15インチ、16インチの違いはどう?
225名前は開発中のものです。
2023/11/25(土) 23:40:04.33ID:PO4/Hp6H SSD?
君たちまだストレージ保管してんの?
そんなンクラウドでええやん
君たちまだストレージ保管してんの?
そんなンクラウドでええやん
226名前は開発中のものです。
2023/11/26(日) 00:32:27.32ID:m41MARBn どこのクラウドがいいの?
227名前は開発中のものです。
2023/11/26(日) 05:23:57.71ID:ZwpA0qEM やめなよ
228名前は開発中のものです。
2023/11/26(日) 06:44:39.83ID:m41MARBn >>227
このハゲ!
このハゲ!
229名前は開発中のものです。
2023/11/26(日) 07:27:15.33ID:J5rQpI/4 完全につまずいてしまいました。どうかお知恵を貸してください。
配列[10]に詰め込んだオブジェクトの中に変数aがあります。
ゲームマネージャーの方で毎回for文で配列の要素内の変数aを確認して、
該当した場合にそのオブジェクトの変数bにtureを代入する。
ということをやりたいです。
文字で説明するとしごく単純な作業なんですが、これがうまくいきません。
自分の考え方としては、ゲームマネージャーの方で配列内を確認するために
for (int i = 0; i < 10; i++)
{
if(配列[i].変数A < 2)
{
配列[i].変数B = true;
}
}
してやるだけなはずなんですが、、、、
この配列はゲームマネージャーで最初宣言したもので、
配列内の変数は各オブジェクトがもっているものです。
各オブジェクトには読み書きできるメソッドは作ってます。
public int 変数A{ get { return 変数a; } set { 変数a = value; } }
public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
でも、下記のままでは「GameObject」には「変数A」の定義が含まれておらず〜」とエラーが出ます。
for (int i = 0; i < 10; i++)
{
if(配列[i].変数A < 2)
{
配列[i].変数B = true;
}
}
これが機能するようにするために、何が足りないのか、教えてください。
配列[10]に詰め込んだオブジェクトの中に変数aがあります。
ゲームマネージャーの方で毎回for文で配列の要素内の変数aを確認して、
該当した場合にそのオブジェクトの変数bにtureを代入する。
ということをやりたいです。
文字で説明するとしごく単純な作業なんですが、これがうまくいきません。
自分の考え方としては、ゲームマネージャーの方で配列内を確認するために
for (int i = 0; i < 10; i++)
{
if(配列[i].変数A < 2)
{
配列[i].変数B = true;
}
}
してやるだけなはずなんですが、、、、
この配列はゲームマネージャーで最初宣言したもので、
配列内の変数は各オブジェクトがもっているものです。
各オブジェクトには読み書きできるメソッドは作ってます。
public int 変数A{ get { return 変数a; } set { 変数a = value; } }
public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
でも、下記のままでは「GameObject」には「変数A」の定義が含まれておらず〜」とエラーが出ます。
for (int i = 0; i < 10; i++)
{
if(配列[i].変数A < 2)
{
配列[i].変数B = true;
}
}
これが機能するようにするために、何が足りないのか、教えてください。
230名前は開発中のものです。
2023/11/26(日) 07:46:45.71ID:ap8K17/p 文面から配列にはGameObjectが入っているものと推測する
それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする
この場合、配列はGameObject[]ではなくHogehoge[]でないといけない
あるいはGameObjectの配列の要素に対してGetComponentしてHogehogeを取得する
Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();
GameObjectはGameObjectの情報しか持ってないので、Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない
それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする
この場合、配列はGameObject[]ではなくHogehoge[]でないといけない
あるいはGameObjectの配列の要素に対してGetComponentしてHogehogeを取得する
Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();
GameObjectはGameObjectの情報しか持ってないので、Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない
231名前は開発中のものです。
2023/11/26(日) 08:27:07.96ID:m7xu9wcS エラー本文とコード見てないからわからんけど、書き方的にGameObjectからそのまま参照しようとしてそうだね
232名前は開発中のものです。
2023/11/26(日) 09:05:47.93ID:J5rQpI/4 >>230
>文面から配列にはGameObjectが入っているものと推測する
その通りです。
>それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする
Hogehogeクラスとします。
>この場合、配列はGameObject[]ではなくHogehoge[]でないといけない
ここの意味が理解できません。
ゲームマネージャークラス内で宣言した配列に、オブジェクトを入れています。
Hogehogeという名の配列はどこにも存在していません。
それでもHogehoge[]を記述できるんですか?
でも
for (int i = 0; i < 28; i++)
{
if(Hogehoge[i].変数A < 2){
Hogehoge[i].変数B = true;
}
}
ではエラーになりました。
「「Hogehoge」はタイプです。指定されたコンテキストでは無効です」というエラーです。
Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();を使う場合だと
「型または名前空間名 'Hogehoge' が見つかりませんでした」とエラーになります。
>GameObjectはGameObjectの情報しか持ってないので、
>Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない
ここの理屈は理解できます。。。
記述するとき「配列[1].Hogehoge.変数A」見たくなる感じですか?
>文面から配列にはGameObjectが入っているものと推測する
その通りです。
>それで変数Aや変数Bを定義してるコンポーネントはHogehogeクラスとする
Hogehogeクラスとします。
>この場合、配列はGameObject[]ではなくHogehoge[]でないといけない
ここの意味が理解できません。
ゲームマネージャークラス内で宣言した配列に、オブジェクトを入れています。
Hogehogeという名の配列はどこにも存在していません。
それでもHogehoge[]を記述できるんですか?
でも
for (int i = 0; i < 28; i++)
{
if(Hogehoge[i].変数A < 2){
Hogehoge[i].変数B = true;
}
}
ではエラーになりました。
「「Hogehoge」はタイプです。指定されたコンテキストでは無効です」というエラーです。
Hogehoge hooo = 配列[i].GetComponent<Hogehoge>();を使う場合だと
「型または名前空間名 'Hogehoge' が見つかりませんでした」とエラーになります。
>GameObjectはGameObjectの情報しか持ってないので、
>Hogehogeの変数を参照しないとHogehogeの情報にはアクセスできない
ここの理屈は理解できます。。。
記述するとき「配列[1].Hogehoge.変数A」見たくなる感じですか?
233名前は開発中のものです。
2023/11/26(日) 09:27:49.83ID:qtPMCWA8 独自クラスをchatGPTで、聞いてね
234名前は開発中のものです。
2023/11/26(日) 09:29:50.22ID:qtPMCWA8 変数Aを定義したC#よファイルに名前付けたでしょ?
それな、クラス名やぞ
それな、クラス名やぞ
235名前は開発中のものです。
2023/11/26(日) 09:47:00.82ID:J5rQpI/4236名前は開発中のものです。
2023/11/26(日) 10:01:19.86ID:J5rQpI/4 <gamemanager.cs>←空のオブジェクトにくっつけてます
public GameObject[] Array01;
void Start(){
Array01 = new GameObject[10];
GameObject obj = (GameObject)Resources.Load("プレハブ名");
for (int i = 0; i < Array01.Length; i++)
{Array0[i] = Instantiate(obj, new Vector2(i,0.0f), Quaternion.identity);}
}
<prefab_object.cs>←プレハブ化したオブジェクトにくっつけてます
public int variable_a = 0;
public int Variable_a{ get { return variable_a; } set { variable_a = value; } }
簡易版で説明しますと、↑この状況なだけです。
これで、<gamemanager.cs>のvoid Update()の中で<prefab_object.cs>のVariable_aを利用したいんです。
<gamemanager.cs>内に
「Debug.Log(Array01[0].Variable_a);」と記載したらエラーが出ます。
「Debug.Log(prefab_object[0].Variable_a);」と記載したらエラーが出ます。
「Debug.Log(Array01[0]);」と記載してもエラーが出ます。
「Debug.Log(prefab_object[0]);」と記載してもエラーが出ます。
public GameObject[] Array01;
void Start(){
Array01 = new GameObject[10];
GameObject obj = (GameObject)Resources.Load("プレハブ名");
for (int i = 0; i < Array01.Length; i++)
{Array0[i] = Instantiate(obj, new Vector2(i,0.0f), Quaternion.identity);}
}
<prefab_object.cs>←プレハブ化したオブジェクトにくっつけてます
public int variable_a = 0;
public int Variable_a{ get { return variable_a; } set { variable_a = value; } }
簡易版で説明しますと、↑この状況なだけです。
これで、<gamemanager.cs>のvoid Update()の中で<prefab_object.cs>のVariable_aを利用したいんです。
<gamemanager.cs>内に
「Debug.Log(Array01[0].Variable_a);」と記載したらエラーが出ます。
「Debug.Log(prefab_object[0].Variable_a);」と記載したらエラーが出ます。
「Debug.Log(Array01[0]);」と記載してもエラーが出ます。
「Debug.Log(prefab_object[0]);」と記載してもエラーが出ます。
237名前は開発中のものです。
2023/11/26(日) 10:02:55.92ID:ap8K17/p // Hogehoge.cs
public class Hogehoge : MonoBehaviour
{
public int 変数A{ get { return 変数a; } set { 変数a = value; } }
public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
}
// GameManager.cs
public class GameManager : MonoBehaviour
{
public GameObject[] objects;
// B
private void Start()
{
int aaa = this.objects[0].変数A; // @
int bbb = this.objects[0].GetComponent<Hogehoge>().変数A; // A
}
}
GameManagerの@はthis.objects[0]を見ている=GameObjectクラスを見ているので、GameObjectに変数Aがなくてエラーになる
Aはthis.objects[0](GameObject)からHogehogeクラスを取得してHogehogeクラスを見ているので、Hogehogeの変数Aを見てエラーにならない
ただしGetComponentはコストが高い処理なので、毎フレーム実行する必要がある場合などはクラス変数(B)にHogehogeの変数を定義しておきそれにアクセスするほうが低コスト
public Hogehoge[] hogehoges;
public class Hogehoge : MonoBehaviour
{
public int 変数A{ get { return 変数a; } set { 変数a = value; } }
public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
}
// GameManager.cs
public class GameManager : MonoBehaviour
{
public GameObject[] objects;
// B
private void Start()
{
int aaa = this.objects[0].変数A; // @
int bbb = this.objects[0].GetComponent<Hogehoge>().変数A; // A
}
}
GameManagerの@はthis.objects[0]を見ている=GameObjectクラスを見ているので、GameObjectに変数Aがなくてエラーになる
Aはthis.objects[0](GameObject)からHogehogeクラスを取得してHogehogeクラスを見ているので、Hogehogeの変数Aを見てエラーにならない
ただしGetComponentはコストが高い処理なので、毎フレーム実行する必要がある場合などはクラス変数(B)にHogehogeの変数を定義しておきそれにアクセスするほうが低コスト
public Hogehoge[] hogehoges;
238名前は開発中のものです。
2023/11/26(日) 10:30:50.60ID:sKe5WX7u239名前は開発中のものです。
2023/11/26(日) 10:32:30.63ID:ap8K17/p 教えすぎないほうがいいのかなあ
240名前は開発中のものです。
2023/11/26(日) 10:39:04.38ID:J5rQpI/4 >>239
>教えすぎないほうがいいのかなあ
そんなことありません。
正解を教えて頂いたあと理解するため自分で何度も理解する様努めますし。
もちろん、理解しないままでいいやって人もいるでしょうけど
自分は次から自分のものにしないと意味がないとわかっているので
答えを知ったら終わりのつもりありません。
ただ、自力で答えにたどり着くには独学や人の限られたブログなどでは
行き着けない場合もあるんです。
そんな時、あなたの様にスパッと答えを教えて頂けるのは非常にありがたいと思っています。
ありがとうございます。
すみません、
>Hogehogeの変数を定義しておきそれにアクセスするほうが低コスト
>public Hogehoge[] hogehoges;
について、もう少し具体的に解説お願いできないでしょうか。
>教えすぎないほうがいいのかなあ
そんなことありません。
正解を教えて頂いたあと理解するため自分で何度も理解する様努めますし。
もちろん、理解しないままでいいやって人もいるでしょうけど
自分は次から自分のものにしないと意味がないとわかっているので
答えを知ったら終わりのつもりありません。
ただ、自力で答えにたどり着くには独学や人の限られたブログなどでは
行き着けない場合もあるんです。
そんな時、あなたの様にスパッと答えを教えて頂けるのは非常にありがたいと思っています。
ありがとうございます。
すみません、
>Hogehogeの変数を定義しておきそれにアクセスするほうが低コスト
>public Hogehoge[] hogehoges;
について、もう少し具体的に解説お願いできないでしょうか。
241名前は開発中のものです。
2023/11/26(日) 10:48:37.62ID:J5rQpI/4 >毎フレーム実行する必要がある場合などは
>GameManager.csのクラス変数に
>Hogehogeの変数を定義
public Hogehoge[] hogehoges;
これでHogehoge型の配列を作っても
hogehogesはまだ空の状態ですよね?
hogehoges = new Hogehoge[10];みたいなのやんないと
アクセスできませんか?
>GameManager.csのクラス変数に
>Hogehogeの変数を定義
public Hogehoge[] hogehoges;
これでHogehoge型の配列を作っても
hogehogesはまだ空の状態ですよね?
hogehoges = new Hogehoge[10];みたいなのやんないと
アクセスできませんか?
242名前は開発中のものです。
2023/11/26(日) 10:59:45.33ID:ap8K17/p >>240
C#というかUnityと付き合っていけばいずれパフォーマンスの最適化という壁にぶち当たる日が来る
そうなった時、というかそうなった時には大抵手遅れだから、同じ結果が得られるならコストが低い処理を極力使ったほうがいい
GameObject obj1; という変数があるとして、このobj1にアタッチされたHogehogeコンポーネントにアクセスしたい場合
Hogehoge hooo1 = obj1.GetComponent<Hogehoge>();
でアクセスすることは可能
ただしGetComponentを1回実行すると、GC.Allocというメモリ上のゴミが発生する上にこれ自体の所要時間も結構なものだから、GetComponentはコストが高い
「私1フレーム内でGetComponentを10回使ってるんですよ〜」とか言ったら吐き気を催される
なのでGetComponentの使用回数は最小限に減らさなければいけない
1つのプレハブを複製するというのが要件にあるようだから、それを加味したうえでGetCompoenentの使用回数を最小限に減らすと
C#というかUnityと付き合っていけばいずれパフォーマンスの最適化という壁にぶち当たる日が来る
そうなった時、というかそうなった時には大抵手遅れだから、同じ結果が得られるならコストが低い処理を極力使ったほうがいい
GameObject obj1; という変数があるとして、このobj1にアタッチされたHogehogeコンポーネントにアクセスしたい場合
Hogehoge hooo1 = obj1.GetComponent<Hogehoge>();
でアクセスすることは可能
ただしGetComponentを1回実行すると、GC.Allocというメモリ上のゴミが発生する上にこれ自体の所要時間も結構なものだから、GetComponentはコストが高い
「私1フレーム内でGetComponentを10回使ってるんですよ〜」とか言ったら吐き気を催される
なのでGetComponentの使用回数は最小限に減らさなければいけない
1つのプレハブを複製するというのが要件にあるようだから、それを加味したうえでGetCompoenentの使用回数を最小限に減らすと
243名前は開発中のものです。
2023/11/26(日) 11:00:07.84ID:ap8K17/p こうなる↓
public class GameManager : MonoBehaviour
{
GameObject prefab;
Hogehoge[] hogehoges;
private void Start()
{
hogehoges = new Hogehoge[10];
for (int i = 0; i < hogehoges.Length; i++)
{
GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する
hogehoges[i] = obj.GetComponent<Hogehoge>(); // 複製オブジェクトからHogehogeコンポーネントを取得して、配列hogehogesにぶち込む
obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.localPosition = Quaternion.identity; // 角度を変更
}
}
private void Update()
{
for (int i = 0; i < hogehoges.Length; i++)
{
hogehoges[i].変数A = hogehoges[i].変数A + 1; // 【A】
}
}
}
こうすれば毎フレームのHogehogeのアクセスはクラス変数にキャッシュした値へのアクセスになるので、パフォーマンスは最適化されたことになる
GetComponentもそうだしInstantiateもそうだけど、UnityEngine傘下で定義された変数や関数は高コストという認識でおk
Hogehoge[] hogehoges; みたいに自分で作成したコンポーネントやクラスの傘下に定義された変数や関数なら低コスト
public class GameManager : MonoBehaviour
{
GameObject prefab;
Hogehoge[] hogehoges;
private void Start()
{
hogehoges = new Hogehoge[10];
for (int i = 0; i < hogehoges.Length; i++)
{
GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する
hogehoges[i] = obj.GetComponent<Hogehoge>(); // 複製オブジェクトからHogehogeコンポーネントを取得して、配列hogehogesにぶち込む
obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.localPosition = Quaternion.identity; // 角度を変更
}
}
private void Update()
{
for (int i = 0; i < hogehoges.Length; i++)
{
hogehoges[i].変数A = hogehoges[i].変数A + 1; // 【A】
}
}
}
こうすれば毎フレームのHogehogeのアクセスはクラス変数にキャッシュした値へのアクセスになるので、パフォーマンスは最適化されたことになる
GetComponentもそうだしInstantiateもそうだけど、UnityEngine傘下で定義された変数や関数は高コストという認識でおk
Hogehoge[] hogehoges; みたいに自分で作成したコンポーネントやクラスの傘下に定義された変数や関数なら低コスト
244名前は開発中のものです。
2023/11/26(日) 11:18:12.87ID:ap8K17/p あ、>>243
obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.localPosition = Quaternion.identity; // 角度を変更
は
obj.transform.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.transform.localPosition = Quaternion.identity; // 角度を変更
が正しい
でも、このobj.transformもUnityEngine傘下の変数なので・・・あとは分かるだろうか
obj.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.localPosition = Quaternion.identity; // 角度を変更
は
obj.transform.localPosition = new Vector3(i, 0f, 0f); // 位置を変更
obj.transform.localPosition = Quaternion.identity; // 角度を変更
が正しい
でも、このobj.transformもUnityEngine傘下の変数なので・・・あとは分かるだろうか
245名前は開発中のものです。
2023/11/26(日) 11:24:49.94ID:sKe5WX7u ホビーストクリエイターならコストとか処理遅いとか気にしなくてもいいよ
ここに来るのはそういうのが大半でしょ
本格的な売り物なら別にだけどね
ここに来るのはそういうのが大半でしょ
本格的な売り物なら別にだけどね
246名前は開発中のものです。
2023/11/26(日) 12:29:20.67ID:RHrCXnE8 ホビー云々関係なく、気になる問題は潰した方が将来のためだよ
不要なAPIコール抑えるのはプログラミングの基本
処理負荷気にしないプログラマは仕事でも品質悪いコードを書く
不要なAPIコール抑えるのはプログラミングの基本
処理負荷気にしないプログラマは仕事でも品質悪いコードを書く
247名前は開発中のものです。
2023/11/26(日) 12:33:35.93ID:RHrCXnE8248名前は開発中のものです。
2023/11/26(日) 12:39:02.58ID:ap8K17/p あああ配列を生成するためのGCが発生してんのか
nameとかtagみたいにアクセスするだけでGCが発生する組だと思ってた
UpdateでGetComponentするなは割とよく言われてる気がする
https://www.google.com/search?q=getcomponent+update
nameとかtagみたいにアクセスするだけでGCが発生する組だと思ってた
UpdateでGetComponentするなは割とよく言われてる気がする
https://www.google.com/search?q=getcomponent+update
249名前は開発中のものです。
2023/11/26(日) 12:44:50.43ID:sKe5WX7u それの一発目のテラのやつは問題ありませんキリッって、書いてるが
まぁ大してとかある程度とかの体感記事などほとんどがスペック、時間という物を提示しないで、遅いとか重いとか言ってるとこのをベースに広まってるよね
所詮ハードが1年進化するだけでも重さなんか気にするほどじゃねーよ
まぁ大してとかある程度とかの体感記事などほとんどがスペック、時間という物を提示しないで、遅いとか重いとか言ってるとこのをベースに広まってるよね
所詮ハードが1年進化するだけでも重さなんか気にするほどじゃねーよ
250名前は開発中のものです。
2023/11/26(日) 13:06:00.31ID:RHrCXnE8 まじで他人の意見を鵜呑みにしてはいけないとはこのことw
自分はプロファイラ載せてる記事だけ見るようにしてる
ただ、UpdateでGetComponentは無駄なので、キャッシュするに越したことはないとは思ってる
Componentなんてほぼ静的だし
自分はプロファイラ載せてる記事だけ見るようにしてる
ただ、UpdateでGetComponentは無駄なので、キャッシュするに越したことはないとは思ってる
Componentなんてほぼ静的だし
251名前は開発中のものです。
2023/11/26(日) 13:13:11.53ID:kOB5vzh5 要するに他のスクリプトにアクセスするのにGetComponent使わないと
いけないことを知らないだけだな
いけないことを知らないだけだな
252名前は開発中のものです。
2023/11/26(日) 13:33:35.58ID:ap8K17/p 2022/8/15 サイバーエージェントのパフォーマンスチューニングバイブル
https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible
9.3 コンポーネントの取得
同じ GameObject にアタッチされている他のコンポーネントを取得する GetComponent() も注意が必要な 1 つです。
前節の tag プロパティや name プロパティ同様にネイティブコードで実装された処理を呼び出していることもそうですが、指定した型のコンポーネントを「検索する」コストがかかることにも気をつけなければなりません。
下記サンプルコードでは毎フレーム Rigidbody コンポーネントを検索するコストがかかることになります。頻繁にアクセスする場合は、あらかじめキャッシュしたものを使い回すようにしましょう。
毎フレーム GetComponent() するコード
void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.up * 10f);
}
https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible
9.3 コンポーネントの取得
同じ GameObject にアタッチされている他のコンポーネントを取得する GetComponent() も注意が必要な 1 つです。
前節の tag プロパティや name プロパティ同様にネイティブコードで実装された処理を呼び出していることもそうですが、指定した型のコンポーネントを「検索する」コストがかかることにも気をつけなければなりません。
下記サンプルコードでは毎フレーム Rigidbody コンポーネントを検索するコストがかかることになります。頻繁にアクセスする場合は、あらかじめキャッシュしたものを使い回すようにしましょう。
毎フレーム GetComponent() するコード
void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.up * 10f);
}
253名前は開発中のものです。
2023/11/26(日) 13:35:36.82ID:ap8K17/p ついでに2022.3.10f1で検証してきた
https://i.imgur.com/itDtIfy.png
この差を気にするか気にしないかはきのこたけのこ張りの宗教戦争なので、きのこが好きかたけのこが好きかによって意見が真っ二つやね
https://i.imgur.com/itDtIfy.png
この差を気にするか気にしないかはきのこたけのこ張りの宗教戦争なので、きのこが好きかたけのこが好きかによって意見が真っ二つやね
254名前は開発中のものです。
2023/11/26(日) 13:49:05.74ID:sKe5WX7u まぁ初心者のときにやることとして
アップデートでprintするとメチャログ埋まるやん
それを見て、あっやべーアップデートでそういう事しちゃあかんなと思えればいいんでねーかな
printですらこんなに沢山なんだから他の処理やったら大変だ!と思えればキャッシュしてやろーって思わないなら向いてね~ってことで(笑)
アップデートでprintするとメチャログ埋まるやん
それを見て、あっやべーアップデートでそういう事しちゃあかんなと思えればいいんでねーかな
printですらこんなに沢山なんだから他の処理やったら大変だ!と思えればキャッシュしてやろーって思わないなら向いてね~ってことで(笑)
255名前は開発中のものです。
2023/11/26(日) 14:08:31.06ID:kOB5vzh5 俺がGetComponetするのはStartかAwakeの中
それと何かと衝突した時とかの特定のイベント時くらいかな
Updateの中で常時使わないね
それと何かと衝突した時とかの特定のイベント時くらいかな
Updateの中で常時使わないね
256名前は開発中のものです。
2023/11/26(日) 14:13:45.97ID:J5rQpI/4 神々が言い争ってるみたいですが、
結局、私はupdate()内でGetComponent() を記載しまくっても
さほど問題にはならないということでしょうか?
結局、私はupdate()内でGetComponent() を記載しまくっても
さほど問題にはならないということでしょうか?
257名前は開発中のものです。
2023/11/26(日) 14:17:57.98ID:RHrCXnE8 例えどんなにマシンのスペックが上がったとしても
要求される表現のハードルが上がるだけなので宗教もクソもない
無駄な負荷のかからない「当たり前」のコードを書く習慣をつけておけばいいだけ
PS5やPCゲーム主流の現在でも、何故パフォーマンスチューニングなるものが必要なのか考えればわかる話
要求される表現のハードルが上がるだけなので宗教もクソもない
無駄な負荷のかからない「当たり前」のコードを書く習慣をつけておけばいいだけ
PS5やPCゲーム主流の現在でも、何故パフォーマンスチューニングなるものが必要なのか考えればわかる話
258名前は開発中のものです。
2023/11/26(日) 14:21:07.35ID:ap8K17/p その当たり前の物差しが万人共通であればの話ね
259名前は開発中のものです。
2023/11/26(日) 14:24:26.35ID:aCF9jYUz GCのスパイクは塵積だし、いざ原因を探そうって時に心当たりが山盛りあったら手に負えなくね?
260名前は開発中のものです。
2023/11/26(日) 14:29:32.88ID:J5rQpI/4 現状、
<GameManager.cs>
void Update()
{
for (int i = 0; i < Array01.Length; i++)
{
if(i == 10){
this.objects[0].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A;
}else{
this.objects[i+1].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A;
}
}
で正しく動いてくれました。
で、>>243さんのご指摘にある「GetComponentをupload()に書くのは好ましくない」というご意見から
今、>>243さんの記述してくれたコードを理解して
それを実装して、これと同じことを再現しようとしています。
ただ、this.objects[添字].GetComponent<Hogehoge>().変数名;という1文だけで
済んでいる現状で問題ないなら分かりやすいこの記述方法で行きたいなあというのが正直なところです。
<GameManager.cs>
void Update()
{
for (int i = 0; i < Array01.Length; i++)
{
if(i == 10){
this.objects[0].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A;
}else{
this.objects[i+1].GetComponent<Hogehoge>().変数B = this.objects[I].GetComponent<Hogehoge>().変数A;
}
}
で正しく動いてくれました。
で、>>243さんのご指摘にある「GetComponentをupload()に書くのは好ましくない」というご意見から
今、>>243さんの記述してくれたコードを理解して
それを実装して、これと同じことを再現しようとしています。
ただ、this.objects[添字].GetComponent<Hogehoge>().変数名;という1文だけで
済んでいる現状で問題ないなら分かりやすいこの記述方法で行きたいなあというのが正直なところです。
261名前は開発中のものです。
2023/11/26(日) 14:33:47.06ID:RHrCXnE8 少なくとも関数コールの結果をキャッシュして無駄な計算を減らすと良いのは
プログラミングとして当たり前の概念
たとえばsin,cosなどの関数は引数に対して結果が同じだから、
キャッシュしておくと高速化できる
可読性を落としてまでGetComponentケチれとは言わないが
Updateで毎回コールするくらいなら変数にキャッシュすれば済むので手間じゃないだろう
あと、
GetComponent<Hoge>.Fuga();
GetComponent<Hoge>.Piyo();
みたいに続けざまに書くのもヤメレw
プログラミングとして当たり前の概念
たとえばsin,cosなどの関数は引数に対して結果が同じだから、
キャッシュしておくと高速化できる
可読性を落としてまでGetComponentケチれとは言わないが
Updateで毎回コールするくらいなら変数にキャッシュすれば済むので手間じゃないだろう
あと、
GetComponent<Hoge>.Fuga();
GetComponent<Hoge>.Piyo();
みたいに続けざまに書くのもヤメレw
262名前は開発中のものです。
2023/11/26(日) 14:38:54.57ID:ap8K17/p まあ今はUnity勉強中で動けばなんでもOKだろうから毎フレームGetComponentでも別に問題ないよ
ただ259みたいな宗派もいることは頭の片隅に置いといてね
ただ259みたいな宗派もいることは頭の片隅に置いといてね
263名前は開発中のものです。
2023/11/26(日) 14:43:48.07ID:RHrCXnE8 UpdateでGetComponentはまだわかるがUpdateでGCは流石にないw
過去にこう言うコード書く奴が居て >>259 のような悪夢が襲って大変な目に遭ったことがあったんよ
プレイしてると何故か引っかかった動きをするんだもん
Incremental GCもフレーム分散するだけだからUpdateでGCには効果なし
過去にこう言うコード書く奴が居て >>259 のような悪夢が襲って大変な目に遭ったことがあったんよ
プレイしてると何故か引っかかった動きをするんだもん
Incremental GCもフレーム分散するだけだからUpdateでGCには効果なし
264名前は開発中のものです。
2023/11/26(日) 14:48:03.88ID:J5rQpI/4 >動けばなんでもOKだろうから
いや、そこまで妥協したいというわけでも無いです。。。
その、>>243にあるコードって、
現在自分が書いてる<gamemanager.cs>
public GameObject[] Array01;
void Start(){
Array01 = new GameObject[10];
GameObject obj = (GameObject)Resources.Load("プレハブ名");
for (int i = 0; i < Array01.Length; i++)
{Array0[i] = Instantiate(obj, new Vector2(i,0.0f), Quaternion.identity);}
}
で、いうと、
GameObject型の配列じゃなく、prefabのクラス型で配列を宣言して、
あとは同じことをしてその配列に突っ込みなさいって感じですか?
で、prefabのクラス型で配列で作ったら、いちいちGetComponentしなくてもいいよって
理解で正しいですか?
いや、そこまで妥協したいというわけでも無いです。。。
その、>>243にあるコードって、
現在自分が書いてる<gamemanager.cs>
public GameObject[] Array01;
void Start(){
Array01 = new GameObject[10];
GameObject obj = (GameObject)Resources.Load("プレハブ名");
for (int i = 0; i < Array01.Length; i++)
{Array0[i] = Instantiate(obj, new Vector2(i,0.0f), Quaternion.identity);}
}
で、いうと、
GameObject型の配列じゃなく、prefabのクラス型で配列を宣言して、
あとは同じことをしてその配列に突っ込みなさいって感じですか?
で、prefabのクラス型で配列で作ったら、いちいちGetComponentしなくてもいいよって
理解で正しいですか?
265名前は開発中のものです。
2023/11/26(日) 14:57:45.07ID:o5cSag8H いつになくスレがまともだ。。。
266名前は開発中のものです。
2023/11/26(日) 14:58:57.43ID:ap8K17/p267名前は開発中のものです。
2023/11/26(日) 15:05:48.10ID:uqB1fo0P GetComponentをUpdateの中で呼ぶにしても先にnullチェックするだけで効率化されるのにUpdate毎にGetComponent呼ぶのは流石にアホのすること
268名前は開発中のものです。
2023/11/26(日) 15:10:57.38ID:RHrCXnE8 そんな時はTryGetComponentを使うのがおすすめ
nullチェック相当も全部これで間に合う
nullチェック相当も全部これで間に合う
269名前は開発中のものです。
2023/11/26(日) 15:15:03.57ID:RHrCXnE8 ああ間違ったキャッシュ変数のnullチェックのことね
それならどっち道必要だわごめん
それならどっち道必要だわごめん
270名前は開発中のものです。
2023/11/26(日) 15:25:20.80ID:ap8K17/p Unity2019辺りで
GameObject obj = Instantiate(prefab);
DestroyImmediate(obj);
Debug.Log(obj?.name);
みたいなコード書いたらヌルポだったんだけど、Unity2022辺りは改善されたのかな
こういう細かい仕様って今日みたいな機会でもないとわざわざ調べる気にならんのよね・・・
GameObject obj = Instantiate(prefab);
DestroyImmediate(obj);
Debug.Log(obj?.name);
みたいなコード書いたらヌルポだったんだけど、Unity2022辺りは改善されたのかな
こういう細かい仕様って今日みたいな機会でもないとわざわざ調べる気にならんのよね・・・
271名前は開発中のものです。
2023/11/26(日) 15:33:06.23ID:J5rQpI/4 >>266
ありがとうございます。がんばります!!
絶対Unityから逃げません!
今作ってる処女作が完成したら、ここで皆さんに配布させてください!
絶対「面白い」って言わせてみせます!
(それまでに何度かまた障害にぶつかると思うんでまた相談させてください)
ありがとうございます。がんばります!!
絶対Unityから逃げません!
今作ってる処女作が完成したら、ここで皆さんに配布させてください!
絶対「面白い」って言わせてみせます!
(それまでに何度かまた障害にぶつかると思うんでまた相談させてください)
272名前は開発中のものです。
2023/11/26(日) 16:00:34.31ID:sKe5WX7u 宗派かぁ
癌になるから肉食わない
ビーガンなので肉食わない
ビールも酒も飲む
宗教で禁止されてるから飲まない
どれもすんげー長生きするとかしてないじゃん、これで二百年生きますならそれすればいいけど、二百年生きてヨボヨボじゃね
パソコンもソフトも変わらんよ
OSはますます肥大化してるんだし
いくらアプリの細かいところをやったところでね
処女作ならサクッと完成品作って動く喜び味わうのがいいよ
動かしてみて引っかかるとかの現象が起きればそれは改良するチャンス
次に活かせばいいだけや
まずは完成品やで
癌になるから肉食わない
ビーガンなので肉食わない
ビールも酒も飲む
宗教で禁止されてるから飲まない
どれもすんげー長生きするとかしてないじゃん、これで二百年生きますならそれすればいいけど、二百年生きてヨボヨボじゃね
パソコンもソフトも変わらんよ
OSはますます肥大化してるんだし
いくらアプリの細かいところをやったところでね
処女作ならサクッと完成品作って動く喜び味わうのがいいよ
動かしてみて引っかかるとかの現象が起きればそれは改良するチャンス
次に活かせばいいだけや
まずは完成品やで
273名前は開発中のものです。
2023/11/26(日) 17:30:21.75ID:J5rQpI/4 すみません、
>>243さんのコード試してみてるのですが
GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する
で、
「インスタンス化したいオブジェクトが null です」とエラーが出ます。
自分もコードみてて気になってたんですが、
自分が書いてたコードの時でいうところの
GameObject obj = (GameObject)Resources.Load("プレハブの名前");みたいに
どこかでプレハブ化しているオブジェクトの名前を記述しなければならない気がするんですが
違いますか?
例えば、
public GameObject prefab;
void Start()
{ GameObject obj = Instantiate(prefab); }
これでは、prefabにはなにも入っていません。
記述漏れかな?とか。
>>243さんのコード試してみてるのですが
GameObject obj = Instantiate(prefab); // プレハブから複製オブジェクトを生成・配置する
で、
「インスタンス化したいオブジェクトが null です」とエラーが出ます。
自分もコードみてて気になってたんですが、
自分が書いてたコードの時でいうところの
GameObject obj = (GameObject)Resources.Load("プレハブの名前");みたいに
どこかでプレハブ化しているオブジェクトの名前を記述しなければならない気がするんですが
違いますか?
例えば、
public GameObject prefab;
void Start()
{ GameObject obj = Instantiate(prefab); }
これでは、prefabにはなにも入っていません。
記述漏れかな?とか。
274名前は開発中のものです。
2023/11/26(日) 17:37:44.06ID:sKe5WX7u パブリックなんだからインスペクタで指定してるんでしょきっと
275名前は開発中のものです。
2023/11/26(日) 17:49:39.47ID:ap8K17/p >>273
MonoBehaviourを継承したスクリプトがアタッチされたオブジェクトが予めシーンのどこかに配置されてる前提になるけど、このオブジェクトを選択するとInspectorにpublicの変数が表示されてそこにオブジェクトを指定したりできるようになる
243はその前提のコードになってる
MonoBehaviourを継承したスクリプトがアタッチされたオブジェクトが予めシーンのどこかに配置されてる前提になるけど、このオブジェクトを選択するとInspectorにpublicの変数が表示されてそこにオブジェクトを指定したりできるようになる
243はその前提のコードになってる
276名前は開発中のものです。
2023/11/26(日) 17:56:54.74ID:wJ4Ewbd+ (0,0,0)にあるオブジェクトの情報を取得する方法が知りたいんですが、
レイを飛ばすのとコライダーを使う以外に手っ取り早い方法ってないのでしょうか?
オブジェクトを(0,0,0)ちょうどに置くので余計なことをしないでgameobject関数に入れたいのですが…
レイを飛ばすのとコライダーを使う以外に手っ取り早い方法ってないのでしょうか?
オブジェクトを(0,0,0)ちょうどに置くので余計なことをしないでgameobject関数に入れたいのですが…
277名前は開発中のものです。
2023/11/26(日) 18:17:53.87ID:J5rQpI/4 >>275
ほんとだ、ゲームマネージャーのスクリプトのインスペクタに
prefabの枠ができてました!
初歩的なことかもしれませんが
プレハブ化したオブジェクトをその枠にドラッグしようとしたら
プレハブクリックしたらプレハブのインスペクタに切り替わっちゃうんですが
これ、どうすればいいんですか?^^;
ほんとだ、ゲームマネージャーのスクリプトのインスペクタに
prefabの枠ができてました!
初歩的なことかもしれませんが
プレハブ化したオブジェクトをその枠にドラッグしようとしたら
プレハブクリックしたらプレハブのインスペクタに切り替わっちゃうんですが
これ、どうすればいいんですか?^^;
278名前は開発中のものです。
2023/11/26(日) 18:19:48.20ID:J5rQpI/4 あー、すみません。
ドラッグじゃなくて、枠のほうで選べるんですね
すみません。解決しました。
ドラッグじゃなくて、枠のほうで選べるんですね
すみません。解決しました。
279名前は開発中のものです。
2023/11/26(日) 18:21:25.49ID:nqSny9Yy みんなはどんなPCでゲーム制作してるの?
MacBookかWindowsPCかで悩むわ
どっちにしてもデスクトップは置き場ないから
ノートPCになる
MacBookかWindowsPCかで悩むわ
どっちにしてもデスクトップは置き場ないから
ノートPCになる
280名前は開発中のものです。
2023/11/26(日) 18:21:35.61ID:sKe5WX7u >>276
シーンにあるobjectを一覧にしてそのトランスフォームが原点か否か見ればよくね?
シーンにあるobjectを一覧にしてそのトランスフォームが原点か否か見ればよくね?
281名前は開発中のものです。
2023/11/26(日) 18:32:14.78ID:J5rQpI/4 うおおおおおおおおおおおおお!!!
すごいっす!!!!
>>243さん、すごいっす!!!
update()内にGetComponent無しで
完全に一緒の状況になりました!!!
これで前より軽くなってるってことですよね!
すごいっす!感動です!
すごいっす!!!!
>>243さん、すごいっす!!!
update()内にGetComponent無しで
完全に一緒の状況になりました!!!
これで前より軽くなってるってことですよね!
すごいっす!感動です!
282ドーンおじ
2023/11/26(日) 18:42:25.15ID:vo5TLBjQ ID:J5rQpI/4のおかげでこのスレのレベルが格段に上がった!褒めて使わす!m9⎛´・ω・`⎞ドーン!
ID:sKe5WX7uのせいで低クオリティになってる!消えろ!死ね!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
ID:sKe5WX7uのせいで低クオリティになってる!消えろ!死ね!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
283名前は開発中のものです。
2023/11/26(日) 18:52:37.05ID:kOB5vzh5284名前は開発中のものです。
2023/11/26(日) 19:21:28.97ID:wJ4Ewbd+ >>280
すいません、スクリプトで取得したいんです
gameobject関数に入れた自作変数に(0,0,0)にあるオブジェクトはこれだよってしたいんですよね
(0,0,0)は実際には動かすんですけどややこしいので説明省きました
すいません、スクリプトで取得したいんです
gameobject関数に入れた自作変数に(0,0,0)にあるオブジェクトはこれだよってしたいんですよね
(0,0,0)は実際には動かすんですけどややこしいので説明省きました
285名前は開発中のものです。
2023/11/26(日) 20:04:29.42ID:wJ4Ewbd+ >>284
chatGPTに聞いてもPhysics.OverlapSphereかRaycast使えって言われるんですよね
指定された座標のオブジェクト情報を取得したいだけなんで「そんなことせなあかんか?」って思ったんですけど、調べてもそれしか無さそう?
chatGPTに聞いてもPhysics.OverlapSphereかRaycast使えって言われるんですよね
指定された座標のオブジェクト情報を取得したいだけなんで「そんなことせなあかんか?」って思ったんですけど、調べてもそれしか無さそう?
286名前は開発中のものです。
2023/11/26(日) 20:13:44.84ID:uqB1fo0P シーンに直置きしてるならシリアライズフィールド使うかStartで自分から登録されに行けばよくないか?
287名前は開発中のものです。
2023/11/26(日) 20:25:02.75ID:nqSny9Yy288名前は開発中のものです。
2023/11/26(日) 20:29:11.75ID:YEGARdnY いわゆるグリッド移動ならインデックス管理しておいて、そのインデックスにオブジェクトを格納しておけばいいけど
指定したグローバル座標にあるオブジェクトを取得するのはRayかOverlap~しかないんじゃないかな
いや、これらが取得するのは厳密にはColliderだからObjectに変換する必要あるけど
タグかレイヤーで目的以外は弾けば無駄が少ない
指定したグローバル座標にあるオブジェクトを取得するのはRayかOverlap~しかないんじゃないかな
いや、これらが取得するのは厳密にはColliderだからObjectに変換する必要あるけど
タグかレイヤーで目的以外は弾けば無駄が少ない
289名前は開発中のものです。
2023/11/26(日) 20:39:15.05ID:ap8K17/p Physics.Raycastを嫌う理由がGC発生によるパフォーマンスの低下だとするなら、Physics.RaycastNonAllocを使えばいい
使ったことないけどOverlapSphereも同様らしい
GC発生を嫌ってるわけではないとなると目的が不明瞭なので適切な提案ができない
使ったことないけどOverlapSphereも同様らしい
GC発生を嫌ってるわけではないとなると目的が不明瞭なので適切な提案ができない
290名前は開発中のものです。
2023/11/26(日) 21:06:45.28ID:wJ4Ewbd+ >>286,288,289
まとめての返信で失礼します
288さんの言うようにグリッド移動ですね。語彙力無くてすいません
GCとか後々のことを意識してのことではありました。初心者知識ですがわざわざ余計な処理を走るのを避けたかったんです。
なんか、もうちょい軽い処理でいけそうだなぁ…って考えたんですけどね…
インデックス管理もなんとなくやることは分かってる程度で実行したことないんで…例えば10×10×10の立体的な碁盤を用意したりしたらそれはそれで全て管理したら処理が重そうだし
とりあえず教えていただいた関数使ってみます!ありがとうございます
まとめての返信で失礼します
288さんの言うようにグリッド移動ですね。語彙力無くてすいません
GCとか後々のことを意識してのことではありました。初心者知識ですがわざわざ余計な処理を走るのを避けたかったんです。
なんか、もうちょい軽い処理でいけそうだなぁ…って考えたんですけどね…
インデックス管理もなんとなくやることは分かってる程度で実行したことないんで…例えば10×10×10の立体的な碁盤を用意したりしたらそれはそれで全て管理したら処理が重そうだし
とりあえず教えていただいた関数使ってみます!ありがとうございます
291名前は開発中のものです。
2023/11/26(日) 21:12:43.41ID:sKe5WX7u292名前は開発中のものです。
2023/11/26(日) 21:14:07.82ID:sKe5WX7u293ドーンおじ
2023/11/26(日) 21:25:02.28ID:vo5TLBjQ >>291-292
なんだその回答は!?低クオリティすぎんだろ!?死ねよ!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
なんだその回答は!?低クオリティすぎんだろ!?死ねよ!m9⎛´・ω・`⎞;y=ー(゚д゚)・・∵. ドーン!
294名前は開発中のものです。
2023/11/26(日) 21:27:08.12ID:wJ4Ewbd+ >>292
舐めてました?すいません。笑
まぁ軽く出来るならやっとこうぐらいの精神ですかね。出来ないなら出来ないってきっぱり分かっときたかったんですよね。自分で調べる分だと悪魔の証明になっちゃいそうだったんで
プレイヤーが1,0,1にいるなら正面の1,0,2のオブジェクトは何か?ってのをやりたかった。でもまぁ後は自分で試行します。
舐めてました?すいません。笑
まぁ軽く出来るならやっとこうぐらいの精神ですかね。出来ないなら出来ないってきっぱり分かっときたかったんですよね。自分で調べる分だと悪魔の証明になっちゃいそうだったんで
プレイヤーが1,0,1にいるなら正面の1,0,2のオブジェクトは何か?ってのをやりたかった。でもまぁ後は自分で試行します。
295名前は開発中のものです。
2023/11/26(日) 22:08:54.91ID:kOB5vzh5 >>287
ディスプレイなんて何でもいいけど小さいと使いにくいだけ
ディスプレイなんて何でもいいけど小さいと使いにくいだけ
296名前は開発中のものです。
2023/11/26(日) 22:24:40.93ID:uqB1fo0P そういうのはアルゴリズム組んだほうがええんちゃうか
物理空間上でうにゃうにゃするとUnityの癖に悩まされたりバグの温床になったりする
物理空間上でうにゃうにゃするとUnityの癖に悩まされたりバグの温床になったりする
297名前は開発中のものです。
2023/11/26(日) 22:25:46.37ID:sKe5WX7u ドーンおじの正体はこれな
141 ドーンおじ sage 2023/10/08(日) 09:20:11.70 ID:FDh2RFJV
あーうぜぇ!製品レベルのもん見せたらサークルがバレんだろ!
このエロゲの作者は5chで初心者虐めてる嫌な奴って噂になったら売れなくなるだろ!m9?´・ω・`?ドーン!
141 ドーンおじ sage 2023/10/08(日) 09:20:11.70 ID:FDh2RFJV
あーうぜぇ!製品レベルのもん見せたらサークルがバレんだろ!
このエロゲの作者は5chで初心者虐めてる嫌な奴って噂になったら売れなくなるだろ!m9?´・ω・`?ドーン!
299名前は開発中のものです。
2023/11/27(月) 02:36:36.68ID:BoRbbeFq ID:sKe5WX7u
あれだけ宗派云々で盛り上がった後なのに
世界には俺以外の宗派は存在しないし認めないと思ってるアホやね
あれだけ宗派云々で盛り上がった後なのに
世界には俺以外の宗派は存在しないし認めないと思ってるアホやね
300名前は開発中のものです。
2023/11/27(月) 09:04:30.48ID:jh8FMahn ドーンおじとやらもきっと、最初は真面目に質問に答えてたけど、292みたいなのがいるからマジレスするのがアホらしくなって荒らしに転向したんだろうなあ
そう考えるとなんか可哀想
そう考えるとなんか可哀想
301名前は開発中のものです。
2023/11/27(月) 11:41:20.00ID:wHJ3vaA9 URPで2Dのレンダラーを使用中に3Dのライトを表示する方法、
もしくは複数のレンダラーを同事に使用する方法はありますか?
2D Lightと普通のライトを合成して使いたいです
もしくは複数のレンダラーを同事に使用する方法はありますか?
2D Lightと普通のライトを合成して使いたいです
302名前は開発中のものです。
2023/11/27(月) 11:56:05.86ID:aMnFU6g7 >>294
指定座標からraycast出してhitしたオブジェクトをGetComponentしたらいいよ
指定座標からraycast出してhitしたオブジェクトをGetComponentしたらいいよ
303名前は開発中のものです。
2023/11/27(月) 12:09:35.21ID:noS+cgi4 こんにちは質問です。
プレハブにアニメーションをつけて、いくつかの状態を切り替えて使おうとしました。
たとえばトイレ便器のフタがしまった状態から、フタが開くアニメ、フタ開いた状態、便座も開いた状態、というようにキーフレームが作ってあります
で、再生時の初期状態として欲しい状態が60フレームにあるとして
ロード後に自動で60フレームにするにはどうしたらよいでしょうか
かってに全フレーム再生してラストで止まるか、何も再生されず1フレームのままか、の2パターンはやれるのですが。
プレハブにアニメーションをつけて、いくつかの状態を切り替えて使おうとしました。
たとえばトイレ便器のフタがしまった状態から、フタが開くアニメ、フタ開いた状態、便座も開いた状態、というようにキーフレームが作ってあります
で、再生時の初期状態として欲しい状態が60フレームにあるとして
ロード後に自動で60フレームにするにはどうしたらよいでしょうか
かってに全フレーム再生してラストで止まるか、何も再生されず1フレームのままか、の2パターンはやれるのですが。
304名前は開発中のものです。
2023/11/27(月) 12:26:46.66ID:aMnFU6g7 >>303
Startに
Animator animator;
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
animator.Play(stateInfo.fullPathHash, 0, 1);
1のところが0~1でどこらへんから再生させるか調整するって感じです?
60フレーム目とかで判別できないので
小数点いれて調整してみてねってことで
Startに
Animator animator;
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
animator.Play(stateInfo.fullPathHash, 0, 1);
1のところが0~1でどこらへんから再生させるか調整するって感じです?
60フレーム目とかで判別できないので
小数点いれて調整してみてねってことで
305名前は開発中のものです。
2023/11/27(月) 12:29:51.25ID:KkPr08oo 次の質問する前に回答してくれてる人には最低限のマナーとして返信はしましょう
306名前は開発中のものです。
2023/11/27(月) 12:42:50.33ID:jh8FMahn >>303
https://qiita.com/ntkgcj/items/29cc215f248a5f4721cd
AnimationClipの最初から再生するのはこれでできるとして、この第3引数で再生位置を指定できる
再生中のAnimationClipが変数clipで、0.5秒の位置から再生したければ第3引数は 0.5f / clip.length
https://qiita.com/ntkgcj/items/29cc215f248a5f4721cd
AnimationClipの最初から再生するのはこれでできるとして、この第3引数で再生位置を指定できる
再生中のAnimationClipが変数clipで、0.5秒の位置から再生したければ第3引数は 0.5f / clip.length
307名前は開発中のものです。
2023/11/27(月) 13:24:07.06ID:noS+cgi4308名前は開発中のものです。
2023/11/27(月) 13:43:13.65ID:FJPYb+2K309名前は開発中のものです。
2023/11/27(月) 14:01:23.70ID:/j0+2mxV >>303
そういう時はそれぞれ別のアニメーションクリップで作るのがunityの作法だよ
そういう時はそれぞれ別のアニメーションクリップで作るのがunityの作法だよ
310名前は開発中のものです。
2023/11/27(月) 16:23:02.57ID:HmVHwFbH すみません、駄目元でお尋ねします。
Random.Range( 最小値, 最大値 )の乱数関数なんですが
例えば、「0〜10までのどれかが出るが、0は出にくい」
って感じの設定はできませんか?
もし出来るなら大変ありがたいんですが
んな都合の良い乱数まではできませんよね?
Random.Range( 最小値, 最大値 )の乱数関数なんですが
例えば、「0〜10までのどれかが出るが、0は出にくい」
って感じの設定はできませんか?
もし出来るなら大変ありがたいんですが
んな都合の良い乱数まではできませんよね?
311名前は開発中のものです。
2023/11/27(月) 16:29:23.99ID:vSro46YA Random.Range(0, 100)
なら出る数字は0〜99のどれか(100は含まれない)で、0が出る確率は1%になるけど、これの応用だと無理?
なら出る数字は0〜99のどれか(100は含まれない)で、0が出る確率は1%になるけど、これの応用だと無理?
312名前は開発中のものです。
2023/11/27(月) 16:32:22.43ID:vSro46YA if (rand == 0)
{
// 1%の確率で発生する処理
}
else if (10 <= rand && rand < 20)
{
// 10%の確率で発生する処理
}
else if (20 <= rand && rand < 30)
{
// 10%の確率で発生する処理
}
……(以下略)
馬鹿正直に書くとこうなる
もっとスマートにできそうだね
{
// 1%の確率で発生する処理
}
else if (10 <= rand && rand < 20)
{
// 10%の確率で発生する処理
}
else if (20 <= rand && rand < 30)
{
// 10%の確率で発生する処理
}
……(以下略)
馬鹿正直に書くとこうなる
もっとスマートにできそうだね
313名前は開発中のものです。
2023/11/27(月) 16:37:07.06ID:/j0+2mxV >>310
返すのがintならできる
if(Randam.Range(0.0f,1f)>0を出したい確率){
Return Randam.Range(1,11);
}else{
Return 0;
}
実際にゲームを作るとfloat返しでやりたくなるはずだと思うんだけど
それはややこしいな
返すのがintならできる
if(Randam.Range(0.0f,1f)>0を出したい確率){
Return Randam.Range(1,11);
}else{
Return 0;
}
実際にゲームを作るとfloat返しでやりたくなるはずだと思うんだけど
それはややこしいな
314名前は開発中のものです。
2023/11/27(月) 16:53:02.98ID:noS+cgi4 >>309
わかりましたプレハブを小分けにしてやってみますありがとうございます
わかりましたプレハブを小分けにしてやってみますありがとうございます
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 清涼飲料水から麻薬成分東京都が注意喚起 [おっさん友の会★]
- 生活保護廃止、公務員の給与に最低賃金を適用⇦これをやるだけで国民の9割の不満が解消されるのにやらない理由 [218488394]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【日刊】暇空茜、また敗訴🥸 [359965264]
- 台湾政党が高市首相「存立危機事態」発言に感謝の書簡「我々の心を強く奮い立たせるものでした」 [834922174]
- んなっしょい🍬禁止🈲のお🏡
