Making RPG

Minecraft Programming

Abstract#

本当は、マイクラ上で作りたかったが、パラメータの表示Addonですら作れなかったので、別の方法を試してみる。例えばUnityとか。

Topics#

2D RPG by Unity#

とりあえず、Unityなら情報もたくさんありそうだし、[1]に従ってやってみよう。やりたいことは

スキル系#

To add “Skills”:   Add SkillInventory to MenuWindow, (in inspector of Unity, we can connect script and parameters)   Add updateSkills in MainMenu.cs, MenuRoot.cs  Add Skills to BattleWindow,    I’m wondering why it is not disappeared  List<Skill> Skills to BattleParameter.cs

hey, each skill has level, and each monster and character has its own level. need modification.-> solved. divide skill object.

use List.find[6]。レベルアップ時の処理OK
OK, but, need Skill level initialization
where is total initialization script!? -> Start() method in Player.cs should be one of them. additionally, CopyTo() in BattleParameter.cs might be the place to implement. Previous code was to pass the just refference. I modified to pass the copied Skill objects, then initialization was successfully implemented.
try to use skilllist asset which have all skills to find Skill object in the C# script, then if find the object, add the Skills List which is a member of BattleParameter しかし、Copy時には、Skillのレベルは元のままで、そのままコピーされる。ここもなんらかのCopyメソッドを作って、あたらしいオブジェクトをつくるべきか。→参照渡しじゃなくてオブジェクトを作って渡せばOK。

speed #

main charactor#

Evolution#

でも個体はLVをもつのでSpeciesDataという、LvとSpeciesをメンバーに持つクラスも作る。かつ、進化用にEvolutionPathというクラスを複数持つようにListももつ。そのEvolutionPathは、進化先のSpeciesと条件を管理する。Copilotによるとそれがいいらしい。
フィールド上でスペースキーを押すと出てくるコマンドに条件付きで表示されるようにする。
上記コマンドを選ぶと進化先を選択するメニューがでてくるようにする。このとき、このコマンドを選ぶときにCallbackを指定して呼び出すのだが、Unityはこれにクセがあって、数日手間取った。エディター上で◎を押してでてくるやつから一生懸命えらぼうとしていたけど、それだとInvokeされない。動かしたいメソッドを持つのは、そのメニューアイテムがぶら下がっている、つまりアタッチされている元のGameObjectがあって、それを動かすScript上に記述しておいて、それをメニューのCallbackのところにドラッグアンドドロップで持ってきて、メソッドを指定しないといけない。
進化先を選ぶと、進化中ですといって画面が黒くなって、元に戻って、進化が完了しましたとでるようにしたい。→AIに任せたら簡単に実装された。。しかし、後で問題が。AIが指定した方法は、画面全体を覆うOverlayをつくって、そこが黒くなる。そこにぶら下げたImageのRaycast Targetがチェックされていたので、画面全体でクリックができなくなっていた。これのせいで結構時間使ってしまった。。

etc..#

最初はダンジョンから出発するように変更したい。
そのためには、最初に表示させたいMapをHierarchy上にもってきてActiveにしておく。もともとあったMapはHierarchy上から削除しておく。SceanのActiveMapにHierarchy上に持ってきたMapを指定する。これでOK
プレーヤーの最初の位置は、PlayerオブジェクトのメンバーにPosがあるのでそこで設定。
別の空間をつくって、そこにもう1体ボスキャラを配置したい。
マップ上に配置されている既存のBOSSをコピーして、位置を変えて、画像を変えたら、表示はできた。
Encounterの設定は、Inspector上でBoss(Script)にEventがあるので、そこに新しいEventを追加しよう。そのEventのInspector上でEncounterを設定することができる。

その他#

Visual Studioがいいかも。Unity Hub経由でインストール後、Unity側のExternal Toolsの設定でVisual Studioを設定しましょう[5]。そうすると、Scriptを開くだけで、プロジェクトを読み込んでくれて、再生ボタンを押すとUnityにアタッチするので、その状態でUnityで動作を始めるとデバッガーが動き、マークしていたところで止まってくれます。変数の中身とかも見れます。
MenuRootのScrollRectを指定していたはずだが、いつの間にか消えていて、縦スクロールができなくなっていた。復活させたら動くようになったが。。
AssetとScriptの関係は、途中から変更できないと理解。新しい種類のAssetを追加する場合は、まずScriptでClassを定義しておいて、そのClassに紐づいたAssetをメニューからCreateするイメージ
GameObjectを再利用できるようにするらしい[2].
それは、元の画像ファイルのPixels Per Unitの値が正しくないかららしい。Sliceする前の画像のInspectorのなかにPixels Per Unitを探して、デフォルト100になっているので、それをピクセルサイズ、32とかに直してApplyすると治ったりする。[3]
Gridのinspectorの中にSorting LayerにOrder in Layerという数字をいれるところがある。数字が大きいほど前面に出る[4]
Unityで使われているのは、C#。プログラミング言語の一つで、Javaに似ているような気がするが、たまによくわからない表現がある。調べます。
[7]に参考あり。何となく、IEnumeratorが繰り返され、条件が満たされる間は待ちなさい、だから条件が満たされなくなったら(**に)抜け出す、って感じか。

Reference#

  1. [#1]Unity C# 2DRPGゲームの作り方 ~ドラクエ風レトロRPGを作ろう!~, https://feynman.co.jp/unityforest/game-create-lesson/2drpg-game/
  2. [#2]2022年02月12日, ohbashunsuke, UnityのPrefab(プレハブ)とは?使い方まで徹底解説, https://shibuya24.info/entry/unity-prefab
  3. [#3]2022年05月17日, ohbashunsuke, 【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説, https://shibuya24.info/entry/unity-unit
  4. [#4]【Unity入門】Unity2D 画像の前後を変える方法(SpriteRenderer)!1分からの簡単Unity入門, https://frog-blend.hatenablog.com/entry/2023/10/05/155921
  5. [#5]2025年1月30日, オオバ,【2025年版】Visual StudioをインストールしてUnityで使う方法, https://shibuya24.info/entry/unity-install-visualstudio
  6. [#6]【C#入門】Listの要素を検索するFindの使い方(FindAll/FindIndex), https://www.sejuku.net/blog/45252?utm_source=blog&utm_medium=blog&utm_campaign=blog__45381
  7. [#7]WaitWhile, https://docs.unity3d.com/6000.1/Documentation/ScriptReference/WaitWhile.html
  8. [#8]頭が痛くならない「ダメージ計算式」の基本の話, https://note.com/daraneko_games/n/n9819dda2698a