UnityでCanvasに線を描く(Unity draw line on canvas)

UnityでCanvasにImageを張り付けたので、その上に線を描きたい。 これが意外と大変でdraw.line()みたいな簡単に使える関数がない。三角形なら簡単にかけるので、細長い三角形を2つ書いて直線っぽくする。




1. HierarchyにあるCanvasをクリック、①のちょっと左上にある+ボタンを押して、Create Empty Child を選んで、GameObjectを追加する。
2. GameObjectをクリックして、Inspectorを表示。
3. ②をクリックして、Shiftキーを押しながら(選択肢が変わる)Bottom, leftを選ぶ。Pos X,Y,Z を0にする。
4. Projectにある③Assetsをクリック、Assetsのちょっと左上にある+ボタンを押して、C# Script を選んで、NewBehaviourScriptを追加する。
5. ④のスライダーを一番左にする(NewBehaviourScriptの文字を全部見たい)
6. NewBehaviourScriptをダブルクリックして、Visual Studio 2022を起動して、NewBehaviourScript.csを表示する。
7. 自動で作られるコードは使わないので、全部消して、以下に書き換えて保存する。
8. Unityの編集画面に戻って、⑤の「Add Component」ボタンをクリック、虫眼鏡(検索)の欄にCanvas Rendererと入れて、選択肢に出る「Canvas Renderer」を追加する。
9. AssetsにあるNewBehaviourScript⑥をドラッグして、HierarchyにあるGameObject⑦にドロップする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class NewBehaviourScript : MaskableGraphic
{
    static NewBehaviourScript self;

    NewBehaviourScript()
    {
        self = this;
    }

    // このクラスの外から再描画したい場合はNewBehaviourScript.redraw()を呼び出す
    static public void redraw()
    {
        print("redraw");
        self.SetAllDirty();
    }

    protected override void OnPopulateMesh(VertexHelper vh)
    {
        vh.Clear();
        UIVertex vertex = UIVertex.simpleVert;
        vertex.color = Color.red;

        // 左下から、右上に斜めの赤い線を書く

        // 1番目の三角形
        vertex.position = new Vector2(0, 0); // 左下 
        vh.AddVert(vertex);
        vertex.position = new Vector2(canvas.pixelRect.width+2, canvas.pixelRect.height);
        vh.AddVert(vertex);
        vertex.position = new Vector2(canvas.pixelRect.width-2, canvas.pixelRect.height);
        vh.AddVert(vertex);

        // 2番目の三角形
        vertex.position = new Vector2(2, 0);
        vh.AddVert(vertex);
        vertex.position = new Vector2(-2, 0);
        vh.AddVert(vertex);
        vertex.position = new Vector2(canvas.pixelRect.width, canvas.pixelRect.height); // 右上
        vh.AddVert(vertex);

        // 細長い三角形を2つ書いて直線にする
        vh.AddTriangle(0, 1, 2); // 三角形しか書けない
        vh.AddTriangle(3, 4, 5); // 三角形しか書けない
    }
}

10. HierarchyにあるGameObjectをクリックして、Inspectorを表示すると、Canvas Rendererの下にNew Behaviour Script (Script)が追加されているのを確認する。
11. 画面中央の上にある▶(実行ボタン)を押して、アプリを実行して、目的の画像に斜めの赤い線が表示されるのを確認する。
12. Visual Studio 2022 のソリューション エクスプローラーで、NewBehaviourScript.csを右クリックして、名前の変更を選ぶ。
13. RedLineOnCanvas.csに変更して、Enterで確定する。「すべての参照に対して、名前を変更しますか?」と問われるので、「はい」を選ぶ。
14. これでUnity側のコードも含めて、C#クラス名まで全部の名前が変更される。

UnityでCanvasに画像を表示する

