产生错误的代码: void Update() { if (Input.touchCount > 0) { RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero); if (hit && hit.collider != null && hit.collider.name == "leftTapArea") { hit.transform.name = "Hit"; } } } 它说这个string有什么问题: RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position),Vector2.zero); 错误: NullReferenceException:未将对象引用设置为对象的实例leftScript.Update()(位于Assets / leftScript.cs:16处)
我怎样才能将分数值从一个场景传递给另一个场景? 我已经尝试了以下内容: 场景一: void Start () { score = 0; updateScoreView (); StartCoroutine (DelayLoadlevel(20)); } public void updateScoreView(){ score_text.text = "The Score: "+ score; } public void AddNewScore(int NewscoreValue){ score = score + NewscoreValue; updateScoreView (); } IEnumerator DelayLoadlevel(float seconds){ yield return new WaitForSeconds(10); secondsLeft = seconds; loadingStart = true; do { yield return new […]
在我的脚本中,当玩家在平台的顶部时,我会这样做。 这工作正常。 但是现在我想让它一旦起来,就播放剪辑“Down”。 using UnityEngine; using System.Collections; using System.Reflection; public class DetectPlayer : MonoBehaviour { GameObject target; public void ClearLog() { var assembly = Assembly.GetAssembly(typeof(UnityEditor.ActiveEditorTracker)); var type = assembly.GetType("UnityEditorInternal.LogEntries"); var method = type.GetMethod("Clear"); method.Invoke(new object(), null); } void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Platform") { Debug.Log("Touching Platform"); } } void OnTriggerEnter(Collider other) { if […]
为了检查碰撞的目的,我试图做一个球形的射线爆发,但是根据每个射线在什么地方或什么地方击中了具体的相互作用。 因此,我为什么使用光线,而不是像OverlapSphere这样简单的东西。 我正在寻找如何制作一个球体的原因是因为我可以对我的光线使用相同的math,让它们到达球体所在的顶点。 但是我所能find的制造球体的方法都是靠近极点,这很有意义,因为它很容易做到。 但是,正如你可以想象的那样,它对我目前的项目没有什么用处。 TL; DR:如何制作等距顶点的球体? 如果它不是完全等距的话,它只需要非常接近。 如果发生这种情况,那么如果可以给出多less区别,以及在哪里适用,那将是非常好的。 额外的笔记:我已经看过这个和这个 ,但math已经超出了我的头,所以我一直在寻找的东西可能会一直在我面前凝视着我。
我通过代码创build了一个切换,但不会显示。 而且,我不能改变我的文本字段的位置。 我尝试了很多,没有任何工作。 这是我现在的版本,也许你看到了错误。 我对Unity很陌生,这非常困难。 public class Game : MonoBehaviour { public GameObject canvas; void Start () { GameObject newGO = new GameObject("myTextGO"); newGO.transform.SetParent(this.transform); newGO.transform.position = new Vector3(0, 0, 0); Text myText = newGO.AddComponent<Text>(); myText.text = "Ta-dah!"; Font ArialFont = (Font)Resources.GetBuiltinResource(typeof(Font),"Arial.ttf"); myText.font = ArialFont; myText.material = ArialFont.material; myText.color = Color.black; myText.transform.position = new Vector3(0, 10, […]
在Unity 3D中使用Git源代码控制的最佳实践是什么,特别是在处理Unity 3D项目的二进制本质时? 请描述工作stream程,在.gitignore中包含哪些path,应该在Unity和/或项目中设置什么设置,以及其他需要注意的特殊事项。 注:我意识到使用资产服务器是Unity推荐的方式,但是我想使用Git有各种各样的原因。 请不要回答那个状态或者说我应该只使用资产服务器。 资产服务器真的不适合我。
我一直在保存和加载在Unity中保存一个序列化的类到一个文件。 我有一个Serializable类: [Serializable] class Save { public List<int> ID = new List<int>(); public List<int> Amounts = new List<int>(); } 并将其保存到文件A – 确定。 我可以加载它没有错误,但如果我想以后添加: [Serializable] class Save { public List<int> ID = new List<int>(); public List<int> Amounts = new List<int>(); public int extra = 0; } 我运行我的脚本它给了我一个反序列化错误,我完全理解,因为当我把反序列化的文件到我的新类“保存”我添加的新variables不存在,它给了我错误。 我在修复商店中的资产时发现了这个错误,我知道一个修正可能只是更改文件名,以便创build一个新文件,但是我不只是想擦掉以前保存的内容。 所以我的问题是,如果我想添加更多的variables到我的序列化的类,如果人们更新资产,我会如何捕获和调整旧版本的? 谢谢!
Unity的Raycastfunction有一个参数可以用来对特定的GameObject进行光线投射。 您也可以使用该参数来忽略特定的GameObject。 例如Raycastfunction: public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal); layerMask参数用于指定哪些对象应该/不应该接收光线投射。 1 ,你如何对一个名为“cube”的图层进行光线投射? 2,如果你在场景中有10个 GameObjects,但是你只想对2个 GameObjects进行光线投射而忽略其余部分? 你如何做到这一点? 假设这些对象的图层是“立方体”和“球体”。 3,如果你想对所有 GameObjects进行光线投射,但忽略1。 假设要忽略的GameObject位于“多维数据集”层中。 4,如果您想对所有 GameObjects进行光线投射,但忽略2(多个)GameObjects。 同样,要忽略的层是“立方体”和“球体”层。
在Unity中,创build一个单例游戏pipe理器的好方法是什么,它可以作为一个全局类来访问,这个静态variables会向每个拉动这些值的类都吐出相同的常量值? 那么在Unity中实现它的方法是什么? 我必须把它附加到一个游戏对象? 它可以只是在一个文件夹中,而不是在视觉上在场景中?
我想在Unity3d中为Vector3类做一个扩展方法。 但我似乎不太明白。 这是我的: public static class ExtensionMethods{ public static Vector3 MaxValue(this Vector3 _vec3) { return new Vector3(float.MaxValue,float.MaxValue,float.MaxValue); } } 现在我想使用Vector3.MaxValue这个代码行来创build一个Vector3.MaxValue : Vector3 closestPoint = Vector3.MaxValue; 但是,然后我得到这个错误: error CS0117: `UnityEngine.Vector3' does not contain a definition for `MaxValue' 我知道这将工作: Vector3 closestPoint = new Vector3().MaxValue(); 但是,我创build了2个新的Vector3实例。 一个在MaxValue调用,一个在外面。 是不是可以做一个这样的代码: Vector3 closestPoint = Vector3.MaxValue;