Script - NDark/KobayashiMaruCommanderOS GitHub Wiki

設計與內容

{{toc}}

功能清單

本頁面說明專案中各項script

主更新 : MainUpdate.cs

InitializeInformationSequence 初始化資訊頁面群

請參考 資訊頁面群的跳躍

  1. 戰後會有資訊頁面的流程,主要目的是給予玩家其他資訊(招募人員,資源路徑清單,或是工作人員,小提示等等)
  2. 原本的作法是戰後的按鈕直接導向各頁面,然後再由各頁面串接,最後連到回到起始(選擇關卡,或開頭)。
  3. 也就是把場景轉換的順序寫在場景(Scene)中。較為不彈性(如果要修改必須開Unity一個個場景做調整)
  4. 目前的作法是遊戲勝負已分就到資訊起始場景Scene_InformationHead,此場景是空的場景。
  5. 資訊起始場景用來讀入參數檔,並且設定場景參數到GlobalSingleton中。
  6. 之後(包含資訊起始場景)的所有資訊頁面都是去檢察此設定,然後切入下一個場景。
  7. 目前相關的運作
    1. ClickOnMessageCard_BackToSelectScene.cs 取得最終跳躍場景名稱
    2. LevelGenerator.cs 設定最終跳躍場景名稱
    3. VictoryEventManager.cs 設定最終跳躍場景名稱

StrsManager 語言管理器

  1. 透過索引來取得目前語言的字串內容
  2. m_Filepath 使用檔案名稱,需設定在正確資料夾中
  3. Register() 註冊物件,當語言更換時會去 呼叫 NotifyObservers() 重置字串
  4. Get() 依照索引取得字串
  5. Setup() 依照檔案名稱讀入指定語言的文字設定檔

InitializeStrsManager 初始化語言管理器

  1. 掛載在各場景的主要節點上
  2. 如果已經初始化就不要重複初始化
  3. 會取得目前玩家的使用語言

Level

關卡讀檔 LevelGenerator

BackgroundObjInitialization.cs 背景初始化

  1. 裝載在關卡場景物件上,用來定義場景的大小。
  2. 場景是用 plane 製作的 所以參數是以plane為客製化。
  3. 基本大小 : plane未縮放時的大小 5*5
  4. 基本縮放 : 我們縮放在xz軸向
  5. 寬度 = 基本大小 * 基本縮放
  6. 邊界大小 : 在xz軸向的邊界寬度
  7. 可移動範圍 = 寬度 – 邊界大小
    1. 以v0.9為標準,場景的可移動範圍是120*120
  8. IsOutofLevel() 判斷一個座標點是否超過邊界範圍
  9. 在 MainUpdate::UpdatePosition() 中 會依此 判斷船隻是否有超過可移動範圍
     

單位產生器 : EnemyGenerator

  1. 依照設定產生單位及敵人的控制
  2. 分成單位及敵人兩個串列來產生
    1. m_UnitGenerationTable
    2. m_EnemyGenerationTable
  3. 索引也是分為兩個串列
    1. m_UnitGenerationIndex
    2. m_EnemyGenerationIndex
  4. 已經產生的敵人特別紀錄在 m_EnemyGeneratedTable
  5. AddUnitGeneration() 新增產生的單位
    1. 目前是依照名稱來決定是單位還是敵人
  6. 呼叫 GenerateEnemy() 產生的物件是依照資料結構 UnitGenerationData 內的資料來呼叫 LevelGenerator::GenerateUnit() 產生物件
  7. 目前 產生的順序是依照索引,依次判斷時間產生.
  8. 目前 呼叫 GetRemainingEnemyNum() 透過此計算場上還有的敵人 讓模組化的勝負判定 判定勝利
    其中是要判定 還在排序中的敵人 + 場景中的敵人 是否已經消滅=0
  9. InsertEnemyGenerationTable() 立即插入敵人
  10. TryActiveBattleEventCamera() 嘗試啟動戰場特寫

AutoPlayMachine 自動播放

  1. 目前還未完成
  2. 掛在 GlobalSingleton 下
  3. 預設是關閉
  4. 請參考 系統記錄及自動播放
  5. 會讀取系統紀錄的文件 SystemLogKeep.txt
  6. 依照系統紀錄來檢查時間同時觸發內容

BattleEventCameraManager 戰場特寫管理器

  1. 戰場特寫管理器
  2. 當敵人產生時 EnemyGenerator::TryActiveBattleEventCamera() 會呼叫此管理器
  3. 控制攝影機 m_BattleEventCamera
  4. 設定其跟隨器 m_CameraFollower
  5. Setup() 啟動展場特寫,需要傳入跟隨物件,以及索引
  6. 索引是用來決定戰場特寫的位置在上下左右四個座標
  7. SetupByTime() 啟動後一定時間關閉
  8. CheckTargetIsValid() 檢察目標是否存活,目標消失就馬上關閉
  9. 除了上下左右四個座標之外,戰場特寫還有上下左右四個箭頭
  10. Close()
    1. 關閉箭頭
    2. 關閉Follower
    3. 關閉攝影機的顯示
    4. 設定狀態為未啟動

