私はQuestSystemを統一しています。C#新しい{}でsubscibeにイベントを割り当てる
クエストの目的が完了したときにわかるように、クエストデータにイベントを割り当てることができます。
A
という名前のクラスとa
という名前のクラスがあるとします。
と私はクラスB
、Action b
A.a
への参照を持っていると思いますが、私は
b = A.a;
、
b+= someAction;
をすれば、それは実際にa+=someAction;
を行いますが、ときに私がしなければしたいですそれ。それは単にb+=someAction
となり、A.a
は残りますnull
私は何をしたいのですか?
ここにいくつかのタグがあります。編集======= ======(私は答えがどうなるか分からない。そう...)
# event
# subscribing event
# assigning event
# referencing event
# action
# delegate
ここに私のコードです。
public class QuestData
{
public string questName;
public string qusetID;
public string questDescription;
public SceneType questSceneType;
private string isActivePrefsKey { get { return $"QuestKey{qusetID}"; } }
public bool isActive {
get {
return Convert.ToBoolean (PlayerPrefs.GetInt (isActivePrefsKey));
}
set { PlayerPrefs.SetInt (isActivePrefsKey, Convert.ToInt16 (value)); }
}
public QuestObjective questObjective;
public QuestReward questReward;
public void Activate()
{
if (AppController.CurrentScene == questSceneType) {
questObjective.ActivateObjective();
}
}
}
QuestObjective.cs
public class QuestObjective
{
// TODO rename all
public int goalObjectiveCount;
public int currentObjectiveCount;
public Action questAction;
public void OnConditionMatch()
{
Debug.Log ("OnConditionMatch");
currentObjectiveCount += 1;
}
public void ActivateObjective()
{
questAction += OnConditionMatch;
}
}
QuestManager.cs
あなたの例に読むpublic class QuestManager : MonoBehaviour
{
List<QuestData> questDatas;
void Awake()
{
PrepareQuestDatas();
ActivateActiveQuests();
}
void ActivateActiveQuests()
{
var activeQuests = GetActiveQuests();
foreach (var activeQuest in activeQuests) {
activeQuest.Activate();
}
}
List<QuestData> GetActiveQuests()
{
// for debuging
return questDatas;
// real code
return questDatas.Where (q => q.isActive == true).ToList();
}
public void PrepareQuestDatas()
{
questDatas = new List<QuestData> {
new QuestData {
questName = "Foot Print",
questDescription = "win the game for first time",
questSceneType = SceneType.Main,
questObjective = new QuestObjective {
goalObjectiveCount = 1,
questAction = GamePlayController.instance.endGameCon.onWinGame
},
questReward = new QuestCoinReward{
rewardAmount = 100,
},
}
};
}
}
あなたに聞いている質問への答えは、「B」に問題の「A」への参照を与えることです: 'B.MyReferenceToSomeA.a + = someAction;'しかし、私はこれが[ XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を参照してください。 –
*私は何が欲しいか分からない。だから.. * - おそらく、あなたの問題についてもっと正確にしようとするべきです。 – Adrian
@adjanが編集しました。私は確かに私が欲しいものを知っているでしょう – uzu