Unityで画像を画面いっぱいに表示したい。普通のWindowアプリみたいにしたい。
【目的】画像を表示する
【結論】画像を張るだけでも色々設定しないといけない。面倒!
【詳細・やり方】
1. ①のちょっと左上にある+ボタンを押して、UIからCanvasとUIからImageを追加する。Canvasの中にImageが来るようマウスでドラッグして、調整する。
2. ②のAssetsの中に表示したい画像をファイルマネージャー(エクスプローラー)を使ってからドラッグ&ドロップして入れる。入れた画像をクリックする。
3. 右にInspectorが表示されるので、③にあるように、Texture Typeを「Sprite(2D and UI)」に、Sprite Modeを「Single」に変更する。
4. ④のGenerate Mip Mapのチェックを外す。
5. 左上①のImageをクリックして、右にInspectorを表示する。
6. ②をクリックして、左右、上下ともstretchになっている箱をクリックする。
7. ③のLeft,Top,Pos Z, Right, Bottomを全部0にする。
8. ④のSource Imageの右の◎をクリックして、表示される一覧から目的の画像を設定する。
9. 画面中央の上にある▶(実行ボタン)を押して、アプリを実行して、目的の画像が画面いっぱいに表示されるのを確認する。

UnityでVisual Studio 2022でデバッグできないを対策する

Unity 2021.3.10f1を使って新しくプロジェクトを作って、C#スクリプトVisual Studio 2022で作成して、ブレイクポイントを設定してもきかない。原因は、Unity側に少しだけ設定が必要だった
【目的】Visual Studio 2022でデバッグしたい
【結論】UnityのトップメニューからEdit→Preferences→External Toolsで EditorにVisual Studioを設定して、Player projectsのチェックを入れる
【詳細・やり方】
1. Unityを起動して、適当なC#スクリプトを含むアプリを作る("unity hello world"で検索すればよさげなサンプルが見つかる)
2.UnityのトップメニューからEdit→Preferences→External Toolsで EditorにVisual Studioを設定して、Player projectsのチェックを入れる

Unity preferences
3.UnityとVisual Studioをいったん終了する
4.Unityを再起動して、先ほどのサンプルを読み込む
5.C#スクリプトをダブルクリックして、Visual StudioC#スクリプトを表示する
6.Visual Studioのコードが表示されている行の一番左をクリックして赤い丸を表示
(これがブレイクポイント。Debug.Log()のある行の左にブレイクポイントを設定するとわかりやすい)
7.Visual Studioのトップメニューの「▶Unityにアタッチ」をクリック
8.Unityに戻って、実行ボタン(上の方にある ▶)を押す
9.Visual Studioの画面が出て、ブレイクポイントを設定した行が黄色になれば、 そこで実行が中断されている
10.あとは変数を見たり、続行ボタンを押したり、ステップ実行(1行ずつ進める)するなり、詳細にデバッグする

UnityでVisual Studio 2022を使うときの文字化けを対策する

Unity 2021.3.10f1を使って新しくプロジェクトを作って、C#スクリプトVisual Studio 2022で作成するとUnity側で日本語が文字化けする。原因はVisual Studio文字コードsjisなのに、Unityがutf-8を求めるため。

【目的】新しくプロジェクト作ったとき、最初からutf-8で保存したい
【結論】UnityのUnity Hubのデフォルトの保存場所に.editorconfigを作ってutf-8文字コードを指示する
【詳細・やり方】

    1. Unity Hub 3.3.0を起動して、ギアアイコンをクリック→環境設定→プロジェクト→デフォルトの保存場所を見る
    2. 上記、デフォルトの保存場所に以下の内容で.editorconfigというファイルを作る
    [*]
    end_of_line = crlf
    charset = utf-8
    trim_trailing_whitespace = true
    insert_final_newline = true
    indent_style = space
    indent_size = 4
    3. Unity Hubを再起動する
    4. 既存・新規のUnityプロジェクトでC# scriptをVisual Studioで作成すると最初から utf-8文字コードで作成してくれる

Windows98をWindows10環境で動かす(2022年版)

1.用意するもの

1.1 Windows98 Japanese (MSDN)インストールディスク(CDブート未対応)
- MSDN契約しないともらえない
1.2 Oracle VM VirtulBox バージョン 6.1.38 Windows
https://www.virtualbox.org/wiki/Downloads
1.3 FreeDOS 1.3
http://www.freedos.org/download/
1.4 Win98用のグラフィックドライバ(VirtulBox)140214.zip
https://web.archive.org/web/20190210203844/http://bearwindows.boot-land.net/vbe9x.htm

2.胆になるところ

2.1 セキュリティのメモリ保護にVT-xを使わないようにする(初めからこの設定かも)
  手順: Windows10->スタート→設定→Windows セキュリティ→デバイス セキュリティ→コア分離の詳細→メモリ整合性→オフ
2.2 Win98SEのインストール時 setup.exe /nm /is /ie /c /p j;a とする

3.作業

3.1 Win10に最新のVirtulBoxをインストール(最新じゃないと動かないこと多し)
3.2 FreeDOSサイトからFD13-LiveCD.zipをダウンロードして、FD13LIVE.isoを取り出す
3.3 セキュリティのメモリ保護にVT-xを使わないようにする
  手順: Windows10->スタート→設定→Windows セキュリティ→デバイス セキュリティ→コア分離の詳細→メモリ整合性→オフ
3.4 VirtulBoxマネージャーを起動
3.5 「新規」ボタンを押す
3.6 名前に「Win98SE」といれると
  →良しなにしてくれるので→「作成」を押す
  →良しなにしてくれているので→「作成」を押す
3.7 新しく作ったWin98SEを選択して「設定」ボタンを押す
  ディスプレイ→スクリーン→ビデオメモリを18MBから32MBに変更(後で32MB用のグラフィックドライバを入れるため)
  ストレージ→丸いCDアイコン(空)をクリック
   →右に小さい▼のついた丸いCDアイコンが出るのでクリック
   →ディスクファイルを選択して、あらかじめダウンロードしておいたFD13LIVE.isoを選ぶ
  ネットワーク→ネットワークアダプターを有効化のチェックを外す
  USB→USBコントローラーを有効化のチェックを外す
  「OK」を押してダイアログを閉じる
3.8 「起動」ボタンを押す
(文字いっぱいじゃわからないという場合の公式動画=FreeDOS1.3のインストール)
http://wiki.freedos.org/install/
3.9 Welcome to FreeDOS 1.3 (LiveCD)の画面が出る
「Install to harddisk」を選んでEnter
3.10 Englishを選んでEnter
Yes Continue with the installation→Enter
Yes Partition drive C:→Enter
Yes Please reboot now →Enter
3.11 再びWelcome to FreeDOS 1.3の画面が出る
「Install to harddisk」を選んでEnter
Englishを選んでEnter
Yes Continue with the installation→Enter
Yes Please erase and format drive C:→Enter
US English (Default)→Enter
Plain DOS system→Enter
Yes Please install FreeDOS 1.3→Enter
Yes Please reboot now →Enter
3.12 Boot from system harddiskを選んでEnter
  →1. Load FreeDOS with JEMMEX, no EMS, max RAM freeを選んでEnter
(これでFreeDOSのインストールは終わり。次にWin98のインストール)
3.13 Windows10のCDドライブにWindows98 Japanese (MSDN)ディスクを入れる
3.14 VirualBoxのメニューの「デバイス」「光学ドライブ」「ディスクファイルを選択」で、FD13LIVE.isoが選ばれているが、ホストドライブからCDを入れたドライブに変更 ※変更できない場合は、VirtualBoxマネージャーでWin98SEを選んで
   →「設定」から「ストレージ」→丸いCDアイコン(空)をクリック
   →右に小さい▼のついた丸いCDアイコンが出るのでクリック
   →ホストドライブを選択
3.15 FreeDOSの画面でC:>で、D:と入れる(英語キーボードになっているので注意)
3.16 dir[Enter]すると、JAPANESE.ATとJAPANESE.NECが見えるが、CD JAPANESE.AT
  して、CD WIN98SEする。dir/wするといくつかのCABファイルとSETUP.EXEが見える
3.17 setup.exe /nm /is /ie /c /p j;a ★重要と入力して Enter
3.18 これでWindows98のセットアップが起動する。
3.19 あとは画面の指示に従ってセットアップを進める
3.20 音楽が鳴ってWindows98へようこそダイアログがでます。ただし画面が16色
(これでWindows98のインストールは終わり。
 次にグラフィックドライバのインストール)

3.21 Win98用のグラフィックドライバ(VirtulBox)140214.zipを解凍する。 ※Win98だとクリップボード共有とかホストからのドラッグ&ドロップが使えないため
※Win98だとzip解凍が面倒なので、解凍しておく
3.22 VirualBoxのメニューの「デバイス」「光学ドライブ」「ディスクイメージを選択/作成」で「作成」を選ぶ。左にWin10のファイルが見えるので、140214.zipを解凍した 140214フォルダーを右のWin98SEにドラッグ&ドロップして「OK」を押す。Win98SE.visoが作成されているので、「選択」を押す。
3.23 Win98SEのマイコンピュータをダブルクリックしてDドライブ(CDになっている)から140214/032mbが見えるのを確認する
3.24 Win98SEのデスクトップで画面のプロパティを開いて、「設定」タブの「詳細」ボタンを押す
3.25 「アダプタ」タブの「変更」ボタンを押す→
  「次へ」→特定の場所にあるすべての...を選んで「次へ」
  「ディスクを使用」→「参照」から140214/032mbのフォルダーを選ぶ
  vbemp.infが選ばれる→「OK」
  VBE Miniport - Standard PCI Graphics Adapter (VGA)が選ばれる
  「OK」を押して「次へ」→「完了」→「適用」
3.26 一度Win98を再起動
※Win起動したが真っ黒で何も表示されない場合は、VirtualBox仮想マシンからACPIシャットダウンして、もう一度起動する
3.27 24ビット 1024x768ピクセル が選べるようになる→「適用」

Win10でOracle VM VirtulBoxを使ってWinXpを動かす(2022年版)

1.用意するもの
1.1 アップデート版のXPのインスト―ルCD
1.2 Windows2000のインスト―ルCD
1.3 Oracle VM VirtulBox バージョン 6.1.38 Windows
https://www.virtualbox.org/wiki/Downloads

2.手順
(2.1)アップデート版のXPのインスト―ルCDなので、途中で旧WindowsのCDを入れるように指示されるが、CDを交換しても旧WinCDが認識されない。
そこで、
2.2 Win2000のインストールCDをあらかじめ*.isoイメージにして、HDDに保存。Win10のエクスプローラーで開いて、仮想CDドライブに割り当てておく。
2.3 VirtulBoxをインストールしてWinXP(32bit)を選んで仮想マシンの作成を始める。(容量などの設定はお勧めされるものをそのまま使う)。
2.4 WinXPのCDをCDドライブに入れてWinXPのインストールを開始する。
2.5 途中でWindowsのCD入れ替え指示のときにVirtualBoxから、カレントのCDドライブを変更して、Win2000のCDを認識させて、WinXpのCDドライブにもう一度変更することで、この問題を回避。
VirtualBoxのメニューから「デバイス」「光学ドライブ」から Win10でマウントしているWin2000のISOのドライブを選ぶ。XPを入れてと画面に指示が 出たら同じ操作でWin10のCDドライブに戻す)。
2.6 ネットワークのWinXPアクティベーションはできないので、電話でアクティベーションするを選ぶ(電話ならアクティベーションできる)
2.7 ウイルスが怖いのでWinXPのネットワークはOFFにする。
(VirtualBoxのメニューから「仮想マシン」「設定」「ネットワーク」「アダプター1」で割り当てを「未割り当て」に変更)。
2.8 ホストPC(Win10)で、Windows + IEMicrosoft Update カタログ
 https://www.catalog.update.microsoft.com/Home.aspx
 にアクセスして、『KB936929』で検索すればSP3をダウンロードできる。
 注)検索「SP3」では見つからない。
2.9 VirtualBoxのメニューから「デバイス」「Guest Additions CDイメージの挿入...」  を選択して、出てくるインストール画面に従ってインストール(途中、インストールすると動かなくなるという脅しが出るが無視してインストールを続ける)。
2.10 VirtualBoxのメニューから「デバイス」「クリップボードの共有」と「ドラッグ&ドロップ」の2つを「双方向」に切り替える。
2.11 ホストPC(Win10)で、ダウンロードしていたKB936929-SP3-x86をドラッグ&ドロップでWinXPにコピーして、WinXPで実行してSP3を当てる。再起動後ウイルスの脅威がありますとでるが、何もできないので、WinXPのネットワークは切断したままにしておく。