我有一個使用 Android 來顯示 Unity Player 的專案。所以我將 Untiy 專案匯出為由 Android 應用程式實作的 Android 模塊。
我在包含 UnityPlayer 的 Android Activity 中創建按鈕,當我單擊按鈕時,它會向 Unity Player 發送一條訊息以呼叫 C# 函式,就像這樣:
findViewById(R.id.btnChange).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mUnityPlayer.UnitySendMessage("ScriptHolder", "ChangeSkin", "");
}
});
而名為“ChangeSkin”的功能只是改變一些GameObjects的活動。像這樣:
void ChangeSkin()
{
int prefab;
if (_currentPrefab == PREFAB_DEFAULT)
{
prefab = PREFAB_PRINCESS;
}
else
{
prefab = PREFAB_DEFAULT;
}
ShowSkin(prefab);
}
private void ShowSkin(int prefab)
{
_currentPrefab = prefab;
foreach (var item in _defaultDressList)
{
item.SetActive(prefab == PREFAB_DEFAULT);
}
foreach (var item in _princessDressList)
{
item.SetActive(prefab == PREFAB_PRINCESS);
}
}
并且發生了一些奇怪的事情:當我在 Unity 中單擊按鈕更改人的衣服時,呼叫的 GameObjectsSetActive(true)在右側位置上方顯示一幀并變得正常,看起來像閃爍。這是專案演示的 gif:

看起來位置偏移量等于狀態欄的高度。如果我在 Unity Scene 上創建一個按鈕并呼叫“ChangeSkin”功能,一切都會好起來的。
我盡我所能來解決這個問題,但沒有成功。所以我希望你能幫助我,謝謝。
uj5u.com熱心網友回復:
您應該檢查您的 Unity 布局。如果您的布局組具有內容大小調整器組件,并且子物件也具有它(內容大小調整器),則可能會導致這些故障。
uj5u.com熱心網友回復:
我通過使用標志(或觸發器)解決了這個問題。像這樣:
// set value true to trigger ChangeSkin() in Update(),
// instead of invoke ChangeSkin() directly
private bool _changingSkinTrigger = false;
void ChangeSkin()
{
if (_currentPrefab == PREFAB_DEFAULT)
{
_currentPrefab = PREFAB_PRINCESS;
}
else
{
_currentPrefab = PREFAB_DEFAULT;
}
_changingSkinTrigger = true;
}
void Update()
{
if (_changingSkinTrigger)
{
_changingSkinTrigger = false;
ShowSkin();
}
}
private void ShowSkin()
{
foreach (var item in _defaultDressList)
{
item.SetActive(_currentPrefab == PREFAB_DEFAULT);
}
foreach (var item in _princessDressList)
{
item.SetActive(_currentPrefab == PREFAB_PRINCESS);
}
}
感謝@AndriyMarshalek 啟發我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461623.html
上一篇:如何逆轉原力?
