任务:推进游戏的流程化

场景:【序章-家中】
1.创建游戏物体【多态管理员】
*:修改脚本文件夹名称至中文
*:修复若干Bug
2.创建脚本【PolymorphicAdministrator】
3.编写【PolymorphicAdministrator】的基本逻辑
4.为数值记录者添加变量【stageName】,用来识作为多态的识别标志
5.完成了多态系统,现在同一个场景可以根据目前的【演出名】进行不同的初始化以节省空间。

后续的流程化明天继续开发,下班
加油吧🙏
This commit is contained in:
Roman 2021-08-11 02:17:57 +08:00
parent cc0ed5b41f
commit c9a4456308
40 changed files with 137 additions and 0 deletions

View File

@ -1182,6 +1182,55 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &305694996
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 305694997}
- component: {fileID: 305694998}
m_Layer: 0
m_Name: "\u591A\u6001\u7BA1\u7406\u5458"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &305694997
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 305694996}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1789875270}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &305694998
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 305694996}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 94a33228a61c2774fbb687425136148a, type: 3}
m_Name:
m_EditorClassIdentifier:
statesNames:
- "\u5E8F\u7AE0-\u5BB6\u4E2D-\u672A\u6253\u7801"
-
statesEvents:
- {fileID: 0}
- {fileID: 0}
--- !u!1001 &381999398
PrefabInstance:
m_ObjectHideFlags: 0
@ -2521,6 +2570,7 @@ MonoBehaviour:
shellShadowPositionYOffSet: 1.5
rateOfChangeOfThrowingAngle: 1
strengthOfThrowing: 8
stageName:
--- !u!4 &912162410
Transform:
m_ObjectHideFlags: 0
@ -4373,6 +4423,7 @@ Transform:
- {fileID: 1272302693}
- {fileID: 535189456}
- {fileID: 1894769948}
- {fileID: 305694997}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -34,6 +34,11 @@ public class M_Player : MonoBehaviour
faceDir = 1;//默认面部朝右
playerInput = GetComponent<PlayerInput>(); //获取自身输入组件
M_Animator = GetComponent<Animator>();
//为了解决warming最后阶段请删除到那时应该不会再有警告
if(inputDir == 0){}
if(throwingState){}
//
}
// Update is called once per frame

View File

@ -1,6 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class IndexRecoder : MonoBehaviour
{
@ -37,6 +38,8 @@ public class IndexRecoder : MonoBehaviour
public float rateOfChangeOfThrowingAngle;
[Tooltip("抛出投掷物的力度")]
public float strengthOfThrowing;
[SerializeField][Tooltip("演出名称,这个不给你改,这个是我做多态用的,在这里只读")][ReadOnly]
public string stageName;
void Start()
{
@ -55,6 +58,8 @@ public class IndexRecoder : MonoBehaviour
codeBook.Add("---..","8");
codeBook.Add("----.","9");
codeBook.Add("-----","0");
stageName = "序章-家中-未打码";
}
// Update is called once per frame
@ -62,4 +67,27 @@ public class IndexRecoder : MonoBehaviour
{
}
//修改演出名称的函数,在游戏流程推进的时候用
public void ChangeStageName(string newName){stageName = newName;}
//制造一个只读的变量,不要动这些
public class ReadOnlyAttribute : PropertyAttribute{}
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer
{
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return EditorGUI.GetPropertyHeight(property, label, true);
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
GUI.enabled = false;
EditorGUI.PropertyField(position, property, label, true);
GUI.enabled = true;
}
}
//
}

View File

@ -0,0 +1,42 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PolymorphicAdministrator : MonoBehaviour
{
// Start is called before the first frame update
//多态管理员,旨在对同一个场景进行不同的初始化,以节省空间
private IndexRecoder indexRecoder;//记录者物体
[Tooltip("多态管理员,此参数记录着“这个场景有几种状态,这几个状态的名称分别是什么”,这样的信息,请键入不同的演出名")]
public string[] statesNames;
[Tooltip("多态管理员,此参数记录着“当场景为此状态时,应该执行怎样的初始化呢?”这样的信息,请拖入事件")]
public Event[] statesEvents;
void Start()
{
indexRecoder = FindObjectOfType<IndexRecoder>();//找到记录者物体
TransfromToAState();
}
//初始化为某个多态中的一种,根据是记录者中的演出名
private void TransfromToAState()
{
for(int i = 0; i < statesNames.Length; i++)
{
//遍历每一种多态名
if(indexRecoder.stageName.Equals(statesNames[i]))//如果是第i种多态
{
try
{
statesEvents[i].OnCall();//则执行对应事件进行场景的初始化
}
catch(System.NullReferenceException e)
{
Debug.Log("此多态没有被赋予事件,可能是场景本身初始状态就是多态中的一种,所以不需要初始化");
e.ToString();
}
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 94a33228a61c2774fbb687425136148a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: