Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Unity】NavMeshを設定した環境で「"GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.」のようなエラーが発生した場合の対応方法

 

 

 UnityのNavMeshAgentを使用していた時に発生したエラーについての解消方法についての内容です。

 

 

1. 発生したエラー内容

 

今回発生したエラー内容は以下の通りです。

 

"GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.
UnityEngine.StackTraceUtility:ExtractStackTrace ()

 

 

2.エラー発生までの経緯

 

 

UnityのNavMeshAgentを使用して自動走行の強化学習を行おうとしていたのですが、学習のための道路環境を1セット作成して学習させたところでは問題なく動作しました。

ここで、学習の高速化を行うためにその1セットをコピーして同一画面内に座標をずらしながら複数の環境を作成して実行させたところ先程のようなエラーが発生しました。

 

 

 3. エラーへの対応方法

 

 

このエラーについて、新しくコピーした環境で NavMesh が正しく設定されているか確認するために再度ベイクを行いました。

 

Unity のメニューから Window > AI > Navigation を開き、Bake タブを選択して、NavMesh を再ベイクします。

 

これを行った後に再度この環境で学習を実行させたところエラーがなくなり実行することができました。

 

自分たちが十分理解してなかったこともありますが、NavMeshした環境を含む環境をコピーなどした場合には再度ベイクが必要ということになります。

 

 

以上が、UnityのNavMeshを設定した環境で「"GetRemainingDistance" can only be called on an active agent that has been placed on a NavMesh.」のようなエラーが発生した場合の対応方法になります。

 

 

【Microsoft Teams】音が小さい?自動マイク感度調整設定をオフにして改善しよう

 

 

 Microsoft Teamsで音声通話やビデオ会議を行う際に、相手の声が小さくて聞き取りづらいと感じたことはありませんか?

 

この問題は、Teamsの「デバイス設定」にある「マイクの感度を自動的に調整する」機能が原因かもしれません。

 

私自身も、この設定をオフにしたところ音声がクリアになり、会話がスムーズに進むようになりました。

 

 この記事では、この自動調整機能がどのような仕組みで音量に影響を与えているのか、そして設定の変更方法について解説します。

 

1. 自動マイク感度調整機能とは?

 


「マイクの感度を自動的に調整する」機能は、周囲のノイズを抑えるためにマイクの音量感度を自動的に調整する仕組みです。

 

この機能は、例えばキーボードのタイピング音や背景の雑音を小さくして、通話の明瞭さを保つことが目的です。

 

しかし、この調整が意図しない効果を生み、相手の声まで小さく聞こえることがあります。

 

2. 改善するための設定変更方法

 


 この問題を解決するために、以下の手順で設定を変更してみましょう。

 

1. Teamsを開き、上部の「・・・」となっているアイコンをクリックします。
2. 「設定」→「デバイス」→「オーディオ設定」に進みます。
3. 「マイクの感度を自動的に調整する」をオフにします。

 

この設定をオフにすると、周囲のノイズが極端に減らされることなく、声がクリアに聞こえるようになります。

 

 3. なぜ自動感度調整が音を小さくしてしまうのか?

 


 この自動感度調整は、周囲の音(ノイズ)を拾って音声を均一化する効果があり、その結果、マイクが過剰に感度を下げることがあるため、相手の声も小さくなってしまうと考えられます。

 

まとめ

 


 Teamsの音声が小さいと感じる場合は、設定の「マイクの感度を自動的に調整する」をオフにすることで、音質が改善する可能性があります。音声のクリアさが上がり、スムーズに会話ができるようになるでしょう。

 

 

 

 

【テレビ 録画リスト】テレビのリモコンから録画リストをクリックしたらエラーが出て表示できなくなった時に解決した方法

 

 個人的な話になりますが、先日テレビ(REGZA700X)のリモコンで録画リストをクリックしたところ、突然「通常録画用ハードディスクを接続してください」というメッセージが出て通常録画していたHDDの録画番組が見れなくなりました。

 

