简单说一下什么是广告牌技术,在游戏场景中,场景物体无论何时何地都会面向我们的视角,也就是相机。
using UnityEngine;
using System.Collections;public class NcBillboard : MonoBehaviour
{public bool m_bCameraLookAt;public bool m_bFixedObjectUp;public bool m_bFixedStand;public enum AXIS_TYPE {AXIS_FORWARD, AXIS_BACK, AXIS_RIGHT, AXIS_LEFT, AXIS_UP, AXIS_DOWN};public AXIS_TYPE m_FrontAxis;public enum ROTATION {NONE, RND, ROTATE}public ROTATION m_RatationMode;public enum AXIS {X=0, Y, Z};public AXIS m_RatationAxis = AXIS.Z;public float m_fRotationValue = 180;protected float m_fRndValue;protected float m_fTotalRotationValue;protected Quaternion m_qOiginal;void Awake(){}void OnEnable(){UpdateBillboard();}public void UpdateBillboard(){m_fRndValue = Random.Range(0,360.0f);if (enabled)Update();}void Start(){m_qOiginal = ation;}void Update(){if (Camera.main == null)return;Vector3 vecUp;if (m_bFixedObjectUp)vecUp = transform.up;else vecUp = ation * Vector3.up;if (m_bCameraLookAt)transform.LookAt(ansform, vecUp);else transform.LookAt(transform.position + ation * Vector3.back, vecUp);switch (m_FrontAxis){case AXIS_TYPE.AXIS_FORWARD: break;case AXIS_TYPE.AXIS_BACK: transform.Rotate(transform.up, 180, Space.World); break;case AXIS_TYPE.AXIS_RIGHT: transform.Rotate(transform.up, 270, Space.World); break;case AXIS_TYPE.AXIS_LEFT: transform.Rotate(transform.up, 90, Space.World); break;case AXIS_TYPE.AXIS_UP: transform.Rotate(transform.right, 90, Space.World); break;case AXIS_TYPE.AXIS_DOWN: transform.Rotate(transform.right, 270, Space.World); break;}if (m_ation = Quaternion.Euler(new Vector3(0, ation.eulerAngles.y, ation.eulerAngles.z));if (m_RatationMode == ROTATION.RND)transform.localRotation *= Quaternion.Euler((m_RatationAxis == AXIS.X ? m_fRndValue : 0), (m_RatationAxis == AXIS.Y ? m_fRndValue : 0), (m_RatationAxis == AXIS.Z ? m_fRndValue : 0));if (m_RatationMode == ROTATION.ROTATE){float fRotValue = Time.deltaTime * m_fRotationValue;transform.Rotate((m_RatationAxis == AXIS.X ? fRotValue : 0), (m_RatationAxis == AXIS.Y ? fRotValue : 0), (m_RatationAxis == AXIS.Z ? fRotValue : 0), Space.Self);}}
}
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using System.IO;[CustomEditor(typeof(NcBillboard))]public class NcBillboardEditor : FXMakerEditor
{// Attribute ------------------------------------------------------------------------protected NcBillboard m_Sel;// Property -------------------------------------------------------------------------// Event Function -------------------------------------------------------------------void OnEnable(){m_Sel = target as NcBillboard;m_UndoManager = new FXMakerUndoManager(m_Sel, "NcBillboard");}void OnDisable(){}public override void OnInspectorGUI(){AddScriptNameField(m_Sel);m_UndoManager.CheckUndo();// --------------------------------------------------------------bool bClickButton = false;EditorGUI.BeginChangeCheck();{
// DrawDefaultInspector();m_Sel.m_fUserTag = EditorGUILayout.FloatField(GetCommonContent("m_fUserTag"), m_Sel.m_fUserTag);m_Sel.m_bCameraLookAt = EditorGUILayout.Toggle(GetHelpContent("m_bCameraLookAt") , m_Sel.m_bCameraLookAt);m_Sel.m_bFixedObjectUp = EditorGUILayout.Toggle(GetHelpContent("m_bFixedObjectUp") , m_Sel.m_bFixedObjectUp);m_Sel.m_bFixedStand = EditorGUILayout.Toggle(GetHelpContent("m_bFixedStand") , m_Sel.m_bFixedStand);m_Sel.m_FrontAxis = (NcBillboard.AXIS_TYPE)EditorGUILayout.EnumPopup(GetHelpContent("m_FrontAxis"), m_Sel.m_FrontAxis, GUILayout.MaxWidth(Screen.width));m_Sel.m_RatationMode = (NcBillboard.ROTATION)EditorGUILayout.EnumPopup(GetHelpContent("m_RatationMode"), m_Sel.m_RatationMode, GUILayout.MaxWidth(Screen.width));if (m_Sel.m_RatationMode == NcBillboard.ROTATION.RND || m_Sel.m_RatationMode == NcBillboard.ROTATION.ROTATE)m_Sel.m_RatationAxis = (NcBillboard.AXIS)EditorGUILayout.EnumPopup(GetHelpContent("m_RatationAxis"), m_Sel.m_RatationAxis, GUILayout.MaxWidth(Screen.width));if (m_Sel.m_RatationMode == NcBillboard.ROTATION.ROTATE)m_Sel.m_fRotationValue = EditorGUILayout.FloatField(GetHelpContent("m_fRotationValue") , m_Sel.m_fRotationValue);}m_UndoManager.CheckDirty();// --------------------------------------------------------------if ((EditorGUI.EndChangeCheck() || bClickButton) && GetFXMakerMain())OnEditComponent();// ---------------------------------------------------------------------if (ltip != "")m_LastTooltip = ltip;HelpBox(m_LastTooltip);}// ----------------------------------------------------------------------------------// ----------------------------------------------------------------------------------protected GUIContent GetHelpContent(string tooltip){string caption = tooltip;string text = FXMakerTooltip.GetHsEditor_NcBillboard(tooltip);return GetHelpContent(caption, text);}protected override void HelpBox(string caption){string str = caption;if (caption == "" || caption == "Script")str = FXMakerTooltip.GetHsEditor_NcBillboard("");base.HelpBox(str);}
}
protected static string[,] HcFolderPopup_Common = {{"- Display an image and a name together.","- Do not divide into sub directories; show all contents in the list.","- Finish operations and close the Popup window." + "n" +"- As the chosen operation is already saved, choose Undo first if you want to cancel" + "n" +"- Though the window is closed, you can use Undo function by opening the window again.","- Cancel save.","- Save in the chosen category.","- Remove the chosen prefab."}};
本文发布于:2024-01-31 10:11:57,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666711927775.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |