任务:推进游戏的流程化
场景:【序章-家中】
1.创建游戏物体【多态管理员】
*:修改脚本文件夹名称至中文
*:修复若干Bug
2.创建脚本【PolymorphicAdministrator】
3.编写【PolymorphicAdministrator】的基本逻辑
4.为数值记录者添加变量【stageName】,用来识作为多态的识别标志
5.完成了多态系统,现在同一个场景可以根据目前的【演出名】进行不同的初始化以节省空间。
后续的流程化明天继续开发,下班
加油吧🙏
This commit is contained in:
parent
cc0ed5b41f
commit
c9a4456308
@ -1182,6 +1182,55 @@ Transform:
|
|||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
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
|
--- !u!1001 &381999398
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -2521,6 +2570,7 @@ MonoBehaviour:
|
|||||||
shellShadowPositionYOffSet: 1.5
|
shellShadowPositionYOffSet: 1.5
|
||||||
rateOfChangeOfThrowingAngle: 1
|
rateOfChangeOfThrowingAngle: 1
|
||||||
strengthOfThrowing: 8
|
strengthOfThrowing: 8
|
||||||
|
stageName:
|
||||||
--- !u!4 &912162410
|
--- !u!4 &912162410
|
||||||
Transform:
|
Transform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -4373,6 +4423,7 @@ Transform:
|
|||||||
- {fileID: 1272302693}
|
- {fileID: 1272302693}
|
||||||
- {fileID: 535189456}
|
- {fileID: 535189456}
|
||||||
- {fileID: 1894769948}
|
- {fileID: 1894769948}
|
||||||
|
- {fileID: 305694997}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
@ -34,6 +34,11 @@ public class M_Player : MonoBehaviour
|
|||||||
faceDir = 1;//默认面部朝右
|
faceDir = 1;//默认面部朝右
|
||||||
playerInput = GetComponent<PlayerInput>(); //获取自身输入组件
|
playerInput = GetComponent<PlayerInput>(); //获取自身输入组件
|
||||||
M_Animator = GetComponent<Animator>();
|
M_Animator = GetComponent<Animator>();
|
||||||
|
|
||||||
|
//为了解决warming,最后阶段请删除,到那时应该不会再有警告
|
||||||
|
if(inputDir == 0){}
|
||||||
|
if(throwingState){}
|
||||||
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
public class IndexRecoder : MonoBehaviour
|
public class IndexRecoder : MonoBehaviour
|
||||||
{
|
{
|
||||||
@ -37,6 +38,8 @@ public class IndexRecoder : MonoBehaviour
|
|||||||
public float rateOfChangeOfThrowingAngle;
|
public float rateOfChangeOfThrowingAngle;
|
||||||
[Tooltip("抛出投掷物的力度")]
|
[Tooltip("抛出投掷物的力度")]
|
||||||
public float strengthOfThrowing;
|
public float strengthOfThrowing;
|
||||||
|
[SerializeField][Tooltip("演出名称,这个不给你改,这个是我做多态用的,在这里只读")][ReadOnly]
|
||||||
|
public string stageName;
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
@ -55,6 +58,8 @@ public class IndexRecoder : MonoBehaviour
|
|||||||
codeBook.Add("---..","8");
|
codeBook.Add("---..","8");
|
||||||
codeBook.Add("----.","9");
|
codeBook.Add("----.","9");
|
||||||
codeBook.Add("-----","0");
|
codeBook.Add("-----","0");
|
||||||
|
|
||||||
|
stageName = "序章-家中-未打码";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
}
|
}
|
42
Assets/Scripts/抽象的东西/PolymorphicAdministrator.cs
Normal file
42
Assets/Scripts/抽象的东西/PolymorphicAdministrator.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
11
Assets/Scripts/抽象的东西/PolymorphicAdministrator.cs.meta
Normal file
11
Assets/Scripts/抽象的东西/PolymorphicAdministrator.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 94a33228a61c2774fbb687425136148a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
x
Reference in New Issue
Block a user