テレビの電源を切ったり、接続ケーブルをはずして入れなおしたりやったのですがすぐには直りませんでした。

 

はじめにやった時のやり方もうまくなかったのかもしれませんが数日後に再度入手した情報などからやってみたところ接続が復活することができました。

 

その方法は以下になります。

 

1.テレビのコンセントを抜く

2.HDDの電源を抜く

3.テレビとHDDの接続ケーブルも抜く

4.10分程度待つ

5.テレビの電源から入れる

6.3分程度待つ

6.HDDの電源を入れる

7.テレビとHDDの接続ケーブルをつなぐ

 

 

これで今回はテレビとHDDの接続(認識)が復活して録画リストをクリックしたら録画リスト一覧が表示されるようになりました。

 

ただ、HDD自体がそろそろという兆候かもしれないので早めに替えを考えておいた方がいいかと思っています。

 

 

 

 

 

【動画編集 Clipchamp】Windows標準の動画編集ソフト「Clipchamp」で動画をトリミングする方法

 

 

 

 Windows 11から標準搭載されている動画編集ソフト「Clipchamp」は、簡単に動画を編集できる便利なツールです。

 

今回は、動画のトリミング方法について説明します。

トリミングとは、動画の不要な部分をカットして、必要な部分だけを残す作業のことです。

 

 

目次

 

1.Clipchampとは?

 

 

Clipchampは、Windows 11に標準搭載されている無料の動画編集ソフトです。直感的な操作で動画の編集ができ、トリミングやエフェクトの追加、テキストの挿入などの基本的な編集機能が揃っています。特に、シンプルなUIが特徴で、動画編集初心者にも使いやすいです。

 

2. Clipchampの起動方法

 

 

まず、Clipchampを起動しましょう。

1. スタートメニューから「Clipchamp」を検索してクリックします。
2. Clipchampが起動したら、編集したい動画をインポートして作業を開始します。

 

3.動画のインポート方法

 

 

動画をインポートする手順は以下の通りです。

1.Clipchampのホーム画面にある「新しいビデオを作成」をクリックします。

2.「メディアをインポート」でファイルを選択するかドラッグアンドドロップで動画ファイルをインポートします。

4.タイムラインへ設定

 

インポートした動画をタイムラインにドラッグ&ドロップします。

 

5.画面のサイズ変更

 

タイムライン上にある動画をクリックすると、ウインドウの右上に「16:9」などのサイズが表示されます、これをクリックすることで様々なサイズへ変更することができます。

 

 

6.動画のトリミング方法

 

 

次に、実際に動画をトリミングしてみましょう。

 

1.タイムライン上で、再生ヘッドをトリミングしたい部分の始点に移動させ、ハサミマークの[スプリット]をクリックします。

 

動画が再生ヘッド位置で分割されます。

続いて、終点に再生ヘッドを移動させ、同様に[スプリット]をクリックします。

 

切り離した不要な部分を[backspace key]で削除すればトリミングされます。

 

これで動画の不要な部分をカットし必要な部分だけを残すことができます。

 

不要な部分のトリミング

不要な部分のトリミング

 

7.トリミング後の動画の保存方法

 

 

トリミングが完了したら、最後に動画を保存します。

1.左上のファイル名欄をクリックし名称を入力します。

2. 画面右上の「エクスポート」ボタンをクリックします。

3. 解像度を選択して、トリミング済みの動画を保存します。

保存が完了したら、トリミングされた動画を確認してみましょう。

 

まとめ

 

Clipchampを使えば、動画のトリミング作業が非常に簡単に行えます。不要な部分を削除して、必要な部分だけを残すことで、動画のクオリティを上げたり、視聴者に伝えたいポイントを明確にできます。Windows標準の動画編集ソフトとして、多くの機能が備わっているClipchampをぜひ活用してみてください。

 

これで、Clipchampを使った動画のトリミング方法が完了です。

 

 

 

 

 

 

 

