Tag: unity3d

使用SceneManager检查当前场景名称

所以我决定将我的游戏分成不同的场景(主菜单,游戏等)。我试图在我的代码中使用if语句来检查当前场景是否是“gameover”所以我可以执行一些动作。 我知道Unity现在使用SceneManager而不是Application,但是这个function相当于什么 if(Application.loadedLevelName == “gameover”) 我已经尝试过SceneManager.GetActiveScene == “gameover”但是我只是得到错误就像不能使用==这里。 我已经导入了SceneManager

创建对话框/弹出窗口

有这样的代码 bool b = EditorUtility.DisplayDialog(“Test”, “Reset or continue?”, “Reset”, “Continue”); if (b) { ResetGame(); } 但它只适用于编辑器,而不适用于游戏。 如何用适用于游戏的东西替换EditorUtility.DisplayDialog?

来回旋转GameObject

我想在Y轴上在90,-90之间来回旋转对象。 问题是我可以在-90中设置编辑器中的对象,但是当我运行项目时-90突然变为270.无论如何这里是我正在使用的代码: void Update() { if (transform.eulerAngles.y >= 270) { transform.Rotate(Vector3.up * speed * Time.deltaTime); } else if (transform.eulerAngles.y <= 90) { transform.Rotate(Vector3.up * -speed * Time.deltaTime); } } 它总是在360度左右卡在中间。 救命?

UI预制件在canvas下方实例化

我正在尝试复制塞尔达卫生系统。 代码看起来很好,工作正常。 但心脏容器放错了。 它们在canvas下面实例化。 这是重要的代码,心脏容器是正确的,只是处于错误的位置。 x和y的计算是正确的,但在canvas上却没有。 private Transform healthBar = GameObject.FindGameObjectWithTag(“HealthController”).transform; // container for the heartContainers private GameObject healthWrapperObject = Resources.Load(“HealthContainer”) as GameObject; // the backgroundImage and parent of the heart private List healthContainers = new List(); // list of hearts for later usages private int maxHealth = 6; private int currentHealth; private int healthPerHealthContainer […]

在具有多个碰撞器的GameObject上找到与碰撞有关的两个碰撞器

总结以下内容:我想从OnTriggerEnter2D事件中找到碰撞中涉及的两个碰撞器。 我怎样才能做到这一点? 我有两个游戏对象。 两者都有对撞机和扳机。 在对象A上,它被触发器包围。 在对象B上,触发器仅包围某个部分。 当对象A的触发器触及对象B的任何对撞机(触发与否)时:我希望对象B失去健康。 反之亦然。 然而,当对象A的触发器接触对象B的对撞机(而不是触发器)时,两个对象都会失去健康。 我在控制台中得到了这个 Object A hit Object B Object B hit Object A 我得出结论,对象A的触发器在对象B上调用Ontrigger2d事件。 我认为解决这个问题的最佳方法是找到哪个碰撞器’找到’碰撞,并依赖于此:忽略碰撞.. 如何找到碰撞中发现的触发器? [也发布在Unity论坛上] 编辑:代码 private void OnTriggerEnter2D(Collider2D collision) { Consumeable con = collision.GetComponentInParent(); if (con != null && con.gameObject != gameObject) { Debug.Log(gameObject.name + ” hit ” + con.gameObject.name); con.Damage(1); } }

仅检测碰撞/碰撞一次

我有一个物体向另一个物体移动并与物体碰撞,我希望碰撞/碰撞事件只发生一次。 我尝试使用bool但它没有按预期工作。 看来我做错了什么。 bool doDamage = true; void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag == “Target” && doDamage) { doDamage = false; // damage code } } void OnCollisionExit2D(Collision2D other) { if (other.gameObject.tag == “Target”) { doDamage = true; } } 编辑: 我希望“损坏代码”只运行一次,即使这2个对象仍在接触。 此脚本仅分配给1个对象,而不是两个。

如何从Unity重命名Firebase中的节点

我在我的应用中使用Firebase-Unity beta工具来获取实时数据。 我想更改树中的节点名称而不覆盖其子节点。 例如: IFirebase firebase; firebase = Firebase.CreateNew (“https://test1.firebaseio.com/someChild”); firebase_Rank.Child(“ChilOne”).SetValue(1); firebase_Rank.Child(“ChilTwo”).SetValue(2); firebase_Rank.Child(“ChilThree”).SetValue(3); 在这种树中,可以更改“ChildOne”的名称而不覆盖它的值。

从代码创建材料并将其分配给对象

我是Unity3d的新手,我有一个包含6个四边形的预制件,使它成为一个立方体。我想将图像纹理添加到立方体的不同面上。 我从webservice获取图像所以,我必须在脚本中添加或更改材料。 我面临的问题是,我无法在gameObject中找到材料属性。 我试过下面的代码: using UnityEngine; using System.Collections; public class shelfRuntime : MonoBehaviour { public GameObject bottle; public GameObject newBottle; // Use this for initialization void Start () { iterateChildren(newBottle.transform.root); GameObject rocketClone = (GameObject)Instantiate(bottle, bottle.transform.position, bottle.transform.rotation); rocketClone.transform.localScale += new Vector3(1, 1, 1); GameObject newBottleInMaking = (GameObject)Instantiate(newBottle, newBottle.transform.position, newBottle.transform.rotation); Transform[] allChildren = newBottleInMaking.GetComponentsInChildren(); foreach (Transform child […]

下载大文件

通过使用UnityEngine.WWW下载文件,我收到错误 OverflowException:Number overflow。 我发现错误是由结构本身引起的,因为字节数组的字节数多于int.MaxValue可以分配(~2GB)。 通过使用www.bytes返回数组来触发错误,这意味着框架可能以其他方式存储数组。 如何以其他方式访问下载的数据,还是有更大的文件替代? public IEnumerator downloadFile() { WWW www = new WWW(filesource); while(!www.isDone) { progress = www.progress; yield return null; } if(string.IsNullOrEmpty(www.error)) { data = www.bytes; // <- Errormessage fired here } }

如何忽略对象之间的碰撞

我写了一个脚本,使用ontriggerenter找到一个炮弹在2D游戏中击中另一艘船的时间。 private void OnTriggerEnter(Collider other) { if (other.tag != “cannonBallWASD” ) { return; } Destroy(other.gameObject); Destroy(gameObject); Debug.Log(other); } 2.使用WASD(ShipWASD)控制的船舶在使用箭头键(ShipArrows)控制的第二艘船上发射炮弹(cannonballWASD)。 此代码位于附加到ShipArrows的脚本上。 3.我有一个单独的代码,使用一个没有网格渲染器(边界)的立方体,它会破坏任何离开边界的炮弹,看起来它们正落入大海。 这是一场双人游戏。 4.这就是问题所在 – 所以边界随船一起移动,它是ShipArrows的一个孩子。 当我发射大炮时,炮弹击中边界而不是舰船对撞机。 当我移除边界时,它应该击中船,但边界是我想要的。 5.边界和船舶都有并且需要是触发器碰撞器。 有没有办法忽略此脚本中的边界,但不能在以下脚本中忽略它。 private void OnTriggerExit(Collider other) { if(other.tag != “cannonBallWASD” && other.tag != “cannonBallArrows”) { return; } Destroy(other.gameObject); } 这个脚本使ShipArrows cannonBalls在离开ShipArrows Boundary时通过摧毁它们看起来像是在海中坠落。 (两艘船都这样做。)