[Unity]UnityとC#を学ぶ問題:003

三日続きました。三日坊主になるかが明日わかります。

第一問

マウスを押下したらその場所にCreatePrimitiveによって造られたCubeを配置してください。

仕様

  • オブジェクトは画面中央に表示する。正確な座標は問わない。
  • マウスを離すとオブジェクトは非表示になる。

答え

全開同様に当たり判定が取れる板コリジョンを用意しておきます。
gist;

ポイントとしては、 Input.GetMouseButtonUp(0) でCubeのGameObjectを SetActive(false) によって表示を消し、都度生成しないようにしてます。

第二問

マウスを押下したらその場所にCreatePrimitiveによって造られたObjectを配置してください。
マウスを押下する都度、Sphere -> Capsule -> Cylinder -> Cube -> Plane -> Quad – Sphere -> … と巡回するようにしてください。

Ad

仕様

  • オブジェクトは画面中央に表示する。正確な座標は問わない。
  • マウスを離すとオブジェクトは非表示になる。
  • 表示されるオブジェクトは複数のオブジェクトが順繰りで表示されるようにする
    • Sphere -> Capsule -> Cylinder -> Cube -> Plane -> Quad – Sphere -> …

ヒント

  • PrimitiveType の値を順番に巡らせるようにしましょう。
  • enumは値の配列を取得することができます。
  • Enum.GetValues( typeof(Hoge) )

答え

ポイントは、EnumをGetValuesで全部取得して回すところです。
gist

Enumの中身はintだったりしますが、中身が必ずしも0から順に始まるわけではないのであえてこういった表現にしています。

<br />enum ENUM{
    a = 0,
    b = 3,
    c = 5234,
    d = 112,
}

みたいなこともできるので、Enumの中身は信用しないようにします。

第三問

Unity再生時に、画面内に Sphere Capsule Cylinder Cube の4つを配置してください。
これらのオブジェクトをクリックした際に、クリックされたオブジェクトのタイプをConsole上に表示してください。

仕様

  • GameObject CreatePrimitive( Vector3 position ) というインターフェースの関数でオブジェクトを生成してください。
  • オブジェクトをクリックした際に、どれをクリックしたのかを確認する方法は自由です。
  • 自作のコンポーネントは2つまで使用可能です。
  • オブジェクトクリック時に表示する文字列は判別可能であれば、何の文字列を表示してもかまいません。

ヒント

  • 4つのオブジェクトには生成時にデータを格納するためのコンポーネントを作ることで何をクリックしたかを知ることができます。
  • 配置時に参照を保持しておくことで、何をクリックしたかを確かめることができます。

答え

ポイントは、使い回す情報は先に作っておくことです。

Start時に必要な種類のPrimitiveObjectを全部生成し、循環時にスイッチさせるだけにしたほうが効率的ではある。

第四問

0~299までをカウントし、それをコンソールに出力します。
ただし、3の倍数の時は数字ではなく”fizz”と表示し、5の倍数の時は”buzz”と表示してください。

仕様

  • 1カウント中にコンソールに表示する回数は1回だけです。
    • つまり、数字を表示したときはfizzとかbuzzとかは表示しません。
    • 同様に、fizzと表示する時は数字やbuzzを表示しません。

答え

第五問の答えにもなります。
このまま第五問まで突入しましょう。

第五問

0~299までをカウントし、それをコンソールに出力します。
ただし、3の倍数の時は数字ではなく”fizz”と表示し、5の倍数の時は”buzz”と表示してください。
これを3フレームに1回ずつ進むようにしてください。

仕様

  • 1カウント中にコンソールに表示する回数は1回だけです。
    • つまり、数字を表示したときはfizzとかbuzzとかは表示しません。
    • 同様に、fizzと表示する時は数字やbuzzを表示しません。
  • フレームのカウントにはUpdateを使います。

答え

なんフレーム目なのかをカウントしつつ、定期的にリセットさせます。
また、不要になったらDestroyするか、もっと大局的な条件によって再開する可能性があるならば、this.enabled = false などで一時的な停止をさせておいたら良いと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です