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#

Unityのアニメーション機能は強力らしいが、最初わかりにくい。
最初Animation Windowの録音ボタンが押せる状態にならずどうしたものかという感じだったが、Animationを設定したいGameObjectをHierarchyから選ばないといけない。
録音ボタンがおせたあと、アニメーションで使う画像の指定がなかなかできなかったが、この録音ボタンを押した後に、メインのWindowに戻って変えたい画像のInspectorで指定しているイメージを変えるとAnimation Windowで反応して変わる。この別のWindowに移動して操作するのが気持ち悪い。
AnimationControlerもわかりにくい。ステートマシーン図みたいなやつ。ステートにあたるものを増やすには、Animationをつくって、ドラッグアンドドロップすると出てくる。矢印は、ステートに当たるものを右クリックするとMake Transitionがでてくるので、これを選ぶといつの間にか矢印がでている。この矢印をえらぶと下の方にConditionsがあり、ここにTriggerを追加する。このTriggerは、文字列で識別される。Scriptの中で定義される。わかりにくい。

Evolution#

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

etc..#

最初はダンジョンから出発するように変更したい。
そのためには、最初に表示させたいMapをHierarchy上にもってきてActiveにしておく。もともとあったMapはHierarchy上から削除しておく。SceanのActiveMapにHierarchy上に持ってきたMapを指定する。これでOK
プレーヤーの最初の位置は、PlayerオブジェクトのメンバーにPosがあるのでそこで設定。
別の空間をつくって、そこにもう1体ボスキャラを配置したい。
マップ上に配置されている既存のBOSSをコピーして、位置を変えて、画像を変えたら、表示はできた。
Encounterの設定は、Inspector上でBoss(Script)にEventがあるので、そこに新しいEventを追加しよう。そのEventのInspector上でEncounterを設定することができる。
なかなか思うようにサイズは変わってくれないが、Play中にパラメータを変化させるとリアルタイムで変わってくれるので見た目を確認しつつ、その後Playを解いて、ちゃんと変えないと反映されない。
ツリー構造になっているので、どのコンポのパラメータがレイアウトに効いているかわかりにくいから要確認

その他#

Visual Studioがいいかも。Unity Hub経由でインストール後、Unity側のExternal Toolsの設定でVisual Studioを設定しましょう[5]。そうすると、Scriptを開くだけで、プロジェクトを読み込んでくれて、再生ボタンを押すとUnityにアタッチするので、その状態でUnityで動作を始めるとデバッガーが動き、マークしていたところで止まってくれます。変数の中身とかも見れます。
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