【Unity】Unityで背景を設定する方法

 

 

 Unityでゲームやアプリを開発するとき、背景の設定は非常に重要です。

 

背景を適切に設定することで、ゲームやアプリの雰囲気が大きく向上します。

 

この記事では、Unityの背景設定方法について、いくつかの簡単なステップを紹介します。

 

1.カメラの背景色を設定する

 

 

背景色を単色に設定したい場合は、カメラの設定を変更するだけで簡単に行えます。次の手順で設定しましょう。

 

手順:

 

手順:
1.カメラを選択: Hierarchyビューから`Main Camera`を選択します。


2.単色の背景を設定する場合は、InspectorビューでCameraの項目の中の「Clear Flags」にて「Soloi Color」を選択します。

 

続いてその下の「Background」にて背景色を設定します。

 

3.色を選択:カラーピッカーを使用して、好きな色を選びます。

これで、シーンの背景が指定した単色に変更されます。

 

 

2.スカイボックスを使用して背景を設定する

 

 

スカイボックスは、3D空間の背景を表現するために使用される特殊な素材です。

空や遠景などをリアルに表現でき、ゲームの世界観を向上させることができます。

以下の手順で設定してみましょう。

 

手順:
1.スカイボックス素材をインポートする:
    Unity Asset Storeからスカイボックス素材をダウンロードするか、自分で作成したスカイボックスを使用します。


    Asset Storeからスカイボックス素材をダウンロードする場合、以下のようにメニューのWindows→Asset StoreからAsset Storeを開きます。

開いた画面で「Skybox」などのキーワードで検索します。

 

「Skybox Series Free」や「FantasySkybox」などの無料の素材もあります。

 

「Add to My Assets」でAssetsに追加します。

 

 

Asset Store 開く

Asset Store 開く

 

2.Lighting設定を開く
    メニューの`Window > Rendering > Lighting`を選択して、Lighting設定を開きます。

Lightning設定を開く

Lightning設定を開く

3.Environment Settingsでスカイボックスを設定
   Lighting設定パネルの「Environment」タブの中に、「Skybox Material」という項目があります。ここで使用するスカイボックスのマテリアルを設定します。

Skybox Materialの設定

Skybox Materialの設定

 

4.スカイボックスを選択
    ドラッグ&ドロップするか、マテリアルを選択してスカイボックスを適用します。

スカイボックスがシーン全体の背景に適用され、遠景や空がリアルに再現されます。

 

3.カスタム背景画像の使用

 

背景にカスタム画像を使いたい場合は、2Dの画像を背景に貼り付ける方法もあります。これにより、固定の背景を表示したり、UIとして背景を扱ったりできます。

 

手順:
1.画像をインポート:

まず、背景として使用する画像をプロジェクトにインポートします。Assetsフォルダにドラッグ&ドロップするか、Right Click > Import New Assetでインポートします。


2.UIキャンバスの作成:

HierarchyビューでRight Click > UI > Canvasを選択して、新しいCanvasを作成します。


3.Imageを追加:

キャンバスの子オブジェクトとしてRight Click > UI > Imageを追加します。


4.背景画像を設定:

Inspectorビューで、Imageコンポーネントの「Source Image」にインポートした画像を設定します。


5.Rect Transformを調整:

Rect Transformを使って、画像のサイズと位置をシーン全体に合わせます。これで、カスタム背景画像がシーンに表示されます。

 

4.動的な背景を作成する



背景を静的な画像やスカイボックスだけでなく、動的に変化させたい場合は、アニメーションやシェーダーを使用することができます。

 

手順:
1.シェーダーを使用する:

Unityには背景を動的に変更するためのシェーダーがあります。スクリプトやシェーダーグラフを使って、リアルタイムで背景を変化させることが可能です。


2.アニメーションを追加:

背景にアニメーションを適用することもできます。例えば、時間の経過に応じて背景が昼から夜に変化するようなアニメーションを作成することができます。

 

 

まとめ

 

 