Physics

ClickOnThisCollider 滑鼠點擊到3D物件

  1. 注意!!script要綁在有collider的物件下才會觸發。目前是綁在ClickCube這個子物件下。統一由此子物件來觸發點選單位。
  2. 檢查 OnMouseDown() / OnMouseUp() 。
  3. 假如曾經按下 mouse down 並在一定時間內放開才算一次的click。
  4. click call TellMainCharacterClick() 通知main character點選某物件。

WhenCollideOnCollider 船隻碰撞處理

  1. 只紀錄碰撞的對象不做處理
  2. 目前綁在導彈的CollideCube上
  3. 目前只有導彈的AI會去檢查

CollideOnThisCollider 船隻碰撞處理

  1. 注意,此script是綁在底層的碰撞物件CollideCube上,而非船隻的物件上,所以要找資料要再往上一層。
  2. 檢查被碰撞(自己)的單位
  3. 檢查碰撞上的單位
  4. 非存活的單位不碰撞
  5. 如果沒有UnitData則不會碰撞
  6. CauseCameraShakeEffect() 如果主角撞到,則開啟攝影機震動特效。
  7. CauseDamage() 給予傷害 的條件是 有傷害系統
  8. CreateForce() 製造推開的力量(直接作用在物件,不透過MoveVec)
  9. 推開的力量向量依照物件的重量而決定 請參考 BaseDefine.STANDARD_COLLIDE_PUSH_SPEED
  10. 碰撞製造的傷害值 請參考 BaseDefine.COLLIDE_DAMAGE_IN_SEC
  11. 傷害值顯示的持續時間是 1.0秒
  12. 製造攝影機震動效果的持續時間是0.5

Camera

ActiveCameraShakeEffect 火花特效 啟動攝影機震動特效

  1. 裝在Template_Effect_PhaserSparks上.
  2. 當玩家被擊中,身上有火花時,觸發攝影機震動特效
  3. 只有火花在主角身上才可震動
  4. 找到攝影機的 CameraShakeEffect 來啟動震動效果
  5. 間隔一段時間 不斷觸發
  6. 目前觸發週期是 0.4s , 一次設定搖晃 0.5s 來達到不間斷的效果
  7. CheckWinOrLose() 檢查勝利之後不可繼續震動

CameraFollowMainCharacter 攝影機跟隨主角

  1. 掛在Camera上
  2. 會去取得 CameraInitialization 的距離原點參數 來作為持續保持 與玩家位置的距離
  3. UpdateCameraPosition()
    依照感測器的目前比例與上下限計算出縮放的比例,然後以標準的距離作縮放得到距離玩家的長度
    由玩家的位置反推為攝影機的位置,最後傳給 CameraShakeEffect
  4. RetrieveSensorEffect() 取回感測器的目前功效,
    再以變數 m_SensorTotalEffectStandard 標準感測器數值做參考,計算得出一個比例,
    當單位感測器數值有變化時,就是攝影機要調整的距離值變化值。
    請參考 STANDARD_SENSOR_TOTAL_EFFECT
  5. m_MinScaleDistanceFromCharacter 與 m_MaxScaleDistanceFromCharacter 是攝影機縮放的上下限。
    自感測器比例0.0到2.0。
    請參考 MIN_SCALE_FROM_STANDARD_DISTANCE 與 MAX_SCALE_FROM_STANDARD_DISTANCE。

CameraFollowUnit

  1. 攝影機追蹤一個單位
  2. 簡化版的 CameraFollowMainCharacter
  3. 用在 戰場事件的攝影機上
  4. m_FollowUnit 追蹤的單位
  5. Setup() 時傳入單位並啟動
  6. Close() 時關閉
  7. UpdateCameraPosition() 更新攝影機位置

CameraInitialization 攝影機初始化

  1. 初始化攝影機的位置
  2. 也代表攝影機與玩家的基本距離

CameraShakeEffect 攝影機的振動特效

  1. 由目前的攝影機再加上一個亂數位移 做出不斷震動的效果
  2. 必須在玩家活著的時候才啟用
  3. 震動時間經過後就關閉.
  4. 掛在主攝影機上
  5. 目前有兩種方式觸發攝影機的搖晃特效
    1. 主角船撞到其他物件時
    2. 主角船掛上火花特效時
  6. 變數
    1. 啟動與否 m_Active
  7. KeepMinimapCameraUnderTheMap()
    因為移動了主攝影機,必須讓小地圖攝影機的位置持續保持在地圖下,
    才能看到正確的小地圖。
    每次呼叫設定主攝影機的位置 SetPosToCamera() 都必須連帶執行。

