- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个函数,它可以在一段时间内慢慢精确地旋转 90 度。到目前为止一切正常,我只需要弄清楚如何让它围绕一个点旋转而不是围绕变换中心旋转。
protected bool _isRotating = false;
public IEnumerator RotateWithEasing(GameHelper.Axis axis, Vector3 isolatedAxisPoint, float inTime)
{
if(_isRotating)
{
yield break;
}
_isRotating = true;
var degrees = this.GetDegreesFromAxis(axis);
Quaternion fromAngle = transform.rotation;
Quaternion toAngle = Quaternion.Euler(transform.eulerAngles + degrees);
for (float t = 0f; t < 1f; t += Time.deltaTime / inTime)
{
transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);
yield return null;
}
_isRotating = false;
}
任何人都可以帮我指明正确的方向,我如何修改它以使其围绕指定的 isolatedAxisPoint 旋转?
最佳答案
这是一个 Unity 补间的实际示例,恰好在文本编辑器中显示另一个窗口!
如果您想旋转某些东西,只需在 IEnumerator 的循环中使用 deltaTime 并调整 eulerAngles 或调用 Rotate 即可。 (永远不要在 Unity 中出于任何原因使用四元数。)在这个例子中,我只调用 Rotate。
这是 Unity 中的一个非常基本的模式。
这是 Unity 中的补间的基本模式。您将在 Unity 中执行此操作 1000 次!
请注意,当然是你
yield return null;
在循环内部,意思是“等到下一帧”。
(请注意,与任何补间一样,最好在最后强制设置最终值,这样您就知道它是完美的。请注意,在此示例中,我只是在最后设置了 eulerAngles当循环结束时。)
private IEnumerator _roll( Vector3 delta )
{
rollBegins.Invoke();
Vector3 begin = transform.eulerAngles;
float rollSecs = 2f; // speed of the roll
float startTime = Time.time;
float endTime = startTime+rollSecs;
while (Time.time < endTime)
{
Vector3 d = delta * ( Time.deltaTime / rollSecs );
transform.Rotate(d, Space.World );
yield return null;
}
transform.eulerAngles = .. perfectly correct end values;
busy = false;
rollComplete.Invoke();
}
{请注意,在该实际代码示例中,“delta”被理解为仅在一个轴上;不用担心,这只是一个使用协程的补间示例。
注意 - 当然有“两种方式”进入循环。您可以计算少量您应该在该帧中移动它。或者,您可以只计算当时的新位置。由你决定。许多程序员认为后者更合乎逻辑,如果是这样,就那样做。另请注意,您可以执行 while 循环直到特定时间过去,或者,您可以执行 while 循环直到到达目的地! (要非常小心 float 相等性。)选择权在你。
请注意,您经常对此类补间使用 Lerp 或更好的 SmoothStep。它在 Unity 中无处不在。一旦掌握了基本模式,就可以进行试验。
请注意,在我的示例中,代码使用 UnityEvent 来标记动画的开始和结束。这是非常普遍的。毕竟通常情况下,一旦某个 Action 完成,您就必须继续做其他事情。另一个很好的例子是,当某些东西正在动画时,用户被阻止说转向或游戏中的任何情况。
UnityEvent 的精彩介绍 https://stackoverflow.com/a/36249404/294884请投票:)
备案。
Unity 中真正先进的补间方式是补间:
Basic Tweeng code base appears in this question.
掌握它需要一段时间,但它非常强大。令人难以置信的是,tweeng 扩展只有几行代码。
关于c# - Unity3d 随时间围绕特定点旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37212184/
在撰写本文时,Unity 有一个名为 Unity LTS 2017.4.12f1 的版本,Unity 的最新版本是 2018.2.11 我知道 Unity LTS 应该是稳定版本,但这是否意味着 Un
我需要 Unity 来捕获所有按键,即使 Unity 没有焦点。 我尝试过使用: Input.KeyPress() 但这似乎只有在 Unity 拥有用户输入焦点的情况下才有效。我需要它在没有焦点时工作
我正在尝试统一实现一个TCP服务器。我正在使用 unity pro 3.5,当我在场景中运行此代码时,unity 挂起,完全没有响应,直到我用任务管理器杀死它。 using UnityEngine;
我想问一下,使用新的unity ads 2.0与unity ads相比,收入有什么区别 Unity Ads Unity Ads 2.0 最佳答案 Unity 广告支持 Unity 4.2.2 或更高版
当我运行我的应用程序时,我希望 Unity 打开两个窗口。 window 将有不同的摄像头,但两者都会看到同一个世界。 这样的事情可能吗? (我还没有找到任何证据表明这一点) 我知道我可以通过两个 U
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我今天已将我的项目升级到 Prism 6.3.0 和 Unity 5.3.1。在此之前,我有 Prism 5 和 Unity 4。 现在我遇到了 Prism.Unity.UnityBootstrapp
Unity 中是否有与 StructureMap 中的 Registry 类等效的内容? 我喜欢考虑一个层/组件/库来自行配置它 - 从而填充容器。所以“父”层只需要知道注册类。 最佳答案 不,没有。
我似乎无法在任何地方找到 Microsoft.Practices.Unity.StaticFactory.dll。 还有其他注册静态工厂的方法吗? 寻找这样的东西 container.Register
是否可以统一尝试所有已定义的构造函数,从参数最多的构造函数到最不具体的构造函数(默认构造函数)? 编辑 我的意思是说: foreach (var constructor in concrete.Get
我有一个正在运行且运行良好的 Unity 应用程序,但我们目前正在通过对所有编译警告采取行动来清理我们的代码。 由于过时的 Microsoft.Practices.Unity.Configuratio
我正在使用 Visual Studio Code 在 Unity 中编写脚本。在“编辑”-“首选项”-“外部工具”-“外部脚本编辑器”下,我也选择了 VS Code。 打开脚本工作正常,但是当我尝试通
因此,我很确定这不是提出此类问题的正确论坛,因此我非常感谢有人将我链接到针对此问题的更好论坛(如果需要)。 我的问题: 在 Unity Hub 中,我进行了设置,以便 Unity 编辑器应下载到我的硬
问题:即使在 Cardboard 相机范围内,我也无法在任何地方看到我的 UI 文本。 截图: 我使用的是Unity 5.4.0b21版本,有人说可以通过降级到Unity 5.3版本来修复。 但是,我
我正在开发一个 Unity 项目,我正在使用 Google VR SDK for Unity 和 FirebaseMessaging.unitypackage 适用于 Unity 的 Firebase
好吧,在谷歌、这里和几个 ASP/MVC 论坛上搜索之后,我一定要问我到底做错了什么。 我的应用程序有一个良好的开端,对 DI、IoC 有很好的理解,并且正在使用 Repository、Service
我们最近将项目中的 Microsoft Unity 从 3.5.1404 版本升级到 5.8.6。在我们的代码中只做了一些小的调整,这次升级似乎很容易。它毫无问题地解决了我们所有注册的实例。但是,我们
我正在弄清楚使用 Unity 应用程序 block 时的意外行为。我有项目 A 作为我的启动项目。 项目 A 具有对项目 B 的项目引用,而项目 B 具有对项目 C 的项目引用。 项目 A 使用 un
我将 Unity 与 MVC 和 NHibernate 结合使用。不幸的是,我们的 UnitOfWork 驻留在不同的 .dll 中,并且它没有默认的空 .ctor。这是我注册 NHibernate
我是一名优秀的程序员,十分优秀!