Unityでの背景の設定は、カメラの設定やスカイボックス、カスタム画像、さらにはシェーダーやアニメーションを活用することで、さまざまな表現が可能です。

 

目的に応じて、最適な背景設定方法を選び、ゲームやアプリに個性を加えましょう。

 

 

 

 

 

【Unity NavMesh】NavMeshObstacleを追加する方法

 

 

 UnityのNavMeshObstacleを使用すると、移動中のNavMeshAgentが障害物に対して回避行動をとるようにできます。

 

ここでは、NavMeshObstacleの追加と設定手順について説明します。

 

1. プロジェクトの準備

 

 

まず、NavMeshAgentを使用したプロジェクトを作成していることを前提にします。

もしまだNavMeshAgentの設定ができていない場合は、まず先に前回記載した「【Unity】NavMesh、NavMeshAgentの使用方法」の記事を参考にしてください。

 

2. NavMeshObstacleの基本

 

 

「NavMeshObstacle」は、NavMesh上に障害物を配置し、NavMeshAgentがその障害物を回避できるようにするためのコンポーネントです。

この機能は、静的な(動かない)オブジェクトだけでなく、動的に移動する障害物にも適用できます。

 

 3. 障害物オブジェクトの作成

 

 

まず、NavMeshAgentが回避する障害物となるオブジェクトを作成します。

簡単な例として、次の手順でキューブ(Cube)をシーンに追加します。

 

1.障害物の作成
   Unityのメニューから「GameObject」→「3D Object」→「Cube」を選択して、シーンにキューブを追加します。このキューブがエージェントにとっての障害物になります。

 

2.NavMeshObstacleの追加
   障害物となるキューブを選択し、インスペクタで「Add Component」ボタンをクリックして「NavMeshObstacle」を追加します。

 

4. NavMeshObstacleの設定

 

 

次に、追加したNavMeshObstacleのパラメータを設定します。

 

1.Shape(形状)
   「Shape」は、障害物の形状を設定します。

Capsule」や「Box」などが選択できます。

この形状によって、NavMeshAgentが障害物をどう認識するかが決まります。

 

2.Carve(削り込み)
   「Carve」オプションを有効にすると、障害物が動的にNavMeshを削り、障害物の周りにエージェントが進入できないエリアが作成されます。

これは、障害物が移動する場合に特に便利です。

 

  「Carve Only Stationary」を有効にすると、動かない障害物に対してのみNavMeshの再計算を行います。動的な障害物に使用する場合は無効にします。

 

3.サイズの調整
   NavMeshObstacleの形状やサイズは、障害物に合うように調整します。

インスペクタの「Size」パラメータなどを調整することで、NavMeshObstacleが正しくキューブ全体を覆うようにします。

 

5. 動的な障害物

 

 

NavMeshObstacleは動的に動く障害物にも対応しています。

たとえば、障害物をスクリプトで動かすことで、NavMeshAgentが移動する障害物を回避する動作を確認できます。

以下は、キューブを前後に移動させるシンプルなスクリプトです。

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestCube : MonoBehaviour
{
    public float speed = 3.0f;
    public float distance = 5.0f;
    private Vector3 startPos;

    void Start()
    {
        startPos = transform.position;
    }

    void Update()
    {
        // 障害物を前後に動かす
        transform.position = startPos + new Vector3(0, 0, Mathf.PingPong(Time.time * speed, distance) - distance / 2);
    }
}

 

このスクリプトを障害物にアタッチし、シーンを再生することで、NavMeshAgentが動的に動く障害物を回避する動作を確認できます。

 

6. 実行と確認

 

 

シーンを再生して、NavMeshAgentが障害物を回避する動作を確認します。

動的な障害物を設定している場合、NavMeshAgentは移動してくる障害物を避けながら目的地に向かうようになります。

静的な障害物の場合も、NavMeshAgentは障害物を回避するルートを取ります。

 

まとめ

 

 