Common

singleton的靜態函式

  1. 基本定義 BaseDefine.cs
    1. CLICK_SEC : The Click Sec
    2. WAIT_SEC_AFTER_SHOW : The wait sec after show
    3. COLLIDE_DAMAGE_IN_SEC : The collide damage in a sec.
    4. STANDARD_COLLIDE_PUSH_SPEED : The standard push speed when collide.
    5. STANDARD_SENSOR_TOTAL_EFFECT : Constant standard sensor toatl effect.
    6. MIN_SCALE_FROM_STANDARD_DISTANCE_CAMERA : Constant min and max scale from standard distance of camera
    7. MAX_SCALE_FROM_STANDARD_DISTANCE_CAMERA : Constant min and max scale from standard distance of camera
    8. CAMERA_SHAKE_DISTANCE : Constant camera shake distance
    9. OBJECT_SHAKE_DISTANCE : Constant object shake distance.
    10. STANDARD_PUSH_DISTANCE : Constant push distance when mass is 1.
    11. DRAW_MINIMAP_REFRESH_SEC : Constant second of refresh draw minimap.
    12. SENSOR_REFRESH_SEC
    13. SLOWMOTION_SCALE_IN_TIME
    14. FREEZE_SCALE_IN_TIME
    15. NORMAL_SCALE_IN_TIME
    16. MESSAGE_QUEUE_SHOW_SEC
    17. MESSAGE_QUEUE_FADEOUT_SEC
    18. PHASER_CAUSE_DAMAGE_CYCLE_SEC
    19. BATTLE_EVENT_CAMERA_ELAPSED_SEC
  2. ConstName.cs 靜態名稱定義
    1. 用來做字串相關的定義及產生
    2. iterator = 0 ;// 用來產生新物件讓物件名稱不重複的的序號
  3. GlobalSingleton.cs 全域物件及元件取得器
    1. m_LevelString 用來記錄目前要讀取的關卡關鍵字串,由選關場景寫入,戰鬥場景讀出
    2. m_AcknowledgementGUIOBjectName 選關之後是否要開啟感謝的GUIObjectName
    3. m_CurrentModeSelectSceneString 用來記錄關卡結束後的要回到哪一個選擇關卡場景
    4. m_CustomActive 是否開啟客製化主角船
    5. m_CustomPrefabName 客製化主角船的prefab名稱
    6. m_CustomDefaultPrefabName 客製化主角船的prefab預設名稱
    7. m_CustomUnitDataName 客製化主角船的unitdata樣本名稱
    8. m_CustomDefaultUnitDataName 客製化主角船的unitdata樣本預設名稱
    9. ResetCustomData() 重置及關閉客製化設定
    10. m_InformationSequenceFilepath 資訊頁面的設定檔路徑
    11. m_InformationSceneEnd 資訊頁面預設的返回點
    12. m_InformationSequenceIsInitialized 資訊頁面是否已經初始化
    13. m_InformationSequenceIndex 資訊頁面的目前索引
    14. m_InformationSceneNames 資訊頁面的目前表格
    15. InitializeInformationSequence() 初始化資訊頁面表格
    16. TryLoadInformationNext() 嘗試讀入資訊頁面下一個場景
  4. InterpolateTable 內插表
  5. Language.cs 語言選項

    public enum Language
    {
    English = 0 ,
    TraditionalChinese,
    }
  6. 數學運算 Mathmatic.cs
    1. FindDotofCrossAndUp() 計算 外積與左右轉參數
    2. FindTargetRelationWithForward() 計算物件的相對關係
    3. FindTargetRelation() 計算物件的相對關係
    4. FindUnitRelation() 計算物件的相對關係
    5. Interpolate() 計算內差
    6. RandomVector() 隨機向量(可抹除某軸向的直)
    7. RandomRatioValue() 隨機值(最小到最大,可指定某精度)
    8. CreateWeaponRangeObject() 計算並產生武器範圍的顯示物件
    9. IsInScreen() 檢查物件是否在螢幕內
    10. IsTooFarFromScreen() 檢查物件是否在離開螢幕太遠(需要刪除)
  7. NamedObject.cs 名稱與物件取得器
  8. PosAnchor.cs 物件或座標取得器
  9. PosRoute.cs 移動節點
    1. m_Destination 目標
    2. m_MoveTime 移動時間
    3. m_WaitTime 等待時間
    4. m_MoveDetectGUIObject 移動時偵測的GUI物件
    5. m_WaitDetectGUIObject 等待時偵測的GUI物件
  10. prefab讀入與具現化 PrefabInstantiate.cs
    1. Create() 具現化物件
    2. CreateByInit() 依照座標具現化物件
  11. ResourceLoad.cs 資源讀入
    1. GetDataPath() 取得資料(data)夾的位置,同時考慮語言。
    2. SetLanguageNow() 設定目前使用的語言,同時會修改路徑 CONST_LanguagePrefix
    3. LoadAudio()
    4. LoadTexture()
    5. LoadPrefab()
    6. LoadDataToTextAsset() 將Resource內的資料讀為TextAsset
  12. ShowGUITexture.cs 取得物件並顯示/關閉 GUI
    1. Show() 顯示關閉指定物件的 GUITexture , GUIText , 或是物件其下的子物件
    2. Switch() 切換指定物件其下所有的 GUITexture , GUIText , 或是物件其下的子物件
  13. 有序狀態 StateIndex.cs
    A index class with ability to record time,
    and first time after previous assign state.
    1. call Initialize() at start
    2. call Update() in the front of each update to make sure the correctness of IsFirstTime().
  14. UnitObject 單位物件
    1. 繼承自 NamedObject
    2. 新增變數 UnitData

觸發器 Trigger.cs

  1. BasicTrigger 基本觸發器
    1. Initialize() set state to UnActive ( IsReady() )
    2. Start() set state to Active ( IsActive() )
    3. End() / Close() set state to Closed. ( IsClosed() )
  2. TimeTrigger 時間開始結束觸發
    Time trigger with start time and elapsed time to end.
    1. IsStarted() , time is pass the start time.
    2. IsEnded() , time is pass the elapsed time (from last change state).
    3. call IsAboutToStart() to check is the first time to start, and make it start by argument.
    4. call IsAboutToClose() to check is the only time to end after elapsed time from the first time, and make it end by argument.
  3. CountDownTrigger 倒數計時觸發
    1. m_CountDownTime 倒數秒數
    2. make sure call Rewind() before each using.
    3. call IsCountDownToZero() to check it.

Condition

  1. 條件觸發 基本物件
  2. IsTrue() 是否可以觸發
  3. HasTriggered() 是否已經處發
  4. ParseXML() 分析參數

ConditionFactory 用來依照名稱產生各種條件判定物件

Condition_Time 時間條件

  1. 參數
    1. StartTime

Condition_Collision 碰撞條件

  1. 參數
    1. JudgeDistance 判斷距離
    2. TestObjectName 碰撞的測試物
    3. TestObjectName{0} 碰撞的測試物(複數)
    4. PosAnchor 碰撞的檢查點

Condition_RemainingEnemyIsZero 檢查目前剩下敵人數目是否等於0

Condition_UnitIsDead 檢查指定單位是否死亡

  1. 參數
    1. UnitName

Condition_MainCharacterIsDead 檢查主角是否死亡

  1. 繼承 Condition_UnitIsDead

Condition_UnitIsAlive 檢察單位是否存活

  1. 繼承 Condition_UnitIsDead

Unit Component Data

ComponentDataSet 部件運作的相關物件集

  1. ComponentName of this component in UnitData.
  2. UnitObjectName and its unit object of the component.
  3. Component 3D Object Name and its Object of the component under GameObject.
  4. Effect 3D Object Name and its Object of the component.
  5. m_Component3DObject.Name 與 m_Effect3DObject.Name 會自動在設定 ComponentName 時創造出來

ComponentParam 部件基本參數

  1. 定義在參數檔 ComponentParamTable.xml 中
  2. m_ComponentName 部件名稱
  3. m_Effect3DObjectTemplateName 指定要使用的特效樣板名稱
  4. m_Component3DObject 部件3D物件
  5. m_GUI : GUI參數 GUIParam
    1. GUIRect 位置定義
    2. DisplayName 顯示名稱
  6. m_IsFlip 是否要反向,會影響到傳回的 GUIRect()

WeaponDataSet.cs 武器運作相關物件集

  1. 繼承自 ComponentDataSet
  2. m_WeaponType 武器種類

    /*
  3. @enum WeaponType
    */
    [System.Serializable]
    public enum WeaponType
    {
    WeaponType_None = 0 ,
    WeaponType_Phaser ,
    WeaponType_Torpedo ,
    WeaponType_Cannon ,
    WeaponType_TrakorBeam ,
    }
  4. m_FireState 目前發射狀態

    /*
  5. @enum WeaponFireState
    */
    public enum WeaponFireState
    {
    UnActive = 0 ,
    Ready ,
    FireAnimating ,
    Firing ,
    FireCompleting ,
    Recharging ,
    }
  6. m_WeaponType 武器種類
  7. m_FireState 目前發射狀態
  8. m_TargetComponentObject 目標部件物件
  9. m_TargetUnitObject 目標單位
  10. m_TargetDirection 目標方向
  11. m_Displacement 誤差向量
  12. m_FireStartTime 開火時間
  13. m_FireTotalTime 開火總時間
  14. m_FireAudio 發射的音效
  15. m_CauseDamage 製造傷害量
  16. m_RelativeDamageEffectNames 開火過程觸發的特效清單

WeaponParam 武器參數

  1. m_ComponentName 武器部件名稱
  2. m_Angle 武器可發射角度
  3. m_Range 武器可發射距離
  4. m_Accuracy 武器準確度
  5. m_FireAudioName 武器發射音效名稱

Unit

單位的資料結構 : UnitData.cs

單位的資料結構

主角控制 : MainCharacterController

主角控制

UnitClickPlaneAutoAlignCamera 單位的點選物件自動對攝影機校正

  1. 讓點選物件與攝影機維持一直線
  2. 距離鎖定在6.0,超過碰撞的子物件5.0。

UnitComponentData

單位部件資料

  1. all components in UnitData will be the kind of type.
    1. UnitIntagraty
    2. Weapons
    3. Shields
    4. Sensor
    5. Engines
    6. Transporter
    7. LifeSupport
  2. Their attributes are…
    1. HP
    2. Generation
    3. Energy
    4. Effect
    5. Status
    6. ReloadEnergy
    7. ReloadGeneration
    8. WeaponReloadStatus
    9. ComponentParam
    10. WeaponParam
    11. StatusDescription
    12. Effect-HP Curve
  3. IsOffline() Is this component offline or not including ForceOffline.
  4. IsDown() Is this component offline or not , not includeing ForceOffline.
  5. SetEnergyRatio() m_Energy.now = Ratio * m_Energy.mStd ;
  6. EnergyRatio() : m_Energy.Ratio() ;
  7. TotalGeneration() : m_Generation.m_Now * EnergyRatio() ;
  8. TotalReloadGeneration() : m_ReloadGeneration.m_Now * EnergyRatio() ;
  9. TotalEffect() : m_Effect.m_Now * EnergyRatio() ;
  10. UpdateHP() Update hp and status of this component.
  11. UpdateReload() Update m_ReloadEnergy and reload status of this weapon component.

UnitDataStruct.cs

UnitData會用的基本資料

  1. 標準資料
  2. ComponentStatus 部件的狀態
  3. WeaponReloadStatus 武器填充的狀態
  4. ComponentStatusColor::GetColor() 得到狀態相對應的顏色

UnitGoToPoint 自動駕駛系統

  1. 掛載在單位上
  2. 朝向某個地點持續前進
  3. Setup() 啟動時傳入目標位置 以及最大持續時間
  4. Stop() 停止自動控制
  5. IsActiveAutoPilot() 檢查自動控制是否運作中
  6. ChangeImpuseEngineRatio() 依照距離來加減速 傳回true表示停止
  7. KeepDestinationAtScreen() 保持目標一直在螢幕點
  8. ConfirmTutorialRightClickToMove() 檢查右鍵移動教學
  9. CheckOutOfSpace() 檢查目標點是否超過關卡範圍,並顯示靜止貼圖。

UnitSensorSystem 單位感測系統

  1. 自動收集附近的單位清單
  2. 有一個 單位清單 m_SensorUnitList
  3. 收集距離為 m_SensorDistance 會不斷跟UnitData更新
  4. m_RefreshTimer 一定周期才更新,請參考BaseDefine.SENSOR_REFRESH_SEC
  5. GetClosestObj() 取得最近單位
  6. CheckSensorDistance() 取得感測部件的功效
  7. CheckUnitAround() 重新檢查附近的單位

單位的初始化系統 : UnitInitialization

  1. 指定 初始位置 與 初始轉向
  2. 將本物件註冊到 MainUpdate 中

單位的描準系統 : UnitSelectionSystem

單位的武器系統 : UnitWeaponSystem

  1. CreateWeapons() 負責呼叫UnitData創造武器
  2. 創造後的資料集合放在 m_WeaponDataMap 容器中
  3. 結束時會去摧毀相關的物件
  4. m_WeaponRangeActiveTimer 紀錄顯示武器範圍的資料結構
  5. UpdateWeaponFire() 負責武器特效的發射狀態開始,更新與停止
  6. FindAbleToFireWeaponComponent() 只檢查是否有可以射擊的武器(不檢查是否可擊中)
  7. FindAbleToShootTargetWeaponComponent() 只檢查是否可以擊中的武器(不檢查是否填充完畢)
  8. FindAbleWeaponComponent() 取得可以發射且可以攻擊到目標的的武器部件
  9. ActiveWeapon() 發射武器
  10. ActiveEffect() 啟動(顯示)特效
  11. StopEffect() 停止特效及發射狀態
  12. WeaponIsFiring() 檢查武器是否發射中
  13. FindMaximumWeaponRange() 取得各武器中最小攻擊距離
  14. ActiveWeaponRangeObject() 啟動武器距離物件的顯示
  15. UpdateWeaponRangeTimers() 更新武器範圍的計時器,如果計時結束則移除該些武器範圍物件以及該計時器
  16. WeaponReloadIsReady() 檢查武器填充狀態是否完成

