moao blog

生活記録

chat GPTの使い道

最近chat GPTを使い続け、とうとう有料会員までなってしまいました。 色々使った内容をまとめます。 完璧ではないですが、なかなかに便利で助かるやつです。

助手君、相談相手にぴったりです。

タスク優先度付け

たくさん思いついたことを並べて、以下を記載すれば、優先度付けを自動化。 助かる。 優先度付けの理由を聞いても答えてくれる。 しかもかなりしっかり考えてくれる。 助かる。どんどんAIに依存していてまずいね。

人に考えることを任せすぎた代償か。

autogptなるものもあるよう。AGI。

  • プロンプト例

何から始めるべきか優先度つけて

先にあるタスクリストから独自性のあるタスクを創造してください。

人生相談

人生をどういきるべきか尋ねるとポジティブな回答をもらえます。 あまりにもひどいと通院を薦められます。

文章要約、論文理解

論文や文章を貼り付けて、「要約して」で要約してくれます。 質問すれば回答もしてくます。 便利

英文解説

上と同じように日本語で解説してなどいえば、解説してくれます。

プログラミング

こういうコード吐いてといえば吐いてくれます。 blenderやunityのコードでも吐いてくれます。

Visualプログラミング

Processingのコード吐いてといえば、 コードを吐き出してくれます。それを動かすと基本的に動いて、 それなりに面白い動きをするので助かります。

旅行先

有名でない場所だと微妙だったり間違っている場所を進めてきますが、色々場所を考えてくれます。

アンダーステアとオーパステアの解説動画を作成したかった話

たまには解説動画を作りたい。

以前から気になっていたアンダーステアオーパステアの解説動画を作成するのはどうだろうか。

思ったことを試してみることにしました。

車作り

車のボディはキューブ。タイヤは円柱で作成。

タイヤの回転は回転軸Yを右クリックしてドライバー追加で以下設定

走る道

カーブの始点、終点の変更は編集モード->セグメント->向きを反転

パスアニメーションで範囲制限でピタリ停車

カーブに従うをチェックで向きも変わってくれます。 初期設定はトランスフォームで。z軸-90度とかで設定

アニメ速度変更

タイヤの回転をゆっくり見るためにはたいストレッチの新規を600とか大きい値に。

その他体裁

  1. テキスト追加
  2. 平面を地面に
  3. ワールドを大気テクスチャに
  4. パスを0.1程度押し出して目に見えるように

出力

youtu.be

あとがき

というわけで、解説動画までは作成できませんでしたが、何かしら動画はできました。 ただアニメで作成していて厳格性がなく、カーブ時に減加速がなく、なかなかに不自然なのが課題です。

次は自然な動画作成、厳格性のあるものを作成していきたいです。

あと車もしっかり作っていきたいなと。

その他解説

FF vs FRの動画 https://dixq.net/forum/viewtopic.php?t=19909

加速:加速時には、車両の重量が後方に移動します(これを「重量移動」と呼びます)。FR車両では、これが駆動輪に更なるダウンフォースを加え、トラクションを向上させます。一方、FF車両では、加速による重量移動は駆動輪から重量を取り去り、トラクションを低下させます。

コーナリング:ここでも重量移動が重要な役割を果たします。旋回時には車両の重量が外側に移動します。FR車両では、これがステアリング輪から重量を取り去り、アンダーステア(フロントが滑る)を生じさせやすくします。一方、FF車両では重量移動がステアリング輪に重量を加え、オーバーステア(リアが滑る)を抑制します。

オーバーステアオーバーステアとは、自動車がコーナリングをする際に、後輪がスライドしやすい状態のことを指します。つまり、ドライバーがステアリングを切った以上に車が旋回する状況です。オーバーステアが発生すると、車はコーナーの内側へと向かってしまいます。運転者が適切に制御しないと、スピンやスライドアウト(後輪がスライドしてコース外へと脱線すること)の原因になることもあります。

アンダーステアアンダーステアとは、逆に、自動車がコーナリングをする際に、前輪がスライドしやすい状態のことを指します。つまり、ドライバーがステアリングを切ったにもかかわらず、車は旋回しきれずに直進する傾向が強くなる状況です。アンダーステアが発生すると、車はコーナーの外側へと向かってしまいます。特に速度が上がっているときにアンダーステアが発生すると、コントロールを失ってしまう可能性があります。

性格診断をしてみた話

MBTI診断をしたらinfp-tでした。最初の数か月後に試しても同じでした。 少なくともここ数年は恐らくそうなんでしょう。ざっくり記事を投稿します。

すごく自分の性格に合っているなと思うわけです。。

無料性格診断テスト - 16Personalities MBTI

無料性格診断テスト | 16Personalities

以下はchatGPTにINFP-Tが生きやすくするために取るべき方法を教えてもらったものです。

"infp-t"は、MBTI(Myers-Briggs Type Indicator)という性格タイプ指標に基づいています。INFP-Tは、内向的(Introverted)、直感的(Intuitive)、感情的(Feeling)、柔軟的(Perceiving)、そしてタービュレント(Turbulent)な性格特徴を持っています。生きやすくするためには、以下のいくつかの方法を試してみてください。

  1. 自分の内向性を受け入れる:内向的な性格を持っていることを理解し、それを受け入れましょう。自分自身や他人との関係を築くときに、エネルギーを回復するために一人の時間を大切にすることが重要です。

  2. 感情の認識と表現:感情を理解し、適切な方法で表現することが大切です。感情を無視することなく、自分の感情を認識し、それを受け入れることが重要です。

  3. 個人的な価値観と目標を明確にする:INFP-Tの人は、自分の価値観と目標に基づいて行動することが重要です。自分の価値観を明確にし、それに基づいて目標を立てることが、自己成長や充実感を得るために役立ちます。

  4. コミュニケーションスキルを磨く:他人とのコミュニケーションが難しい場合は、コミュニケーションスキルを磨くことが役立ちます。リスニングスキルを向上させることで、他人との関係を強化することができます。

  5. タービュレント特性を管理する:タービュレント特性は、不安や自己批判につながることがあります。ストレスや自己評価に対処する方法を学ぶことで、自分の感情をうまく管理することができます。

  6. 自分の強みを活かす:INFP-Tの人は、独創性や共感力、柔軟性などの強みを持っています。自分の強みを活かすことで、自分の能力を最大限に発揮することができます。

  7. 自己成長と学習に取り組む:INFP-Tの人は、自己成長や学習に興味があります。新しいことを学び、自己成

ゲーム作成し公開したい夢

メモを見つけたのでせっかくなのでひとまず公開。

学生の頃に弾幕シューティングゲームにはまりました。そう東方です。バトルガレッガ首領蜂ぐわんげにもはまりましたが、やはり東方が好きでした。

そのときにゲーム作りの本を借りたり、ネットの情報をもとにゲーム作りに挑戦してました。 DXLIBやpygame東方弾幕風も使ってみました。

しかし当時は公開する場所もなく、完成度が低いままで終わってしまいまいした。

さて、何年もの時が流れました。 時々C言語javascriptでゲーム作成したりもしましたが、特に公開もすることなかったです。

最近3D弄れるようになったこともあり、Unityが気になり始めさわってみました。

難しい。 でも夢に最も近いかもしれない。unityroomという公開する場所もあるし。

あとがき

定年に近づいてきたことで、自身の夢を最後に追い求めたいと強く思うようになってきました。

そのため、昨年から色々挑戦し、今回もその一環で頑張る気になりました。 悔いのないようにできる限りやる、あとはそれだけです。

弾幕STG作成試み 1

いつか挑戦したいと思っていた弾幕STG作成。 今やらないでいつやるよ。

というわけで作成進めてみることに。今後の展開性を考えて3Dで作成し2Dに見せるようにしたいため、 以下2Dゲーム作成内容を3D適用できるか試してみることにしました。

参考元 https://nn-hokuson.hatenablog.com/entry/2016/07/04/213231

設定

プレイヤーオブジェクトはz=0に配置。 カメラを-10に配置して、2Dに見せるための設定です。

背景

以前以下で作成した星空を使用して、 ドーナツ型のパーティクルシステムにして、横軸を太目(z=12くらい)にすれば星空背景にできます。 あとはx軸方向に回せば、動く背景のできあがり。

少々重いかもですが。

moao.hatenablog.com

また、普段のデバッグ時は以下表示を無効にして軽くすることが可能です。

画面サイズ変え

カメラ設定のサイズを5->7に変更

十字カーソル移動、移動制限

プレイヤーに対し以下のようにwasdと十字キーで動かせるようにします。

    void Update()
    {
        float speed = 10.0f;
        if (Input.GetKeyDown(KeyCode.Space) | Input.GetMouseButtonDown(0))
        {
            Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        }
        // Wキー(前方移動)
        if (Input.GetKey(KeyCode.W)| Input.GetKey(KeyCode.UpArrow))
        {
            transform.position += speed * transform.up * Time.deltaTime;
        }

        // Sキー(後方移動)
        if (Input.GetKey(KeyCode.S)| Input.GetKey(KeyCode.DownArrow))
        {
            transform.position -= speed * transform.up * Time.deltaTime;
        }

        // Dキー(右移動)
        if (Input.GetKey(KeyCode.D)| Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += speed * transform.right * Time.deltaTime;
        }

        // Aキー(左移動)
        if (Input.GetKey(KeyCode.A)| Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position -= speed * transform.right * Time.deltaTime;
        }

        Vector3 currentPos = transform.position;
        currentPos.x = Mathf.Clamp(currentPos.x, -xLimit, xLimit);
        currentPos.y = Mathf.Clamp(currentPos.y, -yLimit, yLimit);
        transform.position = currentPos;
    }

当たり判定

2Dの当たり判定と3Dでは異なる用で、以下のようにOnTriggerEnter内で定義しないとだめでした。

   void OnTriggerEnter(Collider collision)
    {
        //Destroy(this.gameObject);
        if (collision.gameObject.tag == "Rock")

        {
    // 衝突時の処理
        }
    }

スマホ連携操作

キー入力だとスマホで遊べないため、マウスカーソルでも動かせるようにしてみます。

ラジオボタン、トグルで有効無効にできるようにしておきます。 以下のようにトグルで関数コールされるようにしている感じです。

    public void change_mode()
    {
        mouse_mode = mouse_mode ^ 1;
    }
        // 物理更新時に処理

        void FixedUpdate()
    {
        // 移動量
        Vector3 moveVec;

        // プレイヤー移動
        if(mouse_mode==1){
            // マウス座標取得
            Vector3 pos = Input.mousePosition;
            // マウス座標をスクリーン座標に変換
            pos.z = -Camera.main.transform.position.z;
            // スクリーン座標をワールド座標に変換
            Vector3 worldPos = Camera.main.ScreenToWorldPoint(pos);
            // 現在位置からマウスワールド位置までの移動量
            moveVec = (worldPos - transform.position) / 30;
            // 徐々にマウス座標に近づくよう、移動量を分割して加算
            transform.position += moveVec;
        }
    }

色付け

青は味方、赤は敵でマテリアル分け

出力

unityroom.com

あとがき

というわけでざっくり作成したので記事にしてみました。 次はもっと弾幕STGらしいものを作りたいと思います。

VRChatインストールして少し遊んでみた話

VRChat。前々から話は聞いていたんですが、遊んだことないゲーム。 いや、メタバース。 せっかくなので使ってみることに。ざっくり忘備で残します。

steamでインストールして実行すると使えました。

  1. JP Tutorialで検索し初心者マークのワールドにログイン。学ぶ
  2. そこからVRはじめみたいなワールドに飛び年鑑表を見る。

家に帰ってアバター着せ替え

  1. avatorをvroidに

  2. vでvoice on

  3. rでリアクション

steamアカウントだと名前がsteamアカウントになるので作り直しました。

というわけてでざっくり遊びましたが、操作性はわかりやすいと思います。 ワールドが恐ろしいくらいたくさんあるので、さてどこへ飛ぶとよいやらですが、 ネットの情報も頼りに遊んでみようと思います。

steamでVRChatのログイン数調べたら2万2千人とすごい数です。

カメラ撮影

撮影すると保存

C:\Users\User名\OneDrive\画像\VRChat\

かわいい。

blenderでランプシェード作成

陶芸館で見た中でランプシェードに感動したので、 blenderでランプシェード作成してみることにしました。

忘れないように記録を残します。

シェード作成

カーブをモディファイアーしてスクリューして円錐にして、 ソリッド化を適用して厚さをましてみました。その後両方適用し、メッシュ化

ランプ作成

球を配置し、シェーディング時に放射を上げています。 あまり光が強くならないなと思ったら、cyclesにしないとうまく強さが表現されないようでした。

穴あけ

booleanで穴あけしようとしましたが、シェード作成時にスクリューにしたことで、斜めになっていてせっかくなのでこれを選択してくりぬくことにしました。

ただ、くりぬいたときに壁の間に空白ができたので、ここは改善の余地あり。 押し出しとかうまくやる方法を考えたいですが今回は断念

レンダリング

Eeeveだとオブジェクト間の反射がうまく表現されないようで少々不自然でした。 さらに光のすり抜けまで発生してしまいました。

そのため、cyclesにしたいのですが、すごく遅いです。 レンダリングに時間がかかるので、サンプル数を64とか少なめにし、タイルのサイズを画像の半分とかにするとよい感じでした。 特にタイルは64とか小さすぎても遅いので、GPUの並列処理性能に合わせて設定したほうがよいのかなぁなんて思いましたが、よくわかりません。

Eeveeレンダリング時間: 5分

Cyclesレンダリング時間: 30分

カメラワーク

NURBS円を配置。カメラを原点に移動させ、パス追従を円に設定。 これでくるくる回ります。 あとはカメラ選択し、ランプを選択し、トラック。

あとはパスのアニメフレームを変更しゆっくり回るように設定

出力

動画化時にEeveeとCyclesのキャプション間違い。後半の良い感じのがCycles。 やっぱりcyclesが自然ですね。

youtu.be

あとがき

というわけでいったん作成完了。 ランプの作り方を工夫したいですが、どういうランプがあるのかなど調査、研究が必要ですね。