我要在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(在统一编辑器中),但它也没有给我带来任何区别。
更新:正如我已经说过的,我需要比输入类给我更频繁地获得位置。它的更新速度不够快!这是我得到的,没有连接点。图像显示mousePosition检测频率为180-200 fps。在手机上它甚至更慢!
更新:这是我的简化代码。
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
答案 0 :(得分:3)
问题是,不可能排队发生在帧中间的触摸位置,所以&#34;快速&#34;滑动手指,您将错过图像上的某些纹素。你应该看看这一行公式Bresenham's line algorithm。这是超快的,所有整数数学。在Update()函数内部调用此方法。
Vector2 oldPoint;
public void UpdateDrawPoint(Vector2 newPoint){
BresenhamLine(newPoint, oldPoint);
oldPoint = newPoint;
}