Questions tagged «unity»

Unity是一个跨平台的游戏创建系统,专注于简单的美术制作流程。它由游戏引擎和集成开发环境组成。游戏引擎的脚本基于Mono。

2
这两个代码中的哪个“更好”?制作局部变量还是类变量?
我制作了更多游戏,问了更多愚蠢的问题。 希望这一段很简短。我正在创建一个非常基本的类,该类通过向刚体施加力来移动Player对象,但这让我想知道,我应该对rb进行类引用还是对Update每帧进行局部引用?(请记住,它已经存在于Monobehaviour.GameObject统一父类中)。 我想知道是否做很多局部变量会减慢整个循环的速度(通过局部变量,我的意思是在函数本身内部,而不是在类的顶部,希望我使用正确的术语)。 这就是我想做的两种方式: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } 要么... public class Player : MonoBehaviour { Rigidbody rb; private void Awake() { rb = GetComponent<Rigidbody>(); } private void FixedUpdate() { …
11 unity  c#  game-loop 

2
如何进行延迟的鼠标输入?
我有一个赛车游戏,想法是玩家喝醉了。我希望鼠标有一个延迟的输入,您将鼠标左右移动来转动。 如何在用户提供的输入和汽车转弯量之间设置恒定的延迟? 现在我有这个: h = Mathf.Lerp(h, (((Input.mousePosition.x / Screen.width) * 2) - 1), Time.deltaTime * 2); 发生的情况是转弯被延迟了,但是非常慢,换句话说,如果我非常快地移动鼠标,汽车会非常缓慢地转弯,但是如果我将乘数提高到Time.deltaTime,汽车会转弯更快,但是延迟效果会最小化。 我还能怎么做?
11 unity  c#  input  mouse 

2
检查游戏对象的组件是否可以销毁
在Unity中开发游戏时,我正在大量使用[RequireComponent(typeof(%ComponentType%))]以确保组件满足所有依赖性。 我现在正在实现一个突出各种UI对象的教程系统。要进行突出显示,我要引用GameObject场景中的,然后使用Instantiate()克隆它,然后以递归的方式删除显示不需要的所有组件。问题在于,随着RequireComponent这些组件的广泛使用,许多组件无法简单地以任何顺序删除,因为它们由尚未删除的其他组件所依赖。 我的问题是:有没有一种方法可以确定是否Component可以将a 从GameObject当前连接的对象中删除。 我发布的代码在技术上可以正常工作,但是会引发Unity错误(如图所示,未在try-catch块中捕获) 这是代码: public void StripFunctionality(RectTransform rt) { if (rt == null) { return; } int componentCount = rt.gameObject.GetComponents<Component>().Length; int safety = 10; int allowedComponents = 0; while (componentCount > allowedComponents && safety > 0) { Debug.Log("ITERATION ON "+rt.gameObject.name); safety--; allowedComponents = 0; foreach (Component c in …
11 unity  c# 

2
如何自定义自动生成的脚本?
通过Unity编辑器创建脚本时,它会生成带有一些预格式化代码的脚本。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class GenericClass : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } 创建脚本时,通常可以保证使用其他代码,例如名称空间或自定义编辑器。此外,我几乎总是从自动生成的脚本中删除内容。有没有办法更改Unity生成的自动代码?
11 unity 

2
自上次git commit以来,如何以视觉方式查看对场景所做的更改
在将它们提交给git之前,我想查看在场景(.unity文件)中所做的更改。 我研究了几种GIT / Unity解决方案,但所有这些解决方案都是为了合并更改,而不是为了与上一版本显示差异。 场景文件的问题在于它们使用指向其他资产的GUID,而当我打开一个场景文件的差异时,我无法真正使用它进​​行任何处理。 例如: 相反,我想看到这样的东西: 有什么可以做到的吗?

3
如何使自然的雨滴落在屏幕上?
我试图通过金属球和屏幕上的雨痕使雨滴效果下降。我在阴影中找到了线索,但我不知道如何实现: https://www.shadertoy.com/view/ltffzl 不幸的是,它有很多数学计算,我不能统一使用它,因为它会产生滞后。显然我应该使用纹理,但是如何产生拖尾效果呢?! 我的想法是使用纹理和尾迹渲染器进行拖放,但是如何产生元弹效果? 更新资料 我可以通过本文实现Metaballs https://github.com/smkplus/RainFX/tree/master 但我还不知道线索

2
如何等待异步操作/协程?
我正在寻找一种通用/可重用的方法来等待协程和异步操作在Unity 5中完成,类​​似于C#5的await关键字。 我能想到的最简单的方法是这样的: public class SomeUtility { public bool IsDoingSomething { get; private set; } public IEnumerator DoSomethingAsync() { IsDoingSomething = true; yield return new WaitForSeconds(2); IsDoingSomething = false; } } 然后在另一个协程中: while(!someUtilityInstance.IsDoingSomething) yield return null; 但是,这不是很好,因为它会使while语句变得混乱,不可重用(即使是简单的实用程序功能,也需要实例和专用的类!)以及很多甚至不需要的单例或静态内容。 我发现最接近的是使用Unity的AsyncOperation。这在这里很好地工作: public static IEnumerator Await(this AsyncOperation operation) { while(!operation.isDone) yield return operation; } …

2
为动态障碍物和玩家造成的障碍寻找路径?
嗨,我正在Unity 5中创建TD,并且在寻路方面需要一些帮助。 我将为我的AI 使用Arons A *寻路,这使我能够使用动态对象并在运行时更新路径。但是,在我的游戏中,我希望玩家能够使用特殊的炮塔来阻挡小兵,这将迫使小兵攻击“障碍塔”而不是到达目的地。 我怎样才能完成这样的事情? 图片更清晰:
11 unity  c#  2d  ai  path-finding 

2
如何在Unity中使用BillboardRenderer?
从版本5(?)开始,Unity具有新的component-type BillboardRenderer。不幸的是,文档非常差。 可以通过单击“添加组件->杂项->广告牌渲染器”将其添加到检查器中,但是显然它需要Billboard Asset执行任何操作。似乎没有任何方法可以从Unity界面中创建一个。 BillboardAsset 同样糟糕的文档中的几句话之一是: imageCount 从不同角度查看广告牌时可以切换的预烘焙图像数。 我最新的项目将具有精灵/多边形混合图形,因此我可以真正利用某个组件,该组件根据视角呈现具有不同精灵的广告牌。但是似乎没有任何方法可以添加此类图像。 所以我想知道您是否可以举一个示例说明如何使用此组件。
11 unity 



2
填充宽度或高度的Unity UI正方形
我正在尝试创建一个具有以下要求的板: 它应该是正方形的。 它应适合可用的宽度或高度。 它应在画布中居中。 可以根据需要将其包装到尽可能多的其他中间画布中。 我在玩锚,但找不到任何组合。我能想到的唯一解决方案是为容器编写某种“ OnResize”脚本并以编程方式设置板子的大小。 这是原始布局。(1)是BoardCanvas。(2)是董事会。 我希望如果屏幕变高,正方形会增大,但仍然是正方形: 或减少: 但是,尽管前面的示例捕捉到了顶部和底部边缘,但我也希望如果垂直空间变得比可用宽度高,那么正方形将根据左右边界来限制其大小: Q1:有没有办法用锚/枢轴做到这一点?如果可行,我可以在BoardCanvas和Board本身之间创建中间画布。 Q2:如果是这样,我应该在哪里放置锚?我需要中间物体吗? 问题3:如果不是,编写脚本解决方案吗?画布上是否有任何要处理的OnResize?我在列表中看不到任何调整大小的事件,但也许我不知道在哪里寻找它。我觉得在每个帧上对其进行测试似乎有点过大,事件驱动似乎更好。 谢谢!

2
自动组织/智能库存系统?
在过去的一周中,我一直在使用Unity3D开发清单系统。最初,我在Design3的工作人员那里得到了帮助,但是直到我们分离路径才花了很短的时间,因为我真的不喜欢他们编写代码的方式,它完全没有OOP的味道。 我向前迈出了进一步的一步-物品占用多个插槽,先进的放置系统(物品会尽力找到最合适的位置),本地鼠标系统(鼠标被困在活动行李袋中)等。 这是我工作的演示。 我们希望在游戏中拥有一种自动组织功能-而不是自动排序。我们需要此功能,因为我们的库存将是“实时”的-不同于《生化危机1,2,3》等,您可以在其中暂停游戏并在库存中执行操作。现在想象一下,您的自我处于僵尸包围的稠密情况下,没有子弹,环顾四周,发现地面上附近有子弹,因此您去追捕它们并尝试将其捡起,但是它们却没有不适合!您查看您的库存,发现如果您重新组织一些物品,它将很合适!-现在的玩家-在那种情况下没有时间重组,因为他被僵尸包围了,如果他停下来并组织库存以腾出空间(实时记住库存,没有暂停),他会死掉的- 自动执行该操作会很好吗?-是的! (我相信这已经在《地牢围攻》之类的某些游戏中实现了,因此请确保它是可行的) 例如看这张照片: 是的,因此,如果您对问题进行自动排序,则会得到空格,但是这很糟糕,因为:1-昂贵:不需要完全排序操作即可释放这些空格,在第一张图片中,只需将红色项目滑到底部到最左边,您会得到与自动排序相同的空间。2-播放器很烦人:“ F告诉你重新订购我的东西吗?” 我不是在问“如何编写代码”,我只是在问一些指导,在哪里看,涉及什么算法?这和图和最短路径有关吗?我希望不要因为我没有设法继续我的大学学习而已:/即使是这样,只要告诉我,我就会学到相关的知识。 请注意,可能有不止一种解决方案。因此,我想我要做的第一件事就是弄清楚情况是否“可以解决”-如果我知道如何确定情况是否可以解决,那么我可以“解决”它。我只需要知道使其“可解决”的条件即可。而且我相信必须有一些算法/数据结构。 这是一张试图容纳1x3物品的多种解决方案的照片: 箭头仅显示一种解决方案,但是如果您看到的话,会发现多个解决方案。这就是我最终不自动排序而是找到解决方案并应用它的原因。 请注意,如果我花时间在上面,我会想出一种解决方法,但这并不是最好的方法,就像用脚而不是手握住车轮一样!XD或就像尝试解决需要数组的问题一样,但是您还不知道它们的存在!那么什么是正确的方法呢? 评论更新 @Stephen我真的不是Alogs中的专家,您提到了“背包”和@BlueRaja-Danny Pflughoeft提到了2D装箱算法。他们之间有某种联系/相同吗?-我仍然对应该如何处理感到困惑。 是的,我已经在使用“启发式”,但是我真的不知道我是:D它找到第一个可用的插槽,然后查看该项目是否适合该插槽。 我不知道是否可以根据商品的“体积”(我称为nSlotsRequired = nRowsReq * nColsRec)订购商品,因为例如您有一个2x2和1x4的商品,它们的体积相同,但是形状不同,对接下来的其余项目的处理方式会产生不同的影响。所以...:/ 我看了这个视频,我真的很喜欢完整的打包想法,但是我想知道如何处理它,因为库存是2D的。我什至不能确定垃圾箱的包装是这里的关键,因为,确实可以有一个以上的袋子,但是在我们的游戏中,它只能是一个袋子。因此,仅需在“一个”袋子中放入物品即可。因此,该视频中的示例(管道和总线)与我的问题并不完全匹配。还看了一些关于背包的事情,我没有看到“价值”与我的物品/库存有何关系,但我猜“重量”与体积大是一样的,不确定。

1
为什么Unity的OnCollisionEnter不能给我表面法线,最可靠的方法是什么?
Unity的on碰撞事件为您提供了Collision对象,该对象为您提供了有关发生的碰撞的一些信息(包括具有击中法线的ContactPoints列表)。 但是您不会得到的是所命中的对撞机的表面法线。这是说明的屏幕截图。红线来自ContactPoint.normal,蓝线来自RaycastHit.normal。 这是Unity隐藏信息以提供简化API的实例吗?还是标准的3D实时碰撞检测技术只是不收集这些信息? 对于问题的第二部分,确保碰撞产生表面法线的方法是一种肯定有效且相对有效的方法? 我知道射线投射可以为您提供表面法线,但似乎我需要针对所有场景进行多次射线投射才能做到这一点(也许接触点/法线组合在第一次投射时错过了对撞机,或者您可能需要对所有物体进行平均接触点的法线以获得最佳效果)。 我目前的方法: 备份Collision.contacts[0].point其正常命中 对播放正常的否定命中的光线float.MaxValue,Collision.collider 如果失败,请对非负法向重复步骤1和2。 如果失败,请尝试执行步骤1至3 Collision.contacts[1] 重复4,直到成功或直到所有接触点耗尽为止。 放弃,返回Vector3.zero。 这似乎可以捕获所有内容,但是所有这些射线广播都使我感到不安,并且我不确定如何在足够的情况下测试这种方法是否奏效。有没有更好的办法? 编辑 如果这确实是3D冲突的处理方式,那么在一般情况下为什么要概述为什么与Unity特有的东西一样受欢迎。

1
跨多个监视器呈现Unity
目前,我正试图统一在2个监视器上运行。我已经进行了一些研究,并且知道这是完全可能的。有一种解决方法,您基本上必须弄乱窗口大小才能统一在两个监视器上进行渲染。 我所做的是创建一个新的自定义屏幕分辨率,该分辨率采用了两台显示器的宽度,如下图所示,即3840 x 1080: 但是,当我去运行我的统一游戏exe时,该大小不可用。我所得到的是以下内容: 我的自定义尺寸应该在最底端,但不是。当我通过自己的exe来运行游戏时,是否有我未曾做过或错过的事情会统一使用我的自定义屏幕大小? 奇怪的是,在统一编辑器中,拾取了我的自定义屏幕尺寸,并且可以在游戏窗口中将其设置为: 从文件菜单构建和运行游戏时,我有忘记做的事情吗?有人曾经打败过这个问题吗?
11 unity  rendering 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.