問題タブ [unity-components]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unity3d - Unity3D。コンポーネントをプログラムで構築する方法
私は Unity を初めて使用し、アーキテクチャについて理解するのに少し苦労しています。
「コンポーネント A」という C# スクリプト コンポーネントがあるとします。コンポーネント A に、「コンポーネント B」タイプの 100 個の他のコンポーネントの配列を持たせたいと思います。コンポーネント B を特定の値でプログラム的に構築するにはどうすればよいですか?
「コンポーネント B」は、「StartCoroutine」を呼び出すことができる必要があるため、「MonoBehaviour」から派生していることに注意してください。
Unity では、OO で通常行うようにコンストラクターを使用しないことを認識しています。
c# - AddComponent( string variable ) で関数を呼び出す
これは機能しません。コンパイル時に (実行ではなく) 変数の型がわからない場合、変数の型にキャストできないため、追加したばかりのコンポーネントに直接アクセスできないためだと思います。
別のスクリプトからデフォルト値を取得し、それらを辞書に入れる gameItem クラスがあります。ディクショナリ エントリ「functionScript」、「myScript」に基づいて、myScript をオブジェクトにアタッチし、いくつかのディクショナリ エントリを渡す必要があります。
あるいは、非常に効率が悪く、アイテム クラスに myScript クラスの変数を要求することもできますが、これは避けたいと思います。
variables - GetComponent を使用して別のスクリプトから変数にアクセスする
Unity(ゲームエンジン)には2つのスクリプトがあります
変数にアクセスしたい
FROM characterSelect.js IN CarCameraScript.js
その変数は現在、次のようになっています。
私が聞いたところによると、それは getcomponent と関係があるということです。どんな助けでもいただければ幸いです
c# - Unity3D 別のスクリプト内でスクリプトを実行する
これは私を夢中にさせており、何時間も運がありませんでした。
私がやりたいことは、自分のスクリプトの 1 つを別のスクリプトから実行することだけです。
どちらのスクリプトも同じゲーム オブジェクトにアタッチされています。他のスクリプトを実行するために使用したいスクリプトは次のとおりです。
これが私のワンダースクリプトです...
これは私が得ているエラーです。
エラー CS1955: メンバー `RedTeam.wanderScript' はメソッドまたはデリゲートとして使用できません
私の主な目標は、TeamRed スクリプトから Wander スクリプトを有効または無効にできるようにすることです。
c# - OnGUI は最初のコンポーネントでのみ呼び出されます
Unity について学習するゲームを作成してチュートリアル ( this one ) を見ており、Player には PlayerHealth と PlayerAttack の 2 つのコンポーネントがあります。両方とも正常に動作していますが、問題は、2 番目のコンポーネント (PlayerAttack) の OnGUI で何かを実行しようとすると、PlayerAttack の OnGUI が呼び出されないことです。
PlayerAttack が PlayerHealth の下に追加されているためですか? 以下のコードに従ってください。
PlayerHealth.cs
PlayerAttack.cs
c# - 変数を取る Unity3d AddComponent
詳細: Unity3d の C# で Unity のドキュメントを検索しましたが、この例は私の場合には当てはまりません。訪問した他の Web サイトと同じです。(必要に応じてそれらをリストしませんでした。)
私がやろうとしているのは、クラス変数をコンストラクターでコンポーネントに渡すことです:
私がしようとしていることがうまくいくかどうか、または何かを逃したかどうかを知りたい...
問題:
何を試してもうまくいきません。C# は実際には JavaScript とは異なります。私が正しければ、以前は js の addcomponent で変数を渡すことができました。
コンテキスト: コンストラクターで絶対に渡す必要があります。プライベートなフィールドが 2 つありますが、安全上の理由から、静的、定数、またはパブリックにすることはできません。
オプション: 答えが複雑すぎる場合は、おそらく get/set を作成し、フィールドが空かどうかを確認します。
c# - Unity でデータを共有するコンポーネントを切り離す
Unity ですべてのエンティティを再設計して、エンティティがより調整され、コンポーネントが相互に依存しなくなることを期待しています。しかし、私は回避できないように見える問題に遭遇しました。
エンティティに 2 つのスクリプト コンポーネント (PlayerInput と PlayerState など) があるとします。PlayerInput は入力を受け取り、意味のある方法でそれを使用し、PlayerState はプレーヤーの状態を管理します。PlayerState は、プレーヤーがどのような状態にあるかを説明するデータを保持する場合があります。問題は、入力を処理するためにその状態データが必要な場合、依存関係を作成するか、ベース ゲーム オブジェクト クラスを変更する以外に選択肢があまりないことです(私にはできませんし、とにかく良い考えではないでしょう。)
もちろん、メッセージの送信は情報を提供する場合にのみ役立ちますが、情報を要求する場合には役立ちません。コンポーネント間でデータを共有しようとする必要がありますか、それとも依存関係を暗示しているのでしょうか? この状況で何が間違っていますか?
c# - 拡張メソッドのコルーチン
オブジェクトを時間の経過とともに移動させる拡張メソッドを作成しました。それはうまくいきます。ただし、オブジェクトは一定期間にわたってそのタスクを実行しているため、更新メソッドなどの他のすべての呼び出しを無視しています。コルーチンで何かをする必要があると思いますが、それがどこに行くのかわかりません。他のコード (Update() メソッドなど) の同時実行を妨げずに、次のコードを機能させるにはどうすればよいですか? 簡略版は次のとおりです。
================================================== ================================
================================================== ================================