public void OnEnable() { for (int i = 0; i < panel.transform.childCount; i++) { Destroy(panel.transform.GetChild(i).gameObject); } for (int i = 0; i < showPanel.transform.childCount; i++) { Destroy(showPanel.transform.GetChild(i).gameObject); } for (int i = 0; i < 18; i++) { GameObject beforeArror = Instantiate(beforeArrorPrefab); beforeArror.transform.SetParent(panel.transform, false); beforeArror.name = "Arror" + i.ToString(); } for (flag = 0; flag < ArrorManage.jiaNumber; flag++) { Transform jiaParent = panel.transform.Find("Arror" + flag.ToString()); GameObject jiaImage = Instantiate(jiaPrefab); jiaImage.transform.SetParent(jiaParent, false); jiaImage.transform.localPosition = Vector2.zero; jiaImage.name = "jia"; } for (int i = 0; i < ArrorManage.dunNumber; i++) { Transform dunParent = panel.transform.Find("Arror" + flag.ToString()); GameObject dunImage = Instantiate(dunPrefab); dunImage.transform.SetParent(dunParent, false); dunImage.transform.localPosition = Vector2.zero; dunImage.name = "dun"; flag++; } }为什么第二次激活后第四五个循环没作用
时间: 2024-02-14 13:35:57 浏览: 172
根据代码,第四个循环是向panel中添加18个箭头,第五个循环是向panel中添加jiaNumber个加号,第六个循环是向panel中添加dunNumber个盾牌。如果第二次激活后第四五个循环没有作用,那么可能是因为panel中已经存在了这些对象,导致添加不上去。你可以在循环前先检查一下panel中是否已经存在这些对象,如果存在就跳过添加的操作。另外,如果你想要在第二次激活后重新添加这些对象,可以在OnDisable()方法中将panel和showPanel中的所有子对象销毁,这样在下一次激活时就能重新添加了。
相关问题
public void OnEnable() { for (int i = 0; i < panel.transform.childCount; i++) { Destroy(panel.transform.GetChild(i).gameObject); } for (int i = 0; i < showPanel.transform.childCount; i++) { Destroy(showPanel.transform.GetChild(i).gameObject); } for (int i = 0; i < 18; i++) { GameObject beforeArror = Instantiate(beforeArrorPrefab); beforeArror.transform.SetParent(panel.transform, false); beforeArror.name = "Arror" + i.ToString(); } for (int i = 0; i < ArrorManage.jiaNumber; i++) { Debug.Log(ArrorManage.jiaNumber); Transform jiaParent = panel.transform.Find("Arror" + i.ToString()); GameObject jiaImage = Instantiate(jiaPrefab); jiaImage.transform.SetParent(jiaParent, false); jiaImage.transform.localPosition = Vector2.zero; jiaImage.name = "jia"; flag++; } for (int i = 0; i < ArrorManage.dunNumber; i++) { Transform dunParent = panel.transform.Find("Arror" + flag.ToString()); GameObject dunImage = Instantiate(dunPrefab); dunImage.transform.SetParent(dunParent, false); dunImage.transform.localPosition = Vector2.zero; dunImage.name = "dun"; flag++; } }为什么第二次激活后第四五个循环没作用
这段代码中有一个变量`flag`,在第一个循环之前没有初始化,因此第二次激活时`flag`的值可能是不正确的,导致后面的循环没有执行。建议将`flag`的初始值在函数开始时设为0,例如在函数开头处添加`flag = 0;`。
此外,如果第二次激活后仍然没有执行第四五个循环,可以在代码中添加一些`Debug.Log`语句来输出变量的值,以便进行排查错误原因。
for (int i = 0; i < cityTransforms.childCount; i++) { gongJiChengShiBeans[i].city = cityTransforms.GetChild(i).gameObject.name; gongJiChengShiBeans[i].count = 1; gongJiChengShiBeans[i].type = (i == 0) ? 1 : (gongJiChengShiBeans[i - 1].type % 5) + 1; } 优化代码
为了优化这段代码,我注意到可以减少对 `cityTransforms.GetChild(i).gameObject` 的多次访问。此外,可以将 `(i == 0) ? 1 : (gongJiChengShiBeans[i - 1].type % 5) + 1` 的计算提取到循环外,避免重复计算。下面是优化后的代码:
```csharp
int previousType = 1;
for (int i = 0; i < cityTransforms.childCount; i++)
{
Transform childTransform = cityTransforms.GetChild(i);
GongJiChengShiBean gongJiChengShiBean = gongJiChengShiBeans[i];
gongJiChengShiBean.city = childTransform.gameObject.name;
gongJiChengShiBean.count = 1;
gongJiChengShiBean.type = (previousType % 5) + 1;
previousType = gongJiChengShiBean.type;
}
```
这样,代码中的 `cityTransforms.GetChild(i).gameObject` 只被访问一次,并且计算 `(previousType % 5) + 1` 只在循环外进行一次。这样可以提高代码的效率。
阅读全文
相关推荐




#include <bits/stdc++.h> using namespace std; const int MAXN = 1005; const int INF = INT_MAX; typedef pair<int, int> a; vector s[MAXN]; int cnt[MAXN]; void dijkstra(int start, int n) { for (int i = 1; i <= n; i++) { cnt[i] = INF; } cnt[start] = 0; priority_queue<a, vector, greater > pq; pq.push(make_pair(0, start)); while (!pq.empty()) { int u = pq.top().second; int d = pq.top().first; pq.pop(); if (d > cnt[u]){ continue; } for (int i = 0; i < s[u].size(); i++) { int v = s[u][i].first; int w = s[u][i].second; // 松弛操作 if (cnt[v] > cnt[u] + w) { cnt[v] = cnt[u] + w; pq.push(make_pair(cnt[v], v)); } } } } int main() { int n, m, t; while (cin >> n >> m >> t) { if (n == 0 && m == 0 && t == 0) { break; } for (int i = 1; i <= n; i++) { s[i].clear(); } for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; s[v].push_back(make_pair(u, w)); } dijkstra(t, n); int s; cin >> s; int time = INF; for (int i = 0; i < s; i++) { int kid; cin >> kid; if (cnt[kid] < time) { time = cnt[kid]; } } if (time == INF) { cout << "TAT" << endl; } else { cout << time << endl; } } return 0; } 这个代码的主要思路