WeaponRangeActiveTimerStruct 武器範圍的資料結構

  1. 計時器
  2. 武器範圍的物件

單位的被傷害系統 : UnitDamageSystem

  1. 目前負責創造防護罩(3D)
  2. Update() 負責 更新/關閉 DamageEffect
    1. 防護罩特效
    2. 火花特效
  3. SplitShield() 將 防護罩物件名稱切成 部件名稱
  4. 製造傷害 CauseDamageValueOut() 外部使用
    1. 檢查是否自動播放
    2. 將傳入的部件切為部件名稱
    3. 檢查防護罩的效果(傷害轉換率) 得到真正的傷害
    4. 呼叫 CauseDamageValueIn() 製造傷害
    5. 依照真正傷害值 製造傷害數字特效
  5. CauseDamageValueIn() 對指定部件製造傷害
  6. 傷害文字特效被綁定在製造傷害的函式內,使用變數 m_EffectGUI_DamageNumber 來控制
    1. 目前一個單位使用一個傷害文字。傷害文字不掛在物件下,所以船隻消滅時必須特地移除。
    2. 必須在製造傷害之前呼叫 ActiveDamageNumberEffectNextTime() 設定是否要顯示,以及顯示的時間。
    3. 每次顯示後,數值都會重置。讓下一次的傷害文字顯示正常。
  7. 傳回被擊中的部件 RetrieveHitComponent()
  8. ActiveDamageEffect() 依照部件啟動傷害特效
    1. ActiveDamageEffectByTime() 一定時間內依照部件啟動傷害特效
  9. ActiveGUI_DamageNumberEffectByTime() 啟動傷害文字特效
  10. StopEffectObject() 以名稱強制關閉指定特效
  11. CreateDamageReport() 製造傷害報告(目前關閉中)
  12. CreateDamageSuffer() 紀錄被傷害值,只紀錄船殼被傷害值。
  13. RetrieveRealTargetComponent() 傳回真正被擊中的部件(包含單位的轉換)
    1. RetrieveHitComponent() 透過物理系統傳回真正被擊中的部件,可能單位已經不同了

UsualEventManager 一般事件管理器

  1. 掛在物件 UsualEventManagerObject 上
  2. 有一個事件的串列
    List m_EventList
  3. 管理器負責更新所有事件

VictoryEventManager 勝敗條件管理器

  1. 掛在 GlobalSingleton 上
  2. 有兩個串列分別管理 勝利條件與 失敗條件
  3. CloseSystem() 當滿足條件時會自動切換勝利與失敗狀態 關閉必要的功能
    1. 關閉教學
    2. 關閉戰場特寫
    3. 關閉事件管理器
    4. 關閉關卡目標介面
      1. 關閉之前必須 檢查目前是否有勝利目標 沒有的話失敗不算輸
    5. 關閉能源調整
    6. 關閉小地圖繪圖
    7. 關閉攝影機跟隨
    8. GUIUpdate
    9. 關閉單位產生
    10. 關閉玩家控制
    11. 關閉玩家身上的所有聲音
    12. 關閉 主更新
    13. 關閉戰場選單
    14. 關閉倒數計時及經過時間
  4. 並且顯示對應的圖示
    1. 失敗時檢查如果不是真的失敗,就啟動結束的圖示 MessageCard_End 即可
    2. 真失敗就是失敗圖示
    3. 勝利就是勝利圖示

目前關卡的勝利狀態

public enum VictoryState
{
	VictoryState_UnActive ,
	VictoryState_Win ,
	VictoryState_Lose ,
}

XML

讀取資料的切換器 : LoadDataToXML

XMLParseInterpolatePair 分析XML傳出 InterpolatePair

XMLParseInterpolateTable 分析XML 傳出 InterpolateTable

XMLParseComponentParam 分析XML傳出 ComponentParam 資料

XMLParseWeaponParam 分析 XML 傳出WeaponParam資料

XMLParseLevelUtility

  1. ParseAnchor() 分析位置錨點
  2. ParsePosition() 分析位置
    包含座標及位置物件
  3. ParseQuaternion() 分析旋轉
  4. ParseSupplementalPair() 分析補充資料
  5. ParseUnit() 分析XML
    call ParseUnitInitData()
  6. ParseEnemyGeneration() 分析動態產生單位資料
  7. ParseStandardParameter() 分析XML
  8. ParseAddScriptOnObject() 分析XML 新增script到指定物件
  9. ParseStaticObject() 分析靜態物件
  10. ParseBackgroundMusic() 分析XML 背景音樂設定
  11. ParseConversationSet() 分析對話集合
  12. ParseConversation() 分析對話
  13. ParseTalkStr() 分析字串索引
  14. ParsePotrit() 分析人頭像

XMLParsePosRoute 分析XML傳出 PosRoute

Effect

DamageNumber 傷害文字特效

  1. 目前沒有跟其他特效分類
  2. 由 UnitDamageSystem 所啟動 掛載在GUIText物件
  3. 但不掛在受損單位下
  4. UnitDamageSystem 消失時會連帶被摧毀
  5. Setup() 設定目標物件與顯示文字
  6. StartByTime() 設定經過時間
  7. m_Shift_Speed 移動速度
  8. m_TargetObj 附著在的目標物件

DieInSec 一定時間後移除物件

  1. 預設為1秒

ObjectShakeEffect 物件震動效果

  1. 目前是裝載在防護罩特效物件上
  2. 發動時會記錄原本座標,關閉時會設定回去
  3. 物件隱藏時自動關閉
  4. 目前移動量大小是0.1,請參考 BaseDefine.OBJECT_SHAKE_DISTANCE

DamageEffect 在 UnitDamageSystem 更新的各種傷害特效

  1. IsDestroyAtEnd 是否要在結束時摧毀(不可重複使用)
  2. m_State 目前狀態
    傷害特效的狀態

    /* 傷害更新狀態 */
    [System.Serializable]
    public enum DamageState
    {
    NonActive , // 未啟動
    Active , // 啟動中
    ActiveByTime , // 一定時間啟動
    }
  3. m_CountDownTrigger 計時器
  4. m_EffectObj 特效物件
  5. EffectName() 特效物件的名稱 用來識別這個傷害特效
  6. Start() 啟動(需要外部關閉)
  7. StartByTime() 一定時間啟動
  8. Stop() 關閉
  9. EnableRenderer() 啟動/關閉特效的顯示

ShiftEffect 推動特效

  1. 繼承 DamageEffect
  2. 作用在目標物件上 m_TargetObject
  3. 需要一個作用方向 m_ShiftVec
  4. 會累積在 m_ForceToMoveVec
  5. 被推動物件的質量會影響最終的推動長度
  6. m_PushSpeedBase 基本推動量 質量為1時的物件的每秒推動距離

PullForce 拉力

  1. 由牽引光束特效物件施放 掛載在受到牽引光束的單位上
  2. 參數 m_TargetUnit 被拉過去朝向的目標物件,施放者
  3. 參數 m_MinMaintainDistance 最小維持距離 小於此距離就不再拉
  4. 參數 m_MaxMaintainDistance 最大維持距離 用來計算拉力
  5. 參數 m_PullMaxSpeed 最大拉力速度
  6. Update()
    1. 計算出要被拉動的量 將其存到 m_ForceToMoveVec
  7. 呼叫 DestroyInSec() 後會有一定時間繼續拉動,然後自動消滅此拉力。

PushForce 一定時間的推力

  1. 由 AI_CreateSelf 放在 新創造出來的物件上
  2. 一定時間之後自我摧毀
  3. 參數 m_Force 推力
  4. 參數 m_ElapsedTimer 計時器要推多久

ShockwaveEffect 衝擊波特效

  1. 造成傷害及動畫播放的衝擊波特效
  2. 狀態計時器
    1. 啟動
    2. 動畫結束
  3. 等待聲音播完計時器
  4. 等待動畫播完計時器
  5. 紀錄被波及的單位與部件 unitComponentList
  6. m_DamageValue 傷害值
  7. m_ScaleNow 目前縮放值
  8. m_MaxScaleValue 最大縮放值
  9. m_DetectRange 偵測距離
  10. 開始時間,用來計算縮放值
  11. m_TimeDestinationTime 結束時間,用來計算縮放值
  12. m_Audio 發出的音效
  13. m_AttackerDisplayName 發出震波的攻擊者
  14. SetScale() 設定縮放值
  15. CalculateHit() 啟動時就計算碰撞及傷害

UnitComponentPair 紀錄被波及的單位與部件

Buffer

Nebula_SensorDamper 星雲造成的感測器阻尼

  1. 參數 開始時會去跟 unitData.m_SupplementalVec 取得參數
    1. SensorDamperDistance 阻尼距離
    2. SensorDamperMinimum 阻尼造成的最大影響
  2. 定期檢查 m_RefreshTimer
  3. 檢查周圍的 單位 CheckUnitsArround()
  4. AddOrRewindDamperOnUnit()
    重上發條或是加上新的阻尼器 SensorDamper
  5. 阻尼器自己會消滅.
  6. AddMessage() 加上阻尼後會發出訊息

SensorDamper

  1. 掛載在單位上的感測阻尼
  2. 參數
    1. m_DamperSpeed 阻尼降低的速度
    2. m_ClearSpeed 阻尼還原的速度
    3. m_DamperMinimum 阻尼最低會降到多少
    4. m_AffectTimer 阻尼還原的計時時間
  3. DampTheSensorEffect() 修改單位的感測器數值
  4. ClearSensorDamper() 會去取得感測器並且調整目前功率到指定數值
  5. 會檢查計時器,計時結束就把功率還原,並且摧毀自己。
  6. 狀態

    public enum SensorDamperState
    {
    UnActive = 0 ,
    Damping ,
    ClearEffect ,
    End ,
    }
  7. AddMessage() 結束時會發出訊息

WeaponEffect

  1. 基本的武器特效類別
  2. 被別人所繼承
  3. 掛載在各項武器的 Effect 3D Object 上
  4. 使用 m_WeaponDataShared 來存取各項需要物件
  5. 檢查物件是否被關閉,同時清除武器集合
  6. 必須以 Setup 設定之
  7. 透過此script來運作各項武器特效
  8. 更新位置方向
  9. 判定碰撞及傷害

WeaponCannonEffect

  1. 繼承自 WeaponEffect
  2. 掛載在加農炮類型武器特效物件上
  3. 更新特效物件前進
  4. 檢查碰撞
  5. 碰撞後關閉動畫
  6. 製造傷害
  7. m_MoveSpeed 移動速度

WeaponGiantCannonEffect

  1. 巨型加農砲特效
  2. 繼承自 WeaponCannonEffect
  3. 會製造多一個發射的特效 Template_Effect_GiantCannonFireSmoke

WeaponPhotonTorpedoEffect 光雷特效

  1. 繼承自 WeaponCannonEffect
  2. m_MoveSpeed 移動速度
  3. m_RotateSpeed 自轉速度
  4. Update()
    1. 更新位置及自轉
    2. 檢查關閉
  5. Hit() 擊中單位造成特效及傷害
    關閉特效物件
    關閉武器發射狀態
  6. OnCollisionEnter()
    檢查碰撞並且處發擊中單位
  7. UpdateTargetDirection() 持續修正目標方向(追蹤),
  8. 目前修正角度 m_RotateTargetDirectionAngle 一秒30度

WeaponPhaserEffect 光炮特效

  1. 繼承自 WeaponEffect
  2. 掛載在光炮特效物件上
  3. m_WeaponDataShared 用來進行功能的武器集合
  4. Update()
    1. 更新特效物件 牽引光束
    2. 檢查是否需要關閉
  5. m_DamageCauseTimer 間斷觸發傷害 目前是1.0秒,請參考 BaseDefine.PHASER_CAUSE_DAMAGE_CYCLE_SEC

WeaponTrackorBeamEffect 牽引光束的特效

  1. 繼承自 WeaponPhaserEffect
  2. 掛載在牽引光束特效物件上
  3. Setup() 創造時產生 PullForce 拉力 放在目標物件上
  4. Deactive() 關閉時摧毀目標物件的拉力
    清除 m_WeaponDataShared 不再檢察
  5. Update()
    1. 更新特效物件 牽引光束
    2. m_DamageCountDown 更新對危險單位造成的傷害
    3. m_MaxMaintainDistanceSquare 假如超過最大維持距離就必須主動關閉牽引光束
  6. CauseEffectToUnit() 造成傷害及傷害字特效

WeaponExplosiveTorpedoEffect 爆炸型魚雷效果

  1. 繼承 WeaponPhotonTorpedoEffect
  2. m_DetectRange 偵測距離
  3. 覆寫 CheckHit() 碰撞時不直接造成傷害,而是產生一個衝擊波 Template_Effect_Weapon_Shockwave01 計算傷害。

SystemLogManager 系統記錄器

  1. 記錄系統發生的訊息.必要時可以還原
  2. 目前尚未完成
  3. 不掛在物件上,所以必須由其他script來驅動.
  4. 註解型態為 [時間戳記]:[類型]:[內容]
  5. m_Active 是否啟動
  6. m_KeepWrite 是否持續寫入
  7. m_StartTime 開啟時間
  8. m_Logs 目前(未寫出)記錄
  9. m_SW 寫出的StreamWriter
  10. AddLog() 新增紀錄
  11. Initialize() 初始化
    1. 清除Log
    2. 重置時間
    3. 開啟檔案
  12. ExportToFile() 寫入檔案
⚠️ **GitHub.com Fallback** ⚠️