在上面的短片中,您将看到我在 Unity 中进行了相当少的设置。有一个计数器每帧递增(在更新中),旁边是这个调用“UnityEditor.SceneView.RepaintAll()”。您可以看到输出到控制台框的计数器。
一旦我进入游戏视图并单击左下角的按钮(突出显示的按钮按下),它就会调用一个脚本,该脚本在运行时将网格导入到场景中并进行渲染。您会注意到计数器和重绘调用在此期间冻结,尽管时间很短,但非常明显。实际上,场景中的所有内容在此加载时间内都会冻结。
我一直在谷歌搜索如何刷新 Unity 的场景,这样我就可以在运行时加载网格,同时保持玩家的响应能力。到目前为止,什么都没有。
定期刷新/更新场景以便玩家不会受到加载时间游戏暂停的影响的最佳实践是什么?
编辑: RepaintAll() 调用对我不起作用。之前应该添加的。这种方法不能像我希望的那样工作,事实上,如果不刷新场景,我不确定它的目的是什么
网格导入代码:
const int MAX_FACETS_PER_MESH = 65535 / 3;
class Facet
{
public Vector3 normal;
public Vector3 a, b, c;
public override string ToString()
{
return string.Format("{0:F2}: {1:F2}, {2:F2}, {3:F2}", normal, a, b, c);
}
}
private static Mesh[] ImportBinary(string path)
{
Facet[] facets;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs, new ASCIIEncoding()))
{
// read header
byte[] header = br.ReadBytes(80);
uint …Run Code Online (Sandbox Code Playgroud) 请参阅视觉辅助工具。gif 后面有两个 GUI。左侧的 GUI 根据相机到物体的距离进行适当缩放。右侧的 GUI 正在缩放,在“场景”视图中清晰可见,但在游戏视图中甚至不明显。该应用程序适用于 Hololens,因为用户头部在 Unity 场景中控制相机。
问题在于设置对象缩放比例。一整天我都在绞尽脑汁试图复制左侧 GUI 上显示的缩放类型。除以距离并将其用作缩放因子显然是不正确的,因为对象要么太大并且增长太快,要么太小并且增长太慢,但我不知道如何在中间的某个地方相遇。以明显但不令人讨厌的大或难以察觉的速率在两个方向上均匀地缩放。
到目前为止的实现代码:
// GameObject and GUI assigned in Editor
public GameObject sphere, rotationManager;
// For rotationManager scaling
private float cameraToObject,
void Update()
{
/* Scale rotationManager based on Cameras distance to object */
cameraToObject = Vector3.Distance(
sphere.transform.position,
Camera.main.transform.position);
Debug.Log("distance: " + cameraToObject);
// If camera isn't too close to our object
if (cameraToObject > 4f)
{
// adjust scale
rotationManager.transform.localScale = new Vector3(
cameraToObject / 5,
cameraToObject …Run Code Online (Sandbox Code Playgroud)