NavMeshObstacleを使用すると、NavMeshAgentがシーン内の障害物を回避することができ、より現実的な動作を実現できます。

特に動的な障害物を組み込むことで、シミュレーションやゲームのシーンにさらなるリアリティを加えることが可能です。

NavMeshObstacleは動的、静的なシーン両方で効果的に使用できるため、あなたのプロジェクトに適した設定を見つけ、最適なエージェントの動きを作り出してみてください。

 

 

【Unity】NavMesh、NavMeshAgentの使用方法

 

 

 UnityのNavMeshAgentはキャラクターやオブジェクトをナビゲーションメッシュ(NavMesh)上で移動させるための非常に便利なツールです。

 

ここでは、NavMeshAgentの基本的な導入方法と使い方について説明します。

 

 

目次

 

 

1.プロジェクトの準備

 


まず、Unityの新しいプロジェクトを作成します。3Dプロジェクトを選択して、シーンにいくつかのオブジェクト(地形、障害物、プレイヤーなど)を追加しておきます。

 

2.地形の作成とNavMeshのベイク

 


NavMeshは、オブジェクトが移動できる領域を定義するために使用されます。

地形や床となるオブジェクトをまず配置し、次にその上をオブジェクトが動けるようにNavMeshをベイクします。

 

1.地形や床オブジェクトを選択
地形や床になるオブジェクトを選択し、インスペクタの名称横の「Static」のプルダウンメニューをクリックし「Navigation Static」を選択します。

 

2.NavMeshのベイク
次に、メニューから「Window」→「AI」→「Navigation」を開きます。

「Bake」タブに移動し、タブ名下の「Bake」ボタンをクリックし、タブ内下の「Bake」をクリックしてNavMeshを生成します。

これで、オブジェクトが移動可能なエリアが作成されます。

 

 

3.NavMeshAgentの追加

 


次に、キャラクターやオブジェクトにNavMeshAgentを追加します。

 

1.オブジェクトの選択
移動させたいオブジェクト(例えばCubeなど、仮に名称を「People」とします)を選択し、インスペクタの「Add Component」ボタンから「NavMeshAgent」を追加します。

 

2.NavMeshAgentの設定
NavMeshAgentのパラメータを調整します。

例えば、移動速度 (Speed) や回転速度 (Angular Speed)、停止距離 (Stopping Distance) を調整することで、エージェントの動きをカスタマイズできます。

 

4.スクリプトでエージェントを制御

 


NavMeshAgentを使って目的地に向かってオブジェクトを移動させるために、スクリプトを作成します。

以下のようなシンプルなスクリプトを作成し、オブジェクトに追加します。

 

1.スクリプト追加手順

プロジェクト内「+」→「C# Script」にてスクリプトを追加し先程と同じように名称を「People」にします。

先程の「NavMeshAgent」を追加したオブジェクト(名称:People)にアタッチします。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class People : MonoBehaviour
{
    public Transform target; // 移動したい目的地のターゲット
    private NavMeshAgent agent;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>(); // NavMeshAgentを取得
    }

    void Update()
    {
        agent.SetDestination(target.position); // ターゲットの位置に向かって移動
    }
}


 

 

 

 

5.ターゲットを設定する

 


シーン内にターゲットとして移動先のオブジェクト(例えばCubeなど)を配置し、先程作成して「People」オブジェクトに追加したスクリプト内のtargetフィールドにドラッグ&ドロップします。

これにより、エージェントがそのターゲットに向かって移動するようになります。

 

6.実行と確認

 


シーンを再生して、NavMeshAgentが指定したターゲットに向かって移動するか確認します。

エージェントが地形に沿って滑らかに移動し、障害物を避ける動きをするはずです。

 

7.まとめ

 


NavMeshAgentを使うことで、キャラクターやオブジェクトの自動移動やナビゲーションを簡単に実現できます。NavMeshのベイクとNavMeshAgentの設定をしっかり行い、目的地までの移動をスムーズに行えるように調整しましょう。