Unity OnNetworkSpawn не вызывается?C#

Место общения программистов C#
Ответить
Anonymous
 Unity OnNetworkSpawn не вызывается?

Сообщение Anonymous »

Я создал GameObject с компонентом NetworkObject и прикрепил скрипт для управления состоянием коллайдера на основе состояния сервера. Скрипт предназначен для включения коллайдера при обнаружении сервера. Однако функция, ответственная за такое поведение, похоже, не выполняется, и сообщения журнала не отображаются.
Вот сценарий

Код: Выделить всё

public class CanvasNavigation : NetworkBehaviour
{
public BoxCollider canvasCollider;
public GameObject canvas;
public GameObject alertPopUp;
public GameObject[] pages;
[Header("Audio")]
public AudioSource audioSource;
public AudioClip popUpSound;
public GameObject semiTruck;
[Header("Truck Materials")]
public Material truckMat;
public Material transparentTruckMat;
[Space(5)]
public float cooldownTime = 1f;

private void Start()
{
InitializeCanvasState();
}

public override void OnNetworkSpawn()
{
canvasCollider.enabled = false;
base.OnNetworkSpawn();
if(IsServer)
canvasCollider.enabled = true;

}

private void InitializeCanvasState()
{
pages[0].SetActive(true);
alertPopUp.SetActive(false);
}

public void ConfirmActionAndDetachTruck()
{
if (IsServer)
{
HideCanvas();
semiTruck.transform.SetParent(null);
}
}

public void CancelActionAndClosePopUp()
{
if (IsServer)
{
HideAlertPopUp();
}
}

public void SetTruckTransparency(bool isTransparent)
{
if (IsServer)
{
UpdateTruckMaterialClientRpc(isTransparent);
}
}

[ClientRpc]
private void UpdateTruckMaterialClientRpc(bool isTransparent)
{
Debug.Log("Switching material to: " + (isTransparent ? "Transparent" : "Opaque"));
Renderer truckRenderer = semiTruck.GetComponent();
if (truckRenderer != null)
{
truckRenderer.material = isTransparent ? transparentTruckMat : truckMat;
}
}

public void ShowAlertAndPlaySound()
{
if (IsServer)
{
DisplayAlertPopUp();
audioSource.PlayOneShot(popUpSound);
}
}

private void HideAlertPopUp()
{
alertPopUp.SetActive(false);
}

private void HideCanvas()
{
canvas.SetActive(false);
}
private void DisplayAlertPopUp()
{
alertPopUp.SetActive(true);
}
}
Я пытался добавить журнал, чтобы узнать, был ли он хотя бы вызван, но это не так?

Подробнее здесь: https://stackoverflow.com/questions/792 ... not-called
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»