C# 布尔变量don';unity 3d中的t变化
我试图在unity中制作一个类似轰炸机的游戏,同时学习c# 我试图在代码中更改targetDestroyed1 var的bool值,但似乎存在问题 问题是: 在GetNearestTaggedObject1中,当创建对象时,targetDestroyed1变为true。但是在instanceFile()的if(!targetDestroyed1)条件中,targetDestroyed1始终保持为false,并且实例化将继续而不是停止 这是我的密码:C# 布尔变量don';unity 3d中的t变化,c#,boolean,unity3d,C#,Boolean,Unity3d,我试图在unity中制作一个类似轰炸机的游戏,同时学习c# 我试图在代码中更改targetDestroyed1 var的bool值,但似乎存在问题 问题是: 在GetNearestTaggedObject1中,当创建对象时,targetDestroyed1变为true。但是在instanceFile()的if(!targetDestroyed1)条件中,targetDestroyed1始终保持为false,并且实例化将继续而不是停止 这是我的密码: private bool targetDest
private bool targetDestroyed1;
void Start (){
OriginXplosion = new Vector3(transform.position.x, transform.position.y, transform.position.z);
InstantiateFire();
}
void Update (){
if (target1 != null) {
Destroy (target1);
}
public void InstantiateFire (){
FireRate = player_actions.FireRate;
FireRate -= 1;
targetDestroyed1 = false;
for(int i1= 0; i1 <= FireRate; i1++){
float i1_axeZ= transform.position.z + i1;
if(i1_axeZ <= 7)
{
if (!targetDestroyed1)
{
Instantiate (ParticulesFeu, Axe1[i1].transform.position, ParticulesFeu.transform.rotation);
ScanForTarget1();
}
}
}
Destroy (gameObject);
}
void ScanForTarget1 (){
target1 = GetNearestTaggedObject1();
}
GameObject GetNearestTaggedObject1 (){
float nearestDistanceSqr= 0.2f;
GameObject[] taggedGameObjects= GameObject.FindGameObjectsWithTag(searchTag);
foreach(GameObject obj in taggedGameObjects) {
Vector3 objectPos= obj.transform.position;
float distanceSqr= (objectPos - transform.position).sqrMagnitude;
if (distanceSqr < nearestDistanceSqr) {
target1 = obj;
targetDestroyed1 = true;
nearestDistanceSqr = distanceSqr;
}
}
return target1;
}
}
private bool targetDestroyed1;
无效开始(){
originexplosion=新矢量3(transform.position.x,transform.position.y,transform.position.z);
实例化文件();
}
无效更新(){
如果(target1!=null){
摧毁(target1);
}
公共void实例化文件(){
FireRate=玩家的动作。FireRate;
燃速-=1;
targetDestroyed1=假;
对于(int i1=0;i1请查看您的实例化fire
方法:
public void InstantiateFire (){
FireRate = player_actions.FireRate;
FireRate -= 1;
targetDestroyed1 = false;
...
您在第三行将targetDestroyed1
显式设置为false
。因此,在循环的第一次迭代中它将始终为false。这意味着您可以调用实例化
和扫描目标1
,具体取决于i1_axeZ
和其他变量的值
如果变量设置在GetNearestTaggedObject1
中,那么在实例化文件
中循环的下一次迭代中,它实际上将保持设置为true
——但是在它产生任何效果之前,您需要再次进入If
块。您应该尝试在调试器中单步执行或添加更多日志,以查看发生了什么发生了什么。从根本上说,恐怕你的代码目前相当混乱
除此之外,我强烈建议您创建一个适当的类来封装目标以及目标是否被破坏……然后创建该类型的列表:
private readonly List<Target> targets = new List<Target>();
private readonly List targets=new List();
这样,您就不必有八个单独的变量,每个变量都由不同的代码操作。您使用的targetDestroyed1
看起来不错。您是否确保if(distanceSqr
实际上正在启动?我认为这很好。他的问题是他希望在for
循环中的某个点将其设置为true
(通过ScanForTarget1()
GetNearestTaggedObject1()
是,但是如果我在start()中设置此变量),或在声明private bool targetDestroyed1=false;中,我有相同的issue@Malakiof:不清楚您的意思。老实说,您的代码目前非常混乱。您的缩进到处都是,这对您没有帮助。@Ergwun:我明白您的意思-但我们目前确实没有足够的其他证据继续下去。Wil我编辑了这个答案。@JonSkeet是的。我认为他需要一步一步地找出他预期的开火条件实际上并没有开火。