お題

毎週出すお題をまとめます.

第 1 回 n 秒で画面が暗転するエフェクトを作ってみよう(2024/06/19)

Unity などのゲームエンジンで画面が暗転するエフェクトを作ってみましょう。どんな言語で,どんな作り方をしても大丈夫です。今回は 6/24 の対面部会で解説・評論をやろうと思ってます。

ヒント:「暗転する」= 「段階的」に黒くなる

ヒント 2 :Unityで暗幕を作るときは,GameObjectではなく,Imageを使いましょう.
Image(コンポーネント)は color という変数があるので,GetComponent < image > ()でイメージを取得して,クラス変数の color を Color もしくは Color32で変更しましょう.
Color32 は R, G, B 値とアルファチャンネルを持った 4 変数からなるベクトルのようなものです.
Image が表示されない場合は,Image の親になっている Canvas の RenderMode が ScreenSpace-Overlay になっているかもしれません.World Space に設定を変えると,正常に表示されるはずです.

解答例

暗転するエフェクトを作るためには,暗転する物体を用意する必要があります.(ほかに方法はあるかも)
暗転を実現する物体として,GameObjectを用意しても実装は不可能ではないとは思いますが,今回は Image を使用します.Image は Canvas 内に生成されるオブジェクトで,UI 開発に使用されます.

まず,C#スクリプト内で Image を使用したい場合は,using UnityEngine.UI; を指定しましょう.続いて,MonoBehavior内で Image 型の変数( img ) などを宣言して,void Start() で GetComponents<image>() を img に代入しましょう. Image 型というのは C 言語における FILE 型などの構造体のように複数の変数をまとめたもので,構造体ではモジュール化されない関数もまとめられています.オブジェクト指向のプログラミング言語では,このような変数の設計図をクラスといい,そのクラスを変数として実際に宣言したものをインスタンスと呼びます.このインスタンスに,ソースコードをアタッチしたゲームオブジェクトのImage コンポーネントを GetComponent によってスクリプトの img と紐づけることによって,スクリプト内でその値を変更することが出来るようになります.なので,色を変更する場合は,img.color に別の値を代入すればいいということになります.
続いて,色の変化を段階的に進めていくために,ウェイト処理が必要となります.ウェイトを使用するには,Invoke() 関数を使うという方法もありますが,関数に引数を与えることが出来ないなどの問題があるので,コルーチンを使用することが望ましいです.

長い話はこれくらいにして,ソースコードを示します.

解答例

所感

感想はこちらにお願いします

第 2 回 時間経過で減少するゲージを作ってみよう(2024/07/03)

Unity などのゲームエンジンで時間経過で減少するゲージを作ってみましょう。どんな言語で,どんな作り方をしても大丈夫です.7/10 の部会で解説・評論をやろうと思ってます