使用2MB
方法实例化预制件时,它会滞后于我的游戏。
我还尝试了对象池和assetBundle。
我已经使用预制件加载了4个3d模型。
我要实例化的3d模型的大小为<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="./assets/javascript/getdata.js"></script>
<link rel="stylesheet" href="./assets/css/style.css">
</head>
<body>
<div class="page-header">
<h1>Data Table</h1>
</div>
<div id="ufo">ajax_response_goes_here</div>
</body>
</html>
。
答案 0 :(得分:1)
如果预制件太大,也许您的设备无法以所需的f / s渲染它。
滞后也可能不是来自模型本身,而是来自初始化(Awake
,OnEnable
)对附加到该对象的组件的调用。
如果仅在实例化时很慢,则应仅在Instantiate()
或Awake
中使用Start
一次,并仅在不需要时通过SetActive
禁用/启用对象(以某种方式)对象池做什么)。
如果涉及更多场景,则应使用DontDestroyOnLoad
才能将其带到其他场景。
您可以尝试使用
之类的东西async Task LoadModelAsync()
{
var assetBundle = await GetAssetBundle("www.my-server.com/myfile");
var prefab = await assetBundle.LoadAssetAsync<GameObject>("myasset");
GameObject.Instantiate(prefab);
assetBundle.Unload(false);
}
async Task<AssetBundle> GetAssetBundle(string url)
{
return (await new WWW(url)).assetBundle;
}
(请参阅How to use Async-await in Unity3d-仅在;
之后缺少(await new WWW(url)).assetBundle
)
并像使用它一样
private void Awake()
{
InstantiateAsync();
}
async void InstantiateAsync()
{
// Example of long running code.
await LoadModelAsync();
}
(请参见here for even better solutions)。但是请记住,该对象不会马上出现,而是稍后实例化。
或者您可以使用新的Unity Job System,它似乎更快(claimed here)