コメントから、必要に応じてより多くのコピーをインスタンス化するためのスクリプトを含む Canvas の最初の「シード」インスタンスが必要なようです。パート 2 は、あなたのニーズに最も一般的です
最も簡単な方法は、前述のキャンバスの 1 つのインスタンスを既にシーンに配置することです。インスペクターの小さなチェックボックスのチェックを外すことで、描画可能/表示可能なキャンバス部分を「無効」にしてから、ゲームオブジェクトのスクリプトの関数でそれ自体を有効にすることができます...
void Start ()
{
thisCanvas = GetComponent<Canvas>();
thisCanvas.enabled = true;
}
もちろん、もう 1 つの方法は、シーンに既にある別のスクリプトから 1 つのコピーをインスタンス化することです - 古典的なケース: シーンに空のゲームオブジェクトを作成し (CTRL+Shift+N)、[F2] 名前を「GameManager」に変更します ( GameObject 名にスペースが含まれている場合、一部のユニティ関数は依然としてバグアウトし、GameManager と呼ばれる新しいスクリプトをアタッチします。このスクリプトは基本的に、適切なシーンが読み込まれることを確認し、特定のプレハブをインスタンス化し、ネットワーク接続を作成し、エディターから行っていないプレーヤー変数を設定するためなどに使用されます。
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour
{
public GameObject myObject;
void Start ()
{
Instantiate(myObject, transform.position, transform.rotation);
}
}
インスタンス化する「プレハブ」をインスペクターの「GameManager」のスロットにドラッグアンドドロップします。ゲームの開始時である必要はないことに注意してください。別の例として、ログインが必要なときはいつでもリッスンする関数を持つ GameManager スクリプトがあり、そのときにログイン ダイアログがインスタンス化されます。