NetworkShow and CheckObjectVisibility limiting visibiliy management flexibility (and does not work as intened in documentation)
@NoelStephensUnity 已經在處理了。
開始於 2023年10月5日。
評估
這個 Issue 還沒有評估資料。
描述
Is your feature request related to a problem? Please describe.
Using a NetworkShow and CheckObjectVisibility is known to be impossible, and there were already some discussions about it in the past (see https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues/2546 and https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues/2609 )
A resolution of the above issues was an introduction of SpawnWithObservers property on NetworkObject. That indeed solved situations where it was necessary to spawn object with no observers. However, in my case, I want to spawn a player object with owner-only visibility, and later add additional objects. However if I do it with:
go.GetComponent<NetworkObject>().CheckObjectVisibility = ((cId) =>
{
return cId == go.GetComponent<NetworkObject>().OwnerClientId;
});
It results in fully blocking me from any further network visibility management with NetworkShow / NetworkHide.
Interesting that the documentation tells that the above approach is actually valid:
https://docs-multiplayer.unity3d.com/netcode/current/basics/object-visibility/
It's said that CheckObjectVisibility is checked only at object spawn, and it's advised to use NetworkShow/NetworkHide after that. However currently it's not how it works, and it's necessary to both update the delegate method and do NetworkShow every time I need to show some object to some client. I feel there is a redundancy in updating a delegate in addition to NetworkShow.
Describe the solution you'd like
- Currently, in my local branch of NGO I just commented out a visibility check in
NetworkShowthat prevents the method from doing what is supposed to do. This is the fastest solution. - More beautiful solution would be to have a new argument to spawn a function to setup initial observes of the object:
SpawnAsPlayerObject(clientId, observers: new List<ulong>{.....});
Spawn(observers: new List<ulong>{.....});
- Or as it was proposed previously in https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/issues/2546 some sort of new delegate such as
CheckObjectInitialVisibilitywould also fix the issue
- 主要語言
- C#
- 星號
- 2.3k
- 分支
- 461
- 平均合併
- 3 天 16 小時
- 30 天內合併 PR
- 20
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
Unity-Technologies/com.unity.netcode.gameobjects 的其他 Issue
-
stat:import type:bug
難度 4/5 3-5 天 新手友好度 68/100
-
stat:reply-needed type:support
難度 4/5 3-5 天 新手友好度 55/100
Unity-Technologies/com.unity.netcode.gameobjects#4095 · 10 則留言 ·
-
stat:awaiting-triage stat:Investigating type:bug
Unity-Technologies/com.unity.netcode.gameobjects#3912 · 5 則留言 · 已指派 1 人 ·
-
Tracking type:feature-2.x
難度 5/5 一週以上 新手友好度 35/100
Unity-Technologies/com.unity.netcode.gameobjects#3870 · 5 則留言 ·
-
Tracking type:feature
難度 4/5 3-5 天 新手友好度 48/100
Unity-Technologies/com.unity.netcode.gameobjects#3830 · 7 則留言 ·
查看 Unity-Technologies/com.unity.netcode.gameobjects 的全部 Issue
相似的 Issue
-
bug
難度 1/5 1 小時以內 新手友好度 75/100
sillsdev/languageforge-lexbox#2665 ·
-
bug documentation frontend
難度 2/5 1-3 小時 新手友好度 72/100
azurenoops/spin_agent#975 ·
-
難度 2/5 1-3 小時 新手友好度 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
難度 2/5 1-3 小時 新手友好度 92/100
dotnet/AspNetCore.Docs#37699 ·
-
難度 2/5 1-3 小時 新手友好度 72/100
SubtitleEdit/subtitleedit#15108 · 1 則留言 ·