【发布时间】:2015-10-02 13:45:04
【问题描述】:
我要在 Unity 中制作一个移动绘画游戏,我遇到了一个严重的问题:Unity 中的 Input 类是框架相关的。因此,我无法获得足够频繁的触摸位置以使我的应用程序顺利绘制;结果,我得到的只是背景上的点,彼此之间没有连接。
我尝试只连接在 Unity 中检测到的点,当然,我的结果只是用线连接的相同点。我在 Unity Editor 中以大约 180-200 fps 的速度进行了尝试,而在手机上以 30-50 fps 的速度看起来更糟。我希望我必须在 android studio 或 Xcode 中以某种方式获取触摸位置,然后才能在 Unity 编辑器的 C# 代码中使用它们。
我认为从 Unity 工具中使用 extern 是否正确,还是有另一种更简单的方法可以直接在 Unity 中使用?如果没有并且我是对的,有人可以给我一些指南/教程的链接如何做到这一点并将其与 Unity 集成吗?我从未在 Unity 之外工作过,也没有与它集成一些外部工具的经验。
注意:我试过 FixedUpdate 没有任何运气 - 我尝试获取位置变量的频率无关紧要,重要的是它们的更新频率;我也在 OnGUI 方法中尝试了 Event.current.mousePosition(in unity editor),但它也没有给我任何区别。
Upd:正如我已经说过的,我需要比 Input 类给我的位置更频繁地获得位置。更新不够快!这是我在没有连接点的情况下得到的。该图显示了 180-200 fps 的 mousePosition 检测频率。在手机上它甚至更慢!
更新:这是我的简化代码。
void Draw() //this method is invoked every frame
{
//some calculations of x and y based on Input variables
currentMousePosition = new Vector2( x, y); //current mouse position on sprite
if(currentMousePosition != previousMousePosition)
{
while(currentMousePosition != previousMousePosition)
{
mySprite.texture.SetPixels((int)previousMousePosition.x, (int)previousMousePosition.y, 3,3, myColorArray);
if (currentFrameMousePos.x > previousFrameMousePos.x)
previousFrameMousePos.x++;
if (currentFrameMousePos.x < previousFrameMousePos.x)
previousFrameMousePos.x--;
if (currentFrameMousePos.y > previousFrameMousePos.y)
previousFrameMousePos.y++;
if (currentFrameMousePos.y < previousFrameMousePos.y)
previousFrameMousePos.y--;
}
} else mySprite.texture.SetPixels((int)currentMousePosition.x, (int)currentMousePosition.y, 3,3, myColorArray);
previousMousePosition = currentMousePosition;
}
//mySprite.texture.Apply() is invoked independently in another place to improve performance
【问题讨论】:
-
据我所知,如果我以这种方式使用线条渲染器会损害手机性能,此外,如何将所有这些线条保存为一张图片?
-
能贴出你的相关代码吗?
-
@user3071284 我添加了代码。
-
你应该用线连接点,不要指望只能用点在屏幕上绘制,没有程序这样做
标签: c# android ios input unity3d