Script - NDark/KobayashiMaruCommanderOS GitHub Wiki
{{toc}}
本頁面說明專案中各項script
主更新 : MainUpdate.cs
請參考 資訊頁面群的跳躍
- 戰後會有資訊頁面的流程,主要目的是給予玩家其他資訊(招募人員,資源路徑清單,或是工作人員,小提示等等)
- 原本的作法是戰後的按鈕直接導向各頁面,然後再由各頁面串接,最後連到回到起始(選擇關卡,或開頭)。
- 也就是把場景轉換的順序寫在場景(Scene)中。較為不彈性(如果要修改必須開Unity一個個場景做調整)
- 目前的作法是遊戲勝負已分就到資訊起始場景Scene_InformationHead,此場景是空的場景。
- 資訊起始場景用來讀入參數檔,並且設定場景參數到GlobalSingleton中。
- 之後(包含資訊起始場景)的所有資訊頁面都是去檢察此設定,然後切入下一個場景。
- 目前相關的運作
- ClickOnMessageCard_BackToSelectScene.cs 取得最終跳躍場景名稱
- LevelGenerator.cs 設定最終跳躍場景名稱
- VictoryEventManager.cs 設定最終跳躍場景名稱
- 透過索引來取得目前語言的字串內容
- m_Filepath 使用檔案名稱,需設定在正確資料夾中
- Register() 註冊物件,當語言更換時會去 呼叫 NotifyObservers() 重置字串
- Get() 依照索引取得字串
- Setup() 依照檔案名稱讀入指定語言的文字設定檔
- 掛載在各場景的主要節點上
- 如果已經初始化就不要重複初始化
- 會取得目前玩家的使用語言
關卡讀檔 LevelGenerator
- 裝載在關卡場景物件上,用來定義場景的大小。
- 場景是用 plane 製作的 所以參數是以plane為客製化。
- 基本大小 : plane未縮放時的大小 5*5
- 基本縮放 : 我們縮放在xz軸向
- 寬度 = 基本大小 * 基本縮放
- 邊界大小 : 在xz軸向的邊界寬度
- 可移動範圍 = 寬度 – 邊界大小
- 以v0.9為標準,場景的可移動範圍是120*120
- IsOutofLevel() 判斷一個座標點是否超過邊界範圍
- 在 MainUpdate::UpdatePosition() 中 會依此 判斷船隻是否有超過可移動範圍
- 依照設定產生單位及敵人的控制
- 分成單位及敵人兩個串列來產生
- m_UnitGenerationTable
- m_EnemyGenerationTable
- 索引也是分為兩個串列
- m_UnitGenerationIndex
- m_EnemyGenerationIndex
- 已經產生的敵人特別紀錄在 m_EnemyGeneratedTable
- AddUnitGeneration() 新增產生的單位
- 目前是依照名稱來決定是單位還是敵人
- 呼叫 GenerateEnemy() 產生的物件是依照資料結構 UnitGenerationData 內的資料來呼叫 LevelGenerator::GenerateUnit() 產生物件
- 目前 產生的順序是依照索引,依次判斷時間產生.
- 目前 呼叫 GetRemainingEnemyNum() 透過此計算場上還有的敵人 讓模組化的勝負判定 判定勝利
其中是要判定 還在排序中的敵人 + 場景中的敵人 是否已經消滅=0 - InsertEnemyGenerationTable() 立即插入敵人
- TryActiveBattleEventCamera() 嘗試啟動戰場特寫
- 目前還未完成
- 掛在 GlobalSingleton 下
- 預設是關閉
- 請參考 系統記錄及自動播放
- 會讀取系統紀錄的文件 SystemLogKeep.txt
- 依照系統紀錄來檢查時間同時觸發內容
- 戰場特寫管理器
- 當敵人產生時 EnemyGenerator::TryActiveBattleEventCamera() 會呼叫此管理器
- 控制攝影機 m_BattleEventCamera
- 設定其跟隨器 m_CameraFollower
- Setup() 啟動展場特寫,需要傳入跟隨物件,以及索引
- 索引是用來決定戰場特寫的位置在上下左右四個座標
- SetupByTime() 啟動後一定時間關閉
- CheckTargetIsValid() 檢察目標是否存活,目標消失就馬上關閉
- 除了上下左右四個座標之外,戰場特寫還有上下左右四個箭頭
- Close()
- 關閉箭頭
- 關閉Follower
- 關閉攝影機的顯示
- 設定狀態為未啟動
- 注意!!script要綁在有collider的物件下才會觸發。目前是綁在ClickCube這個子物件下。統一由此子物件來觸發點選單位。
- 檢查 OnMouseDown() / OnMouseUp() 。
- 假如曾經按下 mouse down 並在一定時間內放開才算一次的click。
- click call TellMainCharacterClick() 通知main character點選某物件。
- 只紀錄碰撞的對象不做處理
- 目前綁在導彈的CollideCube上
- 目前只有導彈的AI會去檢查
- 注意,此script是綁在底層的碰撞物件CollideCube上,而非船隻的物件上,所以要找資料要再往上一層。
- 檢查被碰撞(自己)的單位
- 檢查碰撞上的單位
- 非存活的單位不碰撞
- 如果沒有UnitData則不會碰撞
- CauseCameraShakeEffect() 如果主角撞到,則開啟攝影機震動特效。
- CauseDamage() 給予傷害 的條件是 有傷害系統
- CreateForce() 製造推開的力量(直接作用在物件,不透過MoveVec)
- 推開的力量向量依照物件的重量而決定 請參考 BaseDefine.STANDARD_COLLIDE_PUSH_SPEED
- 碰撞製造的傷害值 請參考 BaseDefine.COLLIDE_DAMAGE_IN_SEC
- 傷害值顯示的持續時間是 1.0秒
- 製造攝影機震動效果的持續時間是0.5
- 裝在Template_Effect_PhaserSparks上.
- 當玩家被擊中,身上有火花時,觸發攝影機震動特效
- 只有火花在主角身上才可震動
- 找到攝影機的 CameraShakeEffect 來啟動震動效果
- 間隔一段時間 不斷觸發
- 目前觸發週期是 0.4s , 一次設定搖晃 0.5s 來達到不間斷的效果
- CheckWinOrLose() 檢查勝利之後不可繼續震動
- 掛在Camera上
- 會去取得 CameraInitialization 的距離原點參數 來作為持續保持 與玩家位置的距離
- UpdateCameraPosition()
依照感測器的目前比例與上下限計算出縮放的比例,然後以標準的距離作縮放得到距離玩家的長度
由玩家的位置反推為攝影機的位置,最後傳給 CameraShakeEffect - RetrieveSensorEffect() 取回感測器的目前功效,
再以變數 m_SensorTotalEffectStandard 標準感測器數值做參考,計算得出一個比例,
當單位感測器數值有變化時,就是攝影機要調整的距離值變化值。
請參考 STANDARD_SENSOR_TOTAL_EFFECT - m_MinScaleDistanceFromCharacter 與 m_MaxScaleDistanceFromCharacter 是攝影機縮放的上下限。
自感測器比例0.0到2.0。
請參考 MIN_SCALE_FROM_STANDARD_DISTANCE 與 MAX_SCALE_FROM_STANDARD_DISTANCE。
- 攝影機追蹤一個單位
- 簡化版的 CameraFollowMainCharacter
- 用在 戰場事件的攝影機上
- m_FollowUnit 追蹤的單位
- Setup() 時傳入單位並啟動
- Close() 時關閉
- UpdateCameraPosition() 更新攝影機位置
- 初始化攝影機的位置
- 也代表攝影機與玩家的基本距離
- 由目前的攝影機再加上一個亂數位移 做出不斷震動的效果
- 必須在玩家活著的時候才啟用
- 震動時間經過後就關閉.
- 掛在主攝影機上
- 目前有兩種方式觸發攝影機的搖晃特效
- 主角船撞到其他物件時
- 主角船掛上火花特效時
- 變數
- 啟動與否 m_Active
- KeepMinimapCameraUnderTheMap()
因為移動了主攝影機,必須讓小地圖攝影機的位置持續保持在地圖下,
才能看到正確的小地圖。
每次呼叫設定主攝影機的位置 SetPosToCamera() 都必須連帶執行。
singleton的靜態函式
- 基本定義 BaseDefine.cs
- CLICK_SEC : The Click Sec
- WAIT_SEC_AFTER_SHOW : The wait sec after show
- COLLIDE_DAMAGE_IN_SEC : The collide damage in a sec.
- STANDARD_COLLIDE_PUSH_SPEED : The standard push speed when collide.
- STANDARD_SENSOR_TOTAL_EFFECT : Constant standard sensor toatl effect.
- MIN_SCALE_FROM_STANDARD_DISTANCE_CAMERA : Constant min and max scale from standard distance of camera
- MAX_SCALE_FROM_STANDARD_DISTANCE_CAMERA : Constant min and max scale from standard distance of camera
- CAMERA_SHAKE_DISTANCE : Constant camera shake distance
- OBJECT_SHAKE_DISTANCE : Constant object shake distance.
- STANDARD_PUSH_DISTANCE : Constant push distance when mass is 1.
- DRAW_MINIMAP_REFRESH_SEC : Constant second of refresh draw minimap.
- SENSOR_REFRESH_SEC
- SLOWMOTION_SCALE_IN_TIME
- FREEZE_SCALE_IN_TIME
- NORMAL_SCALE_IN_TIME
- MESSAGE_QUEUE_SHOW_SEC
- MESSAGE_QUEUE_FADEOUT_SEC
- PHASER_CAUSE_DAMAGE_CYCLE_SEC
- BATTLE_EVENT_CAMERA_ELAPSED_SEC
- ConstName.cs 靜態名稱定義
- 用來做字串相關的定義及產生
- iterator = 0 ;// 用來產生新物件讓物件名稱不重複的的序號
- GlobalSingleton.cs 全域物件及元件取得器
- m_LevelString 用來記錄目前要讀取的關卡關鍵字串,由選關場景寫入,戰鬥場景讀出
- m_AcknowledgementGUIOBjectName 選關之後是否要開啟感謝的GUIObjectName
- m_CurrentModeSelectSceneString 用來記錄關卡結束後的要回到哪一個選擇關卡場景
- m_CustomActive 是否開啟客製化主角船
- m_CustomPrefabName 客製化主角船的prefab名稱
- m_CustomDefaultPrefabName 客製化主角船的prefab預設名稱
- m_CustomUnitDataName 客製化主角船的unitdata樣本名稱
- m_CustomDefaultUnitDataName 客製化主角船的unitdata樣本預設名稱
- ResetCustomData() 重置及關閉客製化設定
- m_InformationSequenceFilepath 資訊頁面的設定檔路徑
- m_InformationSceneEnd 資訊頁面預設的返回點
- m_InformationSequenceIsInitialized 資訊頁面是否已經初始化
- m_InformationSequenceIndex 資訊頁面的目前索引
- m_InformationSceneNames 資訊頁面的目前表格
- InitializeInformationSequence() 初始化資訊頁面表格
- TryLoadInformationNext() 嘗試讀入資訊頁面下一個場景
- InterpolateTable 內插表
- Language.cs 語言選項
public enum Language
{
English = 0 ,
TraditionalChinese,
}
- 數學運算 Mathmatic.cs
- FindDotofCrossAndUp() 計算 外積與左右轉參數
- FindTargetRelationWithForward() 計算物件的相對關係
- FindTargetRelation() 計算物件的相對關係
- FindUnitRelation() 計算物件的相對關係
- Interpolate() 計算內差
- RandomVector() 隨機向量(可抹除某軸向的直)
- RandomRatioValue() 隨機值(最小到最大,可指定某精度)
- CreateWeaponRangeObject() 計算並產生武器範圍的顯示物件
- IsInScreen() 檢查物件是否在螢幕內
- IsTooFarFromScreen() 檢查物件是否在離開螢幕太遠(需要刪除)
- NamedObject.cs 名稱與物件取得器
- PosAnchor.cs 物件或座標取得器
- PosRoute.cs 移動節點
- m_Destination 目標
- m_MoveTime 移動時間
- m_WaitTime 等待時間
- m_MoveDetectGUIObject 移動時偵測的GUI物件
- m_WaitDetectGUIObject 等待時偵測的GUI物件
- prefab讀入與具現化 PrefabInstantiate.cs
- Create() 具現化物件
- CreateByInit() 依照座標具現化物件
- ResourceLoad.cs 資源讀入
- GetDataPath() 取得資料(data)夾的位置,同時考慮語言。
- SetLanguageNow() 設定目前使用的語言,同時會修改路徑 CONST_LanguagePrefix
- LoadAudio()
- LoadTexture()
- LoadPrefab()
- LoadDataToTextAsset() 將Resource內的資料讀為TextAsset
- ShowGUITexture.cs 取得物件並顯示/關閉 GUI
- Show() 顯示關閉指定物件的 GUITexture , GUIText , 或是物件其下的子物件
- Switch() 切換指定物件其下所有的 GUITexture , GUIText , 或是物件其下的子物件
- 有序狀態 StateIndex.cs
A index class with ability to record time,
and first time after previous assign state.- call Initialize() at start
- call Update() in the front of each update to make sure the correctness of IsFirstTime().
- UnitObject 單位物件
- 繼承自 NamedObject
- 新增變數 UnitData
- BasicTrigger 基本觸發器
- Initialize() set state to UnActive ( IsReady() )
- Start() set state to Active ( IsActive() )
- End() / Close() set state to Closed. ( IsClosed() )
- TimeTrigger 時間開始結束觸發
Time trigger with start time and elapsed time to end.- IsStarted() , time is pass the start time.
- IsEnded() , time is pass the elapsed time (from last change state).
- call IsAboutToStart() to check is the first time to start, and make it start by argument.
- call IsAboutToClose() to check is the only time to end after elapsed time from the first time, and make it end by argument.
- CountDownTrigger 倒數計時觸發
- m_CountDownTime 倒數秒數
- make sure call Rewind() before each using.
- call IsCountDownToZero() to check it.
- 條件觸發 基本物件
- IsTrue() 是否可以觸發
- HasTriggered() 是否已經處發
- ParseXML() 分析參數
- 參數
- StartTime
- 參數
- JudgeDistance 判斷距離
- TestObjectName 碰撞的測試物
- TestObjectName{0} 碰撞的測試物(複數)
- PosAnchor 碰撞的檢查點
- 參數
- UnitName
- 繼承 Condition_UnitIsDead
- 繼承 Condition_UnitIsDead
- ComponentName of this component in UnitData.
- UnitObjectName and its unit object of the component.
- Component 3D Object Name and its Object of the component under GameObject.
- Effect 3D Object Name and its Object of the component.
- m_Component3DObject.Name 與 m_Effect3DObject.Name 會自動在設定 ComponentName 時創造出來
- 定義在參數檔 ComponentParamTable.xml 中
- m_ComponentName 部件名稱
- m_Effect3DObjectTemplateName 指定要使用的特效樣板名稱
- m_Component3DObject 部件3D物件
- m_GUI : GUI參數 GUIParam
- GUIRect 位置定義
- DisplayName 顯示名稱
- m_IsFlip 是否要反向,會影響到傳回的 GUIRect()
- 繼承自 ComponentDataSet
- m_WeaponType 武器種類
/* - @enum WeaponType
*/
[System.Serializable]
public enum WeaponType
{
WeaponType_None = 0 ,
WeaponType_Phaser ,
WeaponType_Torpedo ,
WeaponType_Cannon ,
WeaponType_TrakorBeam ,
}
- m_FireState 目前發射狀態
/* - @enum WeaponFireState
*/
public enum WeaponFireState
{
UnActive = 0 ,
Ready ,
FireAnimating ,
Firing ,
FireCompleting ,
Recharging ,
}
- m_WeaponType 武器種類
- m_FireState 目前發射狀態
- m_TargetComponentObject 目標部件物件
- m_TargetUnitObject 目標單位
- m_TargetDirection 目標方向
- m_Displacement 誤差向量
- m_FireStartTime 開火時間
- m_FireTotalTime 開火總時間
- m_FireAudio 發射的音效
- m_CauseDamage 製造傷害量
- m_RelativeDamageEffectNames 開火過程觸發的特效清單
- m_ComponentName 武器部件名稱
- m_Angle 武器可發射角度
- m_Range 武器可發射距離
- m_Accuracy 武器準確度
- m_FireAudioName 武器發射音效名稱
- 讓點選物件與攝影機維持一直線
- 距離鎖定在6.0,超過碰撞的子物件5.0。
單位部件資料
- all components in UnitData will be the kind of type.
- UnitIntagraty
- Weapons
- Shields
- Sensor
- Engines
- Transporter
- LifeSupport
- Their attributes are…
- HP
- Generation
- Energy
- Effect
- Status
- ReloadEnergy
- ReloadGeneration
- WeaponReloadStatus
- ComponentParam
- WeaponParam
- StatusDescription
- Effect-HP Curve
- IsOffline() Is this component offline or not including ForceOffline.
- IsDown() Is this component offline or not , not includeing ForceOffline.
- SetEnergyRatio() m_Energy.now = Ratio * m_Energy.mStd ;
- EnergyRatio() : m_Energy.Ratio() ;
- TotalGeneration() : m_Generation.m_Now * EnergyRatio() ;
- TotalReloadGeneration() : m_ReloadGeneration.m_Now * EnergyRatio() ;
- TotalEffect() : m_Effect.m_Now * EnergyRatio() ;
- UpdateHP() Update hp and status of this component.
- UpdateReload() Update m_ReloadEnergy and reload status of this weapon component.
UnitData會用的基本資料
- 標準資料
- ComponentStatus 部件的狀態
- WeaponReloadStatus 武器填充的狀態
- ComponentStatusColor::GetColor() 得到狀態相對應的顏色
- 掛載在單位上
- 朝向某個地點持續前進
- Setup() 啟動時傳入目標位置 以及最大持續時間
- Stop() 停止自動控制
- IsActiveAutoPilot() 檢查自動控制是否運作中
- ChangeImpuseEngineRatio() 依照距離來加減速 傳回true表示停止
- KeepDestinationAtScreen() 保持目標一直在螢幕點
- ConfirmTutorialRightClickToMove() 檢查右鍵移動教學
- CheckOutOfSpace() 檢查目標點是否超過關卡範圍,並顯示靜止貼圖。
- 自動收集附近的單位清單
- 有一個 單位清單 m_SensorUnitList
- 收集距離為 m_SensorDistance 會不斷跟UnitData更新
- m_RefreshTimer 一定周期才更新,請參考BaseDefine.SENSOR_REFRESH_SEC
- GetClosestObj() 取得最近單位
- CheckSensorDistance() 取得感測部件的功效
- CheckUnitAround() 重新檢查附近的單位
- 指定 初始位置 與 初始轉向
- 將本物件註冊到 MainUpdate 中
單位的描準系統 : UnitSelectionSystem
- CreateWeapons() 負責呼叫UnitData創造武器
- 創造後的資料集合放在 m_WeaponDataMap 容器中
- 結束時會去摧毀相關的物件
- m_WeaponRangeActiveTimer 紀錄顯示武器範圍的資料結構
- UpdateWeaponFire() 負責武器特效的發射狀態開始,更新與停止
- FindAbleToFireWeaponComponent() 只檢查是否有可以射擊的武器(不檢查是否可擊中)
- FindAbleToShootTargetWeaponComponent() 只檢查是否可以擊中的武器(不檢查是否填充完畢)
- FindAbleWeaponComponent() 取得可以發射且可以攻擊到目標的的武器部件
- ActiveWeapon() 發射武器
- ActiveEffect() 啟動(顯示)特效
- StopEffect() 停止特效及發射狀態
- WeaponIsFiring() 檢查武器是否發射中
- FindMaximumWeaponRange() 取得各武器中最小攻擊距離
- ActiveWeaponRangeObject() 啟動武器距離物件的顯示
- UpdateWeaponRangeTimers() 更新武器範圍的計時器,如果計時結束則移除該些武器範圍物件以及該計時器
- WeaponReloadIsReady() 檢查武器填充狀態是否完成
- 計時器
- 武器範圍的物件
- 目前負責創造防護罩(3D)
- Update() 負責 更新/關閉 DamageEffect
- 防護罩特效
- 火花特效
- SplitShield() 將 防護罩物件名稱切成 部件名稱
- 製造傷害 CauseDamageValueOut() 外部使用
- 檢查是否自動播放
- 將傳入的部件切為部件名稱
- 檢查防護罩的效果(傷害轉換率) 得到真正的傷害
- 呼叫 CauseDamageValueIn() 製造傷害
- 依照真正傷害值 製造傷害數字特效
- CauseDamageValueIn() 對指定部件製造傷害
- 傷害文字特效被綁定在製造傷害的函式內,使用變數 m_EffectGUI_DamageNumber 來控制
- 目前一個單位使用一個傷害文字。傷害文字不掛在物件下,所以船隻消滅時必須特地移除。
- 必須在製造傷害之前呼叫 ActiveDamageNumberEffectNextTime() 設定是否要顯示,以及顯示的時間。
- 每次顯示後,數值都會重置。讓下一次的傷害文字顯示正常。
- 傳回被擊中的部件 RetrieveHitComponent()
- ActiveDamageEffect() 依照部件啟動傷害特效
- ActiveDamageEffectByTime() 一定時間內依照部件啟動傷害特效
- ActiveGUI_DamageNumberEffectByTime() 啟動傷害文字特效
- StopEffectObject() 以名稱強制關閉指定特效
- CreateDamageReport() 製造傷害報告(目前關閉中)
- CreateDamageSuffer() 紀錄被傷害值,只紀錄船殼被傷害值。
- RetrieveRealTargetComponent() 傳回真正被擊中的部件(包含單位的轉換)
- RetrieveHitComponent() 透過物理系統傳回真正被擊中的部件,可能單位已經不同了
- 掛在物件 UsualEventManagerObject 上
- 有一個事件的串列
List m_EventList - 管理器負責更新所有事件
- 掛在 GlobalSingleton 上
- 有兩個串列分別管理 勝利條件與 失敗條件
- CloseSystem() 當滿足條件時會自動切換勝利與失敗狀態 關閉必要的功能
- 關閉教學
- 關閉戰場特寫
- 關閉事件管理器
- 關閉關卡目標介面
- 關閉之前必須 檢查目前是否有勝利目標 沒有的話失敗不算輸
- 關閉能源調整
- 關閉小地圖繪圖
- 關閉攝影機跟隨
- GUIUpdate
- 關閉單位產生
- 關閉玩家控制
- 關閉玩家身上的所有聲音
- 關閉 主更新
- 關閉戰場選單
- 關閉倒數計時及經過時間
- 並且顯示對應的圖示
- 失敗時檢查如果不是真的失敗,就啟動結束的圖示 MessageCard_End 即可
- 真失敗就是失敗圖示
- 勝利就是勝利圖示
public enum VictoryState { VictoryState_UnActive , VictoryState_Win , VictoryState_Lose , }
讀取資料的切換器 : LoadDataToXML
- ParseAnchor() 分析位置錨點
- ParsePosition() 分析位置
包含座標及位置物件 - ParseQuaternion() 分析旋轉
- ParseSupplementalPair() 分析補充資料
- ParseUnit() 分析XML
call ParseUnitInitData() - ParseEnemyGeneration() 分析動態產生單位資料
- ParseStandardParameter() 分析XML
- ParseAddScriptOnObject() 分析XML 新增script到指定物件
- ParseStaticObject() 分析靜態物件
- ParseBackgroundMusic() 分析XML 背景音樂設定
- ParseConversationSet() 分析對話集合
- ParseConversation() 分析對話
- ParseTalkStr() 分析字串索引
- ParsePotrit() 分析人頭像
- 目前沒有跟其他特效分類
- 由 UnitDamageSystem 所啟動 掛載在GUIText物件
- 但不掛在受損單位下
- UnitDamageSystem 消失時會連帶被摧毀
- Setup() 設定目標物件與顯示文字
- StartByTime() 設定經過時間
- m_Shift_Speed 移動速度
- m_TargetObj 附著在的目標物件
- 預設為1秒
- 目前是裝載在防護罩特效物件上
- 發動時會記錄原本座標,關閉時會設定回去
- 物件隱藏時自動關閉
- 目前移動量大小是0.1,請參考 BaseDefine.OBJECT_SHAKE_DISTANCE
- IsDestroyAtEnd 是否要在結束時摧毀(不可重複使用)
- m_State 目前狀態
傷害特效的狀態
/* 傷害更新狀態 */
[System.Serializable]
public enum DamageState
{
NonActive , // 未啟動
Active , // 啟動中
ActiveByTime , // 一定時間啟動
}
- m_CountDownTrigger 計時器
- m_EffectObj 特效物件
- EffectName() 特效物件的名稱 用來識別這個傷害特效
- Start() 啟動(需要外部關閉)
- StartByTime() 一定時間啟動
- Stop() 關閉
- EnableRenderer() 啟動/關閉特效的顯示
- 繼承 DamageEffect
- 作用在目標物件上 m_TargetObject
- 需要一個作用方向 m_ShiftVec
- 會累積在 m_ForceToMoveVec
- 被推動物件的質量會影響最終的推動長度
- m_PushSpeedBase 基本推動量 質量為1時的物件的每秒推動距離
- 由牽引光束特效物件施放 掛載在受到牽引光束的單位上
- 參數 m_TargetUnit 被拉過去朝向的目標物件,施放者
- 參數 m_MinMaintainDistance 最小維持距離 小於此距離就不再拉
- 參數 m_MaxMaintainDistance 最大維持距離 用來計算拉力
- 參數 m_PullMaxSpeed 最大拉力速度
- Update()
- 計算出要被拉動的量 將其存到 m_ForceToMoveVec
- 呼叫 DestroyInSec() 後會有一定時間繼續拉動,然後自動消滅此拉力。
- 由 AI_CreateSelf 放在 新創造出來的物件上
- 一定時間之後自我摧毀
- 參數 m_Force 推力
- 參數 m_ElapsedTimer 計時器要推多久
- 造成傷害及動畫播放的衝擊波特效
- 狀態計時器
- 啟動
- 動畫結束
- 等待聲音播完計時器
- 等待動畫播完計時器
- 紀錄被波及的單位與部件 unitComponentList
- m_DamageValue 傷害值
- m_ScaleNow 目前縮放值
- m_MaxScaleValue 最大縮放值
- m_DetectRange 偵測距離
- 開始時間,用來計算縮放值
- m_TimeDestinationTime 結束時間,用來計算縮放值
- m_Audio 發出的音效
- m_AttackerDisplayName 發出震波的攻擊者
- SetScale() 設定縮放值
- CalculateHit() 啟動時就計算碰撞及傷害
- 參數 開始時會去跟 unitData.m_SupplementalVec 取得參數
- SensorDamperDistance 阻尼距離
- SensorDamperMinimum 阻尼造成的最大影響
- 定期檢查 m_RefreshTimer
- 檢查周圍的 單位 CheckUnitsArround()
- AddOrRewindDamperOnUnit()
重上發條或是加上新的阻尼器 SensorDamper - 阻尼器自己會消滅.
- AddMessage() 加上阻尼後會發出訊息
- 掛載在單位上的感測阻尼
- 參數
- m_DamperSpeed 阻尼降低的速度
- m_ClearSpeed 阻尼還原的速度
- m_DamperMinimum 阻尼最低會降到多少
- m_AffectTimer 阻尼還原的計時時間
- DampTheSensorEffect() 修改單位的感測器數值
- ClearSensorDamper() 會去取得感測器並且調整目前功率到指定數值
- 會檢查計時器,計時結束就把功率還原,並且摧毀自己。
- 狀態
public enum SensorDamperState
{
UnActive = 0 ,
Damping ,
ClearEffect ,
End ,
}
- AddMessage() 結束時會發出訊息
- 基本的武器特效類別
- 被別人所繼承
- 掛載在各項武器的 Effect 3D Object 上
- 使用 m_WeaponDataShared 來存取各項需要物件
- 檢查物件是否被關閉,同時清除武器集合
- 必須以 Setup 設定之
- 透過此script來運作各項武器特效
- 更新位置方向
- 判定碰撞及傷害
- 繼承自 WeaponEffect
- 掛載在加農炮類型武器特效物件上
- 更新特效物件前進
- 檢查碰撞
- 碰撞後關閉動畫
- 製造傷害
- m_MoveSpeed 移動速度
- 巨型加農砲特效
- 繼承自 WeaponCannonEffect
- 會製造多一個發射的特效 Template_Effect_GiantCannonFireSmoke
- 繼承自 WeaponCannonEffect
- m_MoveSpeed 移動速度
- m_RotateSpeed 自轉速度
- Update()
- 更新位置及自轉
- 檢查關閉
- Hit() 擊中單位造成特效及傷害
關閉特效物件
關閉武器發射狀態 - OnCollisionEnter()
檢查碰撞並且處發擊中單位 - UpdateTargetDirection() 持續修正目標方向(追蹤),
- 目前修正角度 m_RotateTargetDirectionAngle 一秒30度
- 繼承自 WeaponEffect
- 掛載在光炮特效物件上
- m_WeaponDataShared 用來進行功能的武器集合
- Update()
- 更新特效物件 牽引光束
- 檢查是否需要關閉
- m_DamageCauseTimer 間斷觸發傷害 目前是1.0秒,請參考 BaseDefine.PHASER_CAUSE_DAMAGE_CYCLE_SEC
- 繼承自 WeaponPhaserEffect
- 掛載在牽引光束特效物件上
- Setup() 創造時產生 PullForce 拉力 放在目標物件上
- Deactive() 關閉時摧毀目標物件的拉力
清除 m_WeaponDataShared 不再檢察 - Update()
- 更新特效物件 牽引光束
- m_DamageCountDown 更新對危險單位造成的傷害
- m_MaxMaintainDistanceSquare 假如超過最大維持距離就必須主動關閉牽引光束
- CauseEffectToUnit() 造成傷害及傷害字特效
- 繼承 WeaponPhotonTorpedoEffect
- m_DetectRange 偵測距離
- 覆寫 CheckHit() 碰撞時不直接造成傷害,而是產生一個衝擊波 Template_Effect_Weapon_Shockwave01 計算傷害。
- 記錄系統發生的訊息.必要時可以還原
- 目前尚未完成
- 不掛在物件上,所以必須由其他script來驅動.
- 註解型態為 [時間戳記]:[類型]:[內容]
- m_Active 是否啟動
- m_KeepWrite 是否持續寫入
- m_StartTime 開啟時間
- m_Logs 目前(未寫出)記錄
- m_SW 寫出的StreamWriter
- AddLog() 新增紀錄
- Initialize() 初始化
- 清除Log
- 重置時間
- 開啟檔案
- ExportToFile() 寫入檔案