Pun-01/Assets/Photon/PhotonUnityNetworking/UtilityScripts/Prototyping/OnClickInstantiate.cs
2022-07-08 09:14:55 +08:00

56 lines
2.1 KiB
C#

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="OnClickInstantiate.cs" company="Exit Games GmbH">
// Part of: Photon Unity Utilities
// </copyright>
// <summary>A compact script for prototyping.</summary>
// <author>developer@exitgames.com</author>
// --------------------------------------------------------------------------------------------------------------------
namespace Photon.Pun.UtilityScripts
{
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// Instantiates a networked GameObject on click.
/// </summary>
/// <remarks>
/// Gets OnClick() calls by Unity's IPointerClickHandler. Needs a PhysicsRaycaster on the camera.
/// See: https://docs.unity3d.com/ScriptReference/EventSystems.IPointerClickHandler.html
/// </remarks>
public class OnClickInstantiate : MonoBehaviour, IPointerClickHandler
{
public enum InstantiateOption { Mine, Scene }
public PointerEventData.InputButton Button;
public KeyCode ModifierKey;
public GameObject Prefab;
[SerializeField]
private InstantiateOption InstantiateType = InstantiateOption.Mine;
void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
{
if (!PhotonNetwork.InRoom || (this.ModifierKey != KeyCode.None && !Input.GetKey(this.ModifierKey)) || eventData.button != this.Button)
{
return;
}
switch (this.InstantiateType)
{
case InstantiateOption.Mine:
PhotonNetwork.Instantiate(this.Prefab.name, eventData.pointerCurrentRaycast.worldPosition + new Vector3(0, 0.5f, 0), Quaternion.identity, 0);
break;
case InstantiateOption.Scene:
PhotonNetwork.InstantiateRoomObject(this.Prefab.name, eventData.pointerCurrentRaycast.worldPosition + new Vector3(0, 0.5f, 0), Quaternion.identity, 0, null);
break;
}
}
}
}