Tag: unity5

当GameObject遇到触发器时,在Unity控制台中打印消息? Unity5 / 2D

我正在为学校做一个“游戏”,我需要统计选票。 我正在使用Unity来让按钮上的字符跳转以计算投票数并继续下一个问题。 这是我到目前为止: using UnityEngine; using System.Collections; public class Vote1 : MonoBehaviour { private int vote1; public GameObject hero_1; void Start () { vote1 = 0; } void Update () { } void OnCollisionEnter2D(Collision2D coll) { if (coll.gameObject.tag == “PlayerObject”){ vote1 = vote1 + 1; print(“One Vote Added”); } } } 当“hero_1”站在按钮上并且在控制台中显示消息“One Vote Added”时, 应该添加+1,但这不是正在发生的事情。 […]

Unity中的c#中的属性(Unity5) – 可以避免支持变量

使用Unity5(很难确切知道正在使用的c#/ Mono / .Net的版本),我们的属性完全如下: private int _distance; public int Distance { private set { _distance = value; controls.Blahblah(_distance); } get { Debug.Log(“hah!); return _distance; } } 但考虑一下c#中的新“自动属性” ,它们似乎就像 public int Distance {get; set;} // ? 但我不知道如何在getter / setter中“做点什么”? 或者换句话说,当“手动”制作一个属性时,有没有办法自动生成支持变量(以及方便 – 保持私有)? 要重复,因为这被标记为重复,我怎么能在getter / setter期间在自动Property idiom中“做东西”…… ……或相反…… 如果您编写自己的“手动”属性,如何隐藏,摆脱或自动供应支持者? 请注意,当然您或其他程序员可能会意外触摸_underscore支持变量: 是否有任何方法可以避免这种情况?

碰撞后正确附加到GameObject?

如何在碰撞后正确地将GameObject附加(或“粘贴”)到另一个GameObject? 问题:我希望GameObject在碰撞后附加,即使它正在改变比例。 “附上碰撞”代码: protected Transform stuckTo = null; protected Vector3 offset = Vector3.zero; public void LateUpdate() { if (stuckTo != null) transform.position = stuckTo.position – offset; } void OnCollisionEnter(Collision col) { rb = GetComponent(); rb.isKinematic = true; if(stuckTo == null || stuckTo != col.gameObject.transform) offset = col.gameObject.transform.position – transform.position; stuckTo = col.gameObject.transform; } 此代码使GameObject在碰撞后完美连接。 但是当GameObject改变比例(当它附着时)时,它在视觉上不再看起来与它碰撞的任何东西相关联。 […]

Unity无法设置ActiveScene

我正在切换场景: SceneManager.LoadScene(“Scene2”); Debug.Log(“Current scene: ” + SceneManager.GetActiveScene().name); 调试说: Current scene: Scene1 我也试过这个: SceneManager.LoadScene(“Scene2”); StartCoroutine(WaitUntilEndOfFrame()); Debug.Log(“Current scene: ” + SceneManager.GetActiveScene().name); private IEnumerator WaitUntilEndOfFrame() { yield return new WaitForEndOfFrame(); } 仍然说 Current scene: Scene1. 我试过SetActiveScene(SceneManager.GetSceneByBuildId(1)); 我已经尝试将其作为协程启动,我已经尝试过并等待5秒钟。 仍然是ActiveScene是Scene1,即使Unity中的场景发生了变化。 什么都没有改变活动场景……

Unity private唤醒更新和启动方法如何工作?

Unity如何调用场景背后的Awake,Update和Start方法? 他们没有访问修饰符表示它们是私有方法,并且它们不使用new或override之类的东西,那么Unity框架如何找到调用它们的方法? 在一个相关的问题上,是否有任何特殊原因没有使用虚拟方法? 编辑:对于那些不熟悉Unity脚本的人来说,这是他们通常出现的方式: public class MyClass : MonoBehaviour{ void Start(){ } void Awake(){ } void Update(){ } } 我不明白的是框架如何找到并自动调用每个脚本的那些方法,从各方面看,它们看起来只是私有方法

aafdex-sdk unity3d在场景转换时崩溃 – 仅限于Android

我一直在使用Affectiva的affdex-sdk(v2.2)为Unity 5.4开发一个情感识别应用程序。 我的应用程序包含3个场景,然后我使用affectiva的Camera_Detector场景,并使用情感作为触发器转到下一个场景。 它在UnityEditor中完美运行,并作为Windows编译包(x86)运行。 但是,当我将其部署到Android(5.0)时,崩溃始终在运行时从Camera_Detector场景跳到下一个场景(场景加载到Camera_Detector之前,而Camera_Detector本身永远不会崩溃)。 我正在使用(在C#中) SceneManager.LoadScene(“nextscene”); Android设备只显示“不幸的是,affdex_emotapp”已经停止。 有没有机会让这个在Android下工作? 这是logcat的崩溃输出: F/libc (15037): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x898f0308 in tid 15053 (UnityMain) I/DEBUG ( 247): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG ( 247): Build fingerprint: samsung/matissevewifixx/matissevewifi:5.1.1/LMY47X/T533XXU1BOI3:user/release-keys’ I/DEBUG ( 247): Revision: ‘2’ […]

纹理在编辑器中加载但不在独立中加载(显示为粉红色)

我正在使用名为Simple Obj的资产,它允许我导入obj,它们的材质和纹理相关联 。 这在我的编辑器中工作正常,但不在我的独立版中。 我的OBJ不在我的资源文件中 ,我从另一个使用WWW方法的文件中获取它。 这是我如何做到这一点, 他下载我的OBJ,创建一个Gameobject并将其放在我的场景中 : private IEnumerator DownloadAndImportAllInBackground(string url, Plane newPlane) { string objString = null; string mtlString = null; Hashtable textures = null; GameObject planeObject = null; bool gameObjectPerGroup = false; bool subMeshPerGroup = false; bool usesRightHanded = true; yield return StartCoroutine(DownloadFile(url, retval => objString = retval)); yield return StartCoroutine(DownloadFile(url.Substring(0, […]

Unity:需要在返回池时重置池化对象。 也许使用ScriptableObject?

我最近一直在尝试统一对象池,以便一次加速几个游戏对象的实例化。 但是,由于这些是相当复杂的对象,我需要在它们返回池中时重置它们。 我读到使用ScriptableObject可能是存储默认值以便轻松重置的好方法。 但为了做到这一点,我需要在运行时加载一个新的ScriptableObject来存储对象的实际值。 所以在伪代码中,我有一个带有public MyScriptableData data和public MyScriptableData defaults 1)使用默认的ScriptableObject data = defaults;创建新的池化对象data = defaults; ; 2)在对象的生命周期内做更改脚本对象值的东西 3)取消激活,然后将池化对象返回池,将scriptableObject重置为其默认值( data = defaults;再次)。 我有3个主要问题: A)我不确定如何实际实现这一点。 在我看来,在步骤2中,默认值将被更改。 因此,重置为默认值将不起作用。 我考虑使用创建我的脚本对象的新实例 data = ScriptableObject.CreateInstance(); 但是,我将如何从默认值中复制默认值,确保永远不会更改默认值? 我希望默认值可以在Unity编辑器中作为资产进行编辑。 B)如果我使用CreateInstance,性能会不好? 我正在做这个对象池的全部原因是为了降低对象实例化的性能成本。 我不想通过实例化脚本化对象来重新引入慢速代码。 C)这种方法好吗? 还是有更好的方法在返回池之前重置对象? 编辑基于一些答案:我已经有一个具有很长字段列表的设置,然后将这些字段的默认值存储在字典中。 但我发现每次我想添加/更改/删除字段时,我都必须在几个位置更改代码 ATTEMPTED SOLUTION(但错误,见下文):我为ScriptableObject创建了一个扩展方法: using UnityEngine; using System.Reflection; public static class ScriptableObjectExtension { public static T ShallowCopy (this T […]

Debug.DrawLine没有显示在GameView中

我正在研究2D Unity应用程序,我遇到了一些奇怪的行为。 这段代码工作得很好。 Debug.DrawLine(button1.transform.position, button2.transform.position, Color.green); 当我运行应用程序时,我在“场景”视图中看到一条绿线。 但是当我有以下行时,游戏视图中没有任何内容。 Physics2D.Linecast(button1.transform.position, button2.transform.position); 我很困惑Unity如何在这两个按钮之间画一条线,但由于某种原因,它只是在游戏视图中没有这样做。 知道我怎么解决这个问题吗?

在背景中加载新场景

我正在创建一个针对Samsung Gear VR的Unity应用程序。 我目前有两个场景: 最初的一幕 第二个场景,数据量很大(加载场景需要太多时间)。 从第一个场景开始,我想在后台加载第二个场景,并在加载后切换到它。 当新场景在后台加载时,用户应该保持移动头部以查看VR环境的任何部分的能力。 我正在使用SceneManager.LoadSceneAsync但它无法正常工作: // … StartCoroutiune(loadScene()); // … IEnumerator loadScene(){ AsyncOperation async = SceneManager.LoadAsyncScene(“Scene”, LoadSceneMode.Single); async.allowSceneActivation = false; while(async.progress < 0.9f){ progressText.text = async.progress+""; } while(!async.isDone){ yield return null; } async.allowSceneActivation = true; } 使用该代码,场景永远不会改变。 我试过这个典型的SceneManager.LoadScene(“name”)在这种情况下30秒后场景会正确改变。