質問編集履歴

2

コメント追加

2025/02/26 00:28

投稿

kaaak496
kaaak496

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ こうしたら良いんじゃないかという、短い回答でもいただけると嬉しいです。
2
+
1
3
  ### 実現したいこと
2
4
  現在Unityでローグライクゲームを作っています。
3
5
  まず、ゲーム本編の戦闘などが行われるメインシーンと、そのメインシーン外で、プレイヤーの強化アイテムなどを買えるショップシーンがあります。

1

コードの追加

2025/02/25 11:35

投稿

kaaak496
kaaak496

スコア8

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
  ④メインシーンが終了したらショップステータス戻す。
9
9
  ということをやりたいと思っています。
10
10
  現状、
11
- ①については、入れ子構造のScriptable Objectによって初期ステータスを設定しています。![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-02-25/70eb5dc5-687c-483a-8c32-a9d03f05511f.png)
11
+ ①については、入れ子構造のScriptable Object(GameStatus)によって初期ステータスを設定しています。![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2025-02-25/70eb5dc5-687c-483a-8c32-a9d03f05511f.png)
12
12
  今のところ、ショップおよびレベルアップでの強化は実装しておらず、仮の実装として、上で挙げたスクリプタブルオブジェクトをアタッチして、メインシーンの処理だけを実装しています。
13
13
  また、Scriptable Objectはマスターデータとして変化させたくないです。
14
14
 
@@ -24,9 +24,97 @@
24
24
 
25
25
 
26
26
  ### 該当のソースコード
27
+ 参考として、GameStatus.csとそこに格納されるもののひとつであるBulletData.csを貼り付けました。
28
+
29
+ GameStatus.cs
30
+ ```csharp
31
+ using System;
32
+ using System.Collections.Generic;
33
+ using UnityEngine;
34
+
35
+ [CreateAssetMenu]
36
+ public class GameStatus : ScriptableObject
37
+ {
38
+ [Header("!! Input Default Status !!")]
39
+ [Space]
40
+
41
+ public List<PlayerData> playerDatas = null;
42
+
43
+ public List<EnemyData> enemyDatas = null;
44
+
45
+ [Space]
46
+ public int bulletIndex;
47
+ public List<BulletData> bulletDatas = null;
48
+
49
+ public int NWayCount;
50
+ [NonSerialized] public int NwayCount;
51
+
52
+ public float SpreadAngle;
53
+ [Space]
54
+
55
+ public List<DefenceData> defenceDatas = null;
56
+
57
+ public List<ReinforceData> reinforceDatas = null;
58
+ }
27
59
 
28
60
  ```
61
+ BulletData.cs
62
+ ```csharp
63
+ using System.Collections;
64
+ using System.Collections.Generic;
65
+ using UnityEditor.Purchasing;
66
+ using UnityEngine;
67
+
68
+ [CreateAssetMenu]
69
+ public class BulletData : ScriptableObject
70
+ {
71
+ public GameObject bulletObject;
72
+
73
+ [Header("Common")]
74
+ public BulletType bulletType;
75
+
76
+ public BulletSide bulletSide;
77
+
78
+ public float bulletScale;
79
+
80
+ public float bulletSpeed = 5;
81
+
82
+ public float bulletATK = 1;
83
+
84
+ public float fireRate = 5;
85
+
86
+ public bool isHoming = false;
87
+ public float homingPower = 10f;
88
+ public float homingDuration = 5f;
89
+
90
+ public int bulletPenetratCount = 0;
91
+
92
+ [Space]
93
+ [Header("Explosive")]
94
+ public float explodeATK;
95
+ public float explodeRange;
96
+ [Tooltip("この距離まで近づくと爆発")]
97
+ public float explodeDistance;
98
+ public float explodeSpeed;
99
+
100
+ [Space]
101
+ [Header("Laser")]
102
+ public float damageRate;
103
+ }
104
+
105
+ public enum BulletType
106
+ {
107
+ Normal,
108
+ Explosive,
29
- 特になし
109
+ Laser
110
+ }
111
+
112
+ public enum BulletSide
113
+ {
114
+ Friendly,
115
+ Hostile
116
+ }
117
+
30
118
  ```
31
119
 
32
120
  ### 試したこと・調べたこと