次回予告と今回の講義メモ

次回(8/24)予告:
・ゲーム開発編:p.164 野菜の種類を順番に切り替える から
・文法編:プロパティの補足、クラスと構造体、など
講義メモ:memo20250810.txt (訂正版)
※ 8/17はお休みです

訂正「※ 以下確認中」としていた件について

・講義内で「C#では「Monster[] mons = new Monster[3];」でMonsterクラス型の配列が3要素で生成される」と説明しましたが、
 これは誤りでした。お詫びして訂正いたします。
・C#でもUnityでも「for (int i = 0; i < mons.Length; i++) { mons[i] = new Monster(); }」を実行して、
 Monster型のオブジェクトを生成して配列monsに与える必要があります。
・なお、Monsterをクラスではなく構造体にすると「Monster[] mons = new Monster[3];」だけでMonster構造体型の配列が
 3要素で生成されるので、例外は発生しません。
・以上に合わせて関連する説明とプログラム、講義メモを訂正しました。

講義メモ:後半

文法編:オブジェクトの配列

・整数値や文字列の配列と同様に、オブジェクトの配列を生成・利用できる
・p.160 shooter.csの7行目では、Unityが提供するGameObjectクラスを型とする配列prefabsを要素数4で生成している
 public GameObject[] prefabs = new GameObject[4];
・定義と生成の書式: クラス名[] 配列名 = new クラス名[要素数];
・クラスの代わりに構造体なども利用可能だが、扱いが異なるので注意
・クラスは参照型なので、生成されるのは参照であるため、必要に応じてオブジェクトを生成して与える必要がある
 例:for (int i = 0; i < 要素数; i++) { 配列名[i] = new クラス名(…); }
・構造体は値型なので、オブジェクトが同時に生成される(よって非常に要素数が多い場合は負荷が大きくなる)
・クラスに含まれるメンバを配列の要素から用いるには「配列名[添字].メンバ名」とする

演習 ex0810b.cs

・下記のMonsterクラス型の配列を要素数3で生成しよう
    class Monster { //インナークラスMonsterの定義
        public int hp; //Monsterクラスの持つデータ
        public int mp; //同上
        public void show() { //Monsterクラスの持つメソッド
            Debug.Log(hp + ", " + mp);  //2変数の値を出力
        }
    }
・各要素のhp、mpを設定し、showメソッドで表示して確認しよう

作成例

using UnityEngine;
public class ex0810b : MonoBehaviour{
    class Monster { //インナークラスMonsterの定義
        public int hp; //Monsterクラスの持つデータ
        public int mp; //同上
        public void show() { //Monsterクラスの持つメソッド
            Debug.Log(hp + ", " + mp);  //2変数の値を出力
        }
    }
    void Start()    {
        Monster[] mons = new Monster[3]; //Monster型の配列monsを要素数3で生成(参照のみ)
        for (int i = 0; i < mons.Length; i++) { mons[i] = new Monster(); } //オブジェクトを生成して各要素に与える
        mons[0].hp = 10; mons[0].mp = 20; //各要素のメンバ変数に代入
        mons[1].hp = 11; mons[1].mp = 21; //〃
        mons[2].hp = 12; mons[2].mp = 22; //〃 
        foreach (var mon in mons) { //配列monsの全要素について繰返す
            mon.show(); //作業変数monはMonster型なのでMonsterクラスのメソッドを呼べる
        }
    }
}

訂正「※ 以下確認中」としていた件について

・講義内で「C#では「Monster[] mons = new Monster[3];」でMonsterクラス型の配列が3要素で生成される」と説明しましたが、
 これは誤りでした。
・C#でもUnityでも「for (int i = 0; i < mons.Length; i++) { mons[i] = new Monster(); }」を実行して、
 Monster型のオブジェクトを生成して配列monsに与える必要があります。
・なお、Monsterをクラスではなく構造体にすると「Monster[] mons = new Monster[3];」だけでMonster構造体型の配列が
 3要素で生成されるので、例外は発生しません。
・以上に合わせて上記の説明とプログラム、講義メモを訂正しました。

文法編:オブジェクトの配列と継承

・派生クラスのオブジェクトは基本クラスを型とする配列の要素にできる
・ただし、こうすると、派生クラスで追加したデータメンバやメソッドは利用を制限される
 ①基本クラス型の配列の要素としては基本クラスで定義されたメンバのみ
 ②派生クラス型にキャストすると、派生クラスで追加したメンバも利用可能になる
・また、基本クラス型の配列の要素となった派生クラスのオブジェクトは、派生クラスにキャストすることで、派生クラス型の変数に代入できる
・以上により、多くの派生クラスを持つ基本クラスの配列で、派生クラスオブジェクトをまとめて扱うことができる

演習 ex0810c.cs

・下記のSlimeクラス型の要素をMonster型の配列に格納して試してみよう
    class Slime : Monster { //Monsterを継承するクラスSlimeの定義
        public string name;
    }

作成例

using UnityEngine;
public class ex0810c : MonoBehaviour{
    class Monster { //インナークラスMonsterの定義
        public int hp; //Monsterクラスの持つデータ
        public int mp; //同上
        public void show() { //Monsterクラスの持つメソッド
            Debug.Log(hp + ", " + mp);  //2変数の値を出力
        }
    }
    class Slime : Monster { //Monsterを継承するクラスSlimeの定義
        public string name;
    }
    void Start()    {
        Monster veldra = new Monster();
        veldra.hp = 100; veldra.mp = 200; 
        Monster velgri = new Monster();
        velgri.hp = 101; velgri.mp = 201; 
        Slime rimuru = new Slime();
        rimuru.hp = 102; rimuru.mp = 202; rimuru.name = "リムル"; 
        Monster[] mons = {veldra, velgri, rimuru}; //Monster型の配列monsにSlimeオブジェクトも
        foreach (var mon in mons) { //配列monsの全要素について繰返す
            mon.show(); //作業変数monはMonster型なのでMonsterクラスのメソッドを呼べる
        }
        //Debug.Log(mons[2].name); //派生クラスで追加したメンバは使えないが
        Debug.Log(((Slime)mons[2]).name); //キャストすれば「リムル」が得られる
        Slime rimuru_copy = (Slime)mons[2]; //代入も可能
        Debug.Log(rimuru_copy.name); //「リムル」が得られる
    }
}

文法編:オブジェクトの動的な生成

・プログラムの中でクラスや構造体からオブジェクトを動的に生成する場合、基本的にはnew演算子を用いる
・もう一つの方法は、クラスや構造体を戻り値型とするメソッドを呼ぶことで、返されるオブジェクトを、
 クラスや構造体を型とする変数で受け取れば良い
・Unityでは、これに加えてゲームオブジェクトの複製を生成するInstantiateメソッドがMonoBehaviourクラスにあり、
 Unity用のクラスに継承される
・よって、p.163の説明の通り、プレハブ名、位置情報、回転情報を与えて、ゲームオブジェクトの複製と出現を指示できる

ゲーム開発編:p.160 Shooterにプレハブを渡す

・ゲームオブジェクトの配列を生成して用いる

p.162 shooter.cs(途中での改良分を含む)

//p.162 shooter.cs
using UnityEngine;
public class shooter : MonoBehaviour {
    float move = 0.05f; //単精度実数型のフィールド変数moveの初期化
    public GameObject[] prefabs = new GameObject[4]; //ゲームオブジェクトの4要素の配列を生成
    void Update()    {
        Vector3 pos = transform.position; //構造体Vector3のオブジェクトposをプロパティを利して生成
        pos.x += move; //オブジェクトposの持つ変数xにmoveの値を足し込む
        if (pos.x < -2.5f || pos.x > 2.5f) { //両端に来ていたら
            move = -move; //増分の符号を反転することで逆向きにする
        }
        transform.position = pos; //オブジェクトposをtransformプロパティに渡すと画面に反映
        if (Input.GetMouseButtonUp(0)) {
            Instantiate(prefabs[0], pos, Quaternion.identity);
        }
    }
}

提出:p.162 shooter

講義メモ

・文法編:列挙 から
・ゲーム開発編:p.156 列挙型を利用して野菜の種類を表す型を作ろう から

文法編:列挙

・列挙のメンバの持つ整数値を用いるにはint型にキャストする
・列挙を型とする変数を定義できる(つまり、ユーザ定義型の変数になる)
・この変数にはメンバを代入でき、インクリメントなどの整数演算が可能
・この変数をDebug.Logすると、メンバ名が表示される
・列挙を型とする変数の保持する整数がメンバ数を超えても良いが、この変数をDebug.Logすると、メンバ名の代わりに整数値が表示される
・列挙を型とする変数の保持する整数が負の数になったり、該当するメンバが定義されていない場合も同様

演習 ex0810a.cs 列挙の基礎

・上記の例の列挙seasonを定義し、列挙を型とする変数を試そう

作成例

using UnityEngine;
public enum season { spring, summer, fall, winter };
public class ex0810a : MonoBehaviour {
    void Start()    {
        Debug.Log(season.spring); //"spring"を表示
        Debug.Log((int)season.spring); //0を表示
        season now = season.summer; //列挙を型とする変数を定義し、列挙メンバを代入(初期化)
        Debug.Log(now); //"summer"を表示
        now++; //列挙を型とする変数は整数演算が可能
        Debug.Log(now); //"fall"を表示
        now += 10; //列挙を型とする変数の保持する整数がメンバ数を超えても良い
        Debug.Log(now); //メンバがないので、代わりに整数値(12)を表示
        now -= 20; //列挙を型とする変数の保持する整数がメンバ数を超えても良い
        Debug.Log(now); //メンバがないので、代わりに整数値(-8)を表示
    }
}

文法編:列挙の例

・UnityではKeyCodeなどが列挙型として提供されており、キーボードの全キーと、ジョイスティックのボタンなどが、
 メンバとして定義されている
 https://docs.unity3d.com/ja/2021.2/ScriptReference/KeyCode.html
・例: Debug.Log((int)KeyCode.Escape); ⇒ 27
・C#でもConsoleColorなどが列挙型として提供されており、デバッグコンソールで表示可能な色名が、メンバとして定義されている
 https://learn.microsoft.com/ja-jp/dotnet/api/system.consolecolor

文法編:列挙の応用

・バラバラの整数値をグループ化して列挙にまとめる場合も多い
 例: enum player { height = 100, weight = 200, speed = 10, size = 50 };
・「= 値」による指定は途中で行ってもOK
 例: enum prime { two = 2, three, five = 5, seven = 7 }; //1桁の素数

ゲーム開発編:p.156 列挙型を利用して野菜の種類を表す型を作ろう

・① Assetsにある「tomato」をクリック
・②「Open Prehub」ではなく「Open」ボタンをクリック
・複数のコンポーネントが開いていて見づらければ「Sprite Renderer」「Regitbody2D」の▼をクリックして窓を閉じると良い
・③「Add Component」「New Script」をクリック
・④「Name」に「Vegetable」と入力し「Create and Add」をクリック
・⑤「Vegetable(Script)」の右の「:」「Edit Script」
・⑥ Visual StudioでVegetable.csのソースを入力し「ファイル」「すべて保存」
・⑦ Unityに戻る

p.158(続き)

・①「Vegetable(Script)」の下にパブリック変数「Type」ができており、値が「Tomato」になっていること、
 ▼を押すと4種類から選択可能なことを確認
・②「Scenes」をクリックして編集完了
・③ Assetsにある「Gpepper」をクリックし、パブリック変数「Type」を「Gpepper」に変更
・④ Assetsにある「Broccoli」をクリックし、パブリック変数「Type」を「Broccoli」に変更
・⑤ Assetsにある「Potato」をクリックし、パブリック変数「Type」を「Potato」に変更
・⑥「Scenes」をクリックして編集完了

p.159(続き)

・① Assetsにある「Broccoli」をシーン上の適当な位置にドラッグ&ドロップ
・② Assetsにある「Gpepper」をシーン上の適当な位置にドラッグ&ドロップ
・③ Assetsにある「Tomato」をシーン上の適当な位置にドラッグ&ドロップ
・④ プレイボタンを押して動作を確認
・⑤「File」「Save」で保存
・⑥ シーン上に配置した野菜の4つのインスタンスをクリック&Deleteで削除する

p.157 Vegetable.cs

using UnityEngine;
public class Vegetable : MonoBehaviour {
    public enum Type { //Type列挙型の定義(外部から利用可)
        Tomato, Gpepper, Broccoli, Potato //Type列挙型のメンバー
    }
    public Type type; //Type列挙型を型とする変数typeの宣言(外部から利用可)
}

今週の話題

ゲームソフト販売本数ランキング:今週1位は「鬼滅の刃 ヒノカミ血風譚2(Switch)」 GO!
釣りゲーに料理シムに…他にもいろんな用途がありそう!Joy-Con 2クランク型はじめとする複数アタッチメントの特許申請情報が公開 GO!
AI推論と高速配信の両立でユーザーの「待てない」を解消―Akamaiが打ち出す、AI時代のゲームインフラの新機軸【CEDEC 2025レポート】GO!
オンラインゲームの遅延問題に終止符を。―Akamaiが提供する“世界で最も分散したネットワーク”とは?コスト90%削減を実現したDB連携事例も【CEDEC2025レポート】 GO!
「RTA in Japan Summer 2025」が本日8月9日15時より開催!高難度2DACT『Cuphead』から GO!
GPT-5はgpt-oss-120b、Claude Opus 4.1とどのくらい違う?―小説執筆とヴァイブ・コーディングで試してみた(CloseBox)GO!

ソニーに提訴された『LIGHT OF MOTIRAM』Steamストアページの画像を変更―『Horizon』シリーズとの類似性が目立つものが対象か GO!
すべてが文字のみで構成されたテキストADV『文字遊戯』Steam日本語版配信が無期延期に―すれ違うSteam運営との認識 GO!

講義メモ:ゲーム開発編

p.146 画面の端に来たら折り返す

・画面の右端のX座標は2.5、左端は-2.5となっているので、これを超えたら増分であるmoveの符号を反転すると良い

p.146 shooter.cs

using UnityEngine;
public class shooter : MonoBehaviour {
    float move = 0.05f; //単精度実数型のフィールド変数moveの初期化
    void Update()    {
        Vector3 pos = transform.position; //構造体Vector3のオブジェクトposをプロパティを利して生成
        pos.x += move; //オブジェクトposの持つ変数xにmoveの値を足し込む
        if (pos.x < -2.5f) { //左端に来ていたら
            move = 0.05f; //増分を正にする事で反転する
        }
        if (pos.x > 2.5f) { //左端に来ていたら
            move = -0.05f; //増分を負にする事で反転する
        }
        transform.position = pos; //オブジェクトposをtransformプロパティに渡すと画面に反映
    }
}

アレンジ演習:p.146 shooter.cs

・反転するために実数リテラル0.05fを何度も記述するのは保守性が低下する
・変数moveの符号を反転する処理に書き換えよう
・すると、一つのif文にできることを確認しよう

作成例

//アレンジ演習:p.146 shooter.cs
using UnityEngine;
public class shooter : MonoBehaviour {
    float move = 0.05f; //単精度実数型のフィールド変数moveの初期化
    void Update()    {
        Vector3 pos = transform.position; //構造体Vector3のオブジェクトposをプロパティを利して生成
        pos.x += move; //オブジェクトposの持つ変数xにmoveの値を足し込む
        if (pos.x < -2.5f || pos.x > 2.5f) { //【変更】両端に来ていたら
            move = -move; //【変更】増分の符号を反転することで逆向きにする
        }
        transform.position = pos; //オブジェクトposをtransformプロパティに渡すと画面に反映
    }
}

p.148「自然な動き」を表現するRigidbody2Dコンポーネント

・物体の左右移動に対して、上下移動では引力の影響を加味することが多い
・これをプログラムで記述できるが、Unityが提供しているコンポーネントを用いると便利
・加えて、衝突による跳ね返りを含む「物理法則に則った動き」を提供するのがRigidbody2Dコンポーネント
・なお、本来「物理法則に則った動き」を実装するには、衝突による変形を加味すべきだが、ゲームにおいては、
 変形を加味しなくても構わない場合が多く、動作を軽くできる
・この考え方が「剛体(変形しない物体)」で、Rigidbodyは剛体のこと

p.148 野菜のゲームオブジェクトを作成する:補足

・Rigidbody2Dコンポーネントは、Physics2Dというカテゴリーに分類されており、2Dの物理的なオブジェクトを扱う部品群に含まれている
・Rigidbody2Dコンポーネントには、Gravity Scale(重力スケール)や Mass(質量)などの設定項目があり、
 これらを初期値の1から増減することで落下をコントロールできる

p.150 ゲームの背景色を変更

・①[Hierarchy]の[Main Camera]
・②[Camera]の[Background]
・③中央の〇を左上にドラッグして、RGBの値がすべて255になることを確認
・④[×]で閉じる
・⑤[File][Save]してから、プレイボタンで実行

p.151 [Color]ダイアログボックス

・Unityでは色に関する設定項目をクリックすると[Color]ダイアログボックスが表示され、直感的に色を選択できる
・[Color]ダイアログボックスの上部にある円環は色相環といい、赤からマゼンタ経由で青へ、
 青から黄色経由で赤へと似た色を並べていくと連続的な「色合い」の変化になることを表している
・中央にある正方形は明度を表すもので、色相環で選ばれている色から、左上の白か、右下の黒に近づけることで
「明るさ」の変化になることを表している
・設定された色はRGBの3色の配合度合いで数値化され、各0から255の256段階になる
・よって、色数としては256の3乗=16,777,216色が表現できる
・なお、企業向けのアプリでは、企業が決めているコーポレートカラーのRGB値を正確に指定することが求められるので注意
 例:auは「235, 85, 5」DoCoMoは「204 0 51」
・Aのスライダで透明度を設定できる(後方にあるオブジェクトの色を透過させる割合で、0であれば非透過)

p.152 プレハブを使ってゲームオブジェクトを量産する

・プレハブ:プレ(あらかじめ用意されている)ファブリケーション(構造物)の略で、Unityではゲームオブジェクトの
 原型になる基礎オブジェクトのこと
・作成済のオブジェクトをプレハブにすることで、このプレハブを継承して類似のオブジェクトを作成できる
・これはコピペではなく継承なので、プレハブに対する変更は、プレハブから作成されたオブジェクトに自動的に反映する
・また、プレハブを継承したプレハブを作成できるので、階層構造で作成や管理が可能(クラスと同様)

p.153 プレハブを作成する

・①の前に「Scene」をクリック

p.154 プレハブを継承したプレハブを作る

・プレハブのインスタンスになっていることを立方体のアイコンで確認してから、再度、ドラッグ&ドロップ
・ここで表示されるダイアログは、
 ①Original Prefab(プレハブを新規作成)
 ②Prefab Variant(プレハブを継承して作成)
 ③キャンセル
 の三種で、②を選ぶこと
・p.155①「Open Prefab」は「Open」ボタン
・p.157「同じように」の内容を丁寧に行うこと

提出:アレンジ演習:p.146 shooter.cs

講義メモ:文法編

・ゲーム開発編:p.144 transformプロパティ から
・文法編:プロパティ から

文法編:構造体【再掲載】

・構造体はC言語に元々ある仕組みで、複数の変数をグループ化して扱う手法
・なお、複数の同じ型と意味の変数をグループ化するのが配列、型や意味が異なる変数をグループ化するのが構造体
・Vector3構造体の場合、3次元データを表す3つの変数x、y、zをグループ化して扱うためなどに用いる
・構造体はintなどと同様にデータ型として利用できる(クラスにおける変数と同様)
・C#では、C言語で書かれたプログラムの移植時に、クラスにすると効率が落ちるのを避けるために「軽量クラス」
 として「C#の構造体」が利用可能
・よって、C言語の構造体とは異なり、「C#の構造体」ではデータ以外にメソッドなども記述でき、継承を行わない
 クラスなどで用いることが多い
・Vector3構造体はUnityが提供するものだが、プログラマが自前の構造体を定義して用いることも可能
・書式例: struct 構造体名 { 定義内容 }
・構造体もクラスと同様に、構造体名を型とするオブジェクト名を定義してオブジェクトを生成して用いる

提出フォロー:文法編:構造体の作成例 ex0727b【再掲載】

using UnityEngine;
public class ex0727b : MonoBehaviour{
    struct Map { //2D座標の構造体の定義
        public int x; //Map構造体の持つデータ
        public int y; //同上
    } 
    void Start()    {
        Map player = new Map(); //Mapオブジェクトplayerを生成
        player.x = 100; //playerが持つ変数xに代入(プレイヤーのX座標を設定)
        player.y = 200; //playerが持つ変数yに代入(プレイヤーのY座標を設定)
        Debug.Log(player.x + ", " + player.y);  //playerが持つ変数の値を出力
    }
}

文法編:プロパティ

・プロパティはクラスや構造体に含むことができるメンバであり、クラス変数(インスタンス変数)やメソッドと同類
・プロパティは、変数と同様に扱うとアクセッサと呼ばれる内蔵された処理内容が動作する仕組み
・書式: アクセス修飾子 型 プロパティ名 { get { 処理① } set { 処理② } }
 処理①には値を返す「return」を含む式など
 処理②には値を設定する「value」を含む式など(※valueには外部から与えた値が入る)
・プロパティは基本的にクラス変数(インスタンス変数)へのアクセス手段を提供するもので、アクセスにルールを
 定めたい場合に便利
 例:「値の変更不可」「負の数不可などの条件」「なんらかの前提があれば」
・書式例
 private double weight; //体重(外部からの操作は不可)
 public double KG { //プロパティの定義
  get { return weight; } //値を返すのは無制限
  set { if (value > 0) { weight = value; } } //値を設定するにはルールあり
 }
・利用側は変数と同様に、代入や利用が可能
 例: 
 Debug.Log(インスタンス名.KG); // KGのgetが動作してreturnされた値が得られる
 ⇒ Debug.Log(インスタンス名.weight); の代わりになる(weightはprivateなのでエラーになる)
 インスタンス名.KG = 70.); // KGのsetが動作してvalueに70.2が入って実行される
 ⇒ インスタンス名.weight = 70.2;  の代わりになる(weightはprivateなのでエラーになる)
 インスタンス名.KG = -1; // KGのsetが動作してvalueに-1が入って実行されるが代入されない

演習 ex0803a.cs プロパティの基礎

・クラスBMI1を定義し、privateなdouble型のインスタンス変数height、weightを定義する
・height用のプロパティHM、weight用のプロパティKGを定義して、正の数のみ格納できるように制限する
・get、setが動作していることを確認しよう

作成例

using UnityEngine;
public class ex0803a : MonoBehaviour {
    class BMI1 { //BMIを扱うクラスの定義
        private double height; //身長(内部用)
        private double weight; //体重(内部用)
        public double HM {  //heightを扱うプロパティ
            get { //値を返すのは無条件
                Debug.Log("HM.getが動作"); //確認用
                return height; 
            }
            set { //値を設定するにはルールあり
                Debug.Log("HM.setが動作"); //確認用
                if (value > 0) { 
                    height = value; 
                } 
            }
        }
        public double KG { //プロパティの定義
            get { return weight; } //値を返すのは無制限
            set { if (value > 0) { weight = value; } } //値を設定するにはルールあり
        }
    }
    void Start() {
        BMI1 bmi = new BMI1(); //BMI1オブジェクトbmiを生成
        bmi.HM = 1.72; //プロパティのset経由で身長を代入
        Debug.Log("身長:" + bmi.HM);  //プロパティのget経由で身長を得て表示
        bmi.HM = -5; //無視される
        Debug.Log("身長:" + bmi.HM);  //プロパティのget経由で身長を得て表示
        bmi.KG = 72.5; //プロパティのset経由で体重を代入
        Debug.Log("体重:" + bmi.KG);  //プロパティのget経由で身長を得て表示
        bmi.KG = -5; //無視される
        Debug.Log("体重:" + bmi.KG);  //プロパティのget経由で身長を得て表示
    }
}

p.144 transformプロパティ

https://docs.unity3d.com/ja/2021.2/ScriptReference/MonoBehaviour.html
・p.144の図ではやや分かりづらいが:
 ① 自前のUnity用ソースはMonoBehaviourクラスを継承しているので、MonoBehaviourクラスの持つメンバが引き継がれている
 ② MonoBehaviourクラスはBehaviourクラスを継承しており、継承メンバーの中にTransform型のtransformプロパティがある
 ③ このプロパティの定義はVisual Studioで見ると「get;」しかないので、代入を不可とするために定義されていることがわかる

p.145 変数のように使えるけれどちょっと違うプロパティ

・上記の通りで「外部から自由に使えるpublic」か「外部から全く使えないprivate」しか設定できない変数について、
 プロパティを経由することで、ルールの設定が可能になる
・transformプロパティの場合、getが可能なので「Vector3 pos = transform.position」というように値を得られる
・しかし、トラブルを避けるためにsetが不可なので、transformではなく、transform.positionに対して代入を行う
・動作としては、shooterの位置情報をtransform.positionからposに取り出して、そのメンバであるX座標を示す
 pos.xの値を操作してtransform.positionに書き戻すことで、動かしている

今週の話題

ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO!
サイバーステップはオンクレ『トレバ』不振で5期連続の赤字、暗号資産事業で活路を模索【ゲーム企業の決算を読む】 GO!
「スイッチ2」全世界売上600万台突破。『マリカ ワールド』も563万本、初代スイッチを大きく上回る GO!
【キャリアクエスト】ツールが便利になる今、プログラマーに必要とされるものとは?アトラスで働くなかで見えてきた「プログラマーならではの仕事」GO!
「東京ゲームショウ2025」ビジネスデイ有料事前登録が開始!SIE社長・西野秀明氏による基調講演も決定 GO!
音楽はAIとの音声対話で作る時代に入った。Riffusion改めProducer.aiのAIプロデューサーと日本語で会話するだけで曲を作ってくれるのだ GO!
インディーゲームの祭典「BitSummit the 13th」なんと5万8,000人以上が来場。来年は開催時期5月に、猛暑は回避? GO!

成人向けゲームの規制に揺れるitch.io、寄付すら不可の「無料の成人向けゲーム」に限り表示再開を実施―決済代行業者を経由しないため GO!
「プラチナゲームズ」を名乗る不審なメールに注意喚起―求人募集を装って送付、フィッシング詐欺等の可能性も GO!