2017-03-08 18 views
0

ユニティの基本を勉強しました。私は画面の25%を取る4つの異なる色の四角形がある携帯の場面を作りたいと思っています。ユニティで矩形にする

Mobile scene

私はインスペクタでプレハブとして、それを「登録」、ゲームオブジェクトイメージを作ってみました。 以下のコードは、1つの赤い矩形を作成し、それを(x、y、z)=>(0,0,0)の座標に配置しようとした例です。 いくつかの問題が存在している:

public class SceneScript : MonoBehaviour { 

    public GameObject prefab; 

    void Start() { 
     Vector3 pos = new Vector3(0, 0, 0); 

     GameObject gameObject = Instantiate(prefab); 
     Image image = gameObject.GetComponent<Image>(); 
     image.color = new Color(1.0F, 0.0F, 0.0F); 

     gameObject.transform.position = new Vector3(0, 0, 0); 
    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 
:Rectangleが
  • 表示されませんでした

    • 私はプログラム的にこれは、それがどのように見えるかで、幅と四角形

    の高さを指定する方法がわかりません

    簡単な解決方法がありますか、これがベストプラクティスですか+私は何をすべきかのヒントを教えてください。

  • +0

    シーン階層で、オブジェクトを正しくインスタンス化できていることを確認できますか?もしそうなら、あなたはオブジェクトのプロパティを見直すと、それらはあなたが期待しているものとどのように違うのですか? – Serlite

    +0

    'GameObject'階層のどこかに親として' Canvas'を置かずに 'Image'レンダリングを行うことはできません。 – Foggzie

    +0

    @Serlite階層パネル - > UI->画像を右クリックすると、キャンバスと画像オブジェクトが子として表示されます。次に、私はそのオブジェクトをプレハブとして作った後、GameObject自体とのインタフェースを使って接続しました。しかし、それを表示する運がなかった。 – spamserv

    答えて

    1

    おそらく、あなたの階層にCanvasはありません。ここでは、プログラムであなたのCanvas、あなたのImageおよびそれを含むGameObject Sを作成することができます方法は次のとおりです。これは、フルスクリーン、赤い四角形を作成します

    Vector3 pos = new Vector3(0, 0, 0); 
    
        GameObject parentGameObject = new GameObject(); 
        Canvas canvas = parentGameObject.AddComponent<Canvas>(); 
    
        GameObject imageGameObject = new GameObject(); 
        imageGameObject.transform.SetParent(canvas.transform); 
    
        Image image = imageGameObject.AddComponent<Image>(); 
        image.color = new Color(1.0F, 0.0F, 0.0F); 
    
        imageGameObject.transform.position = pos; 
    

    。インスペクタでRectTransformの設定をして再生した後で再生し、正しくサイズを設定する方法を理解できるはずです。

    +0

    ありがとう、これは私の問題の機能的かつ完全な解決策です。これ以外にも、これをスクリプトからすべて作成するのがベストプラクティスですか? – spamserv

    +0

    @spamservこれらの決定は、ポータブルでもパフォーマンスがどれくらい重要であるかと同様に、これをどのようにしたいのかということになります。 'AddComponent'はかなり遅い関数です。もしあなたがそれをたくさんしているのであれば、それは目立つものであり、プレハブを使うことは避けることができます(あなたはまだ特定のコンポーネントへの参照が必要な場合にプレハブをインスタンス化した後に 'GetComponent'を呼び出します)。フリップサイドでは、スクリプトを介してすべてを行うことは、機能が自己完結型であるため移植性に役立ちます。彼らは機能するために余分な資産を必要としません。 – Foggzie