/// <summary> /// Unit类初始化(该方法由GameCtrl.UnitBirth()方法或Gamef.UnitBirth()调用) /// </summary> public void Init(Unit unit) { if (isInit) { return; } isInit = true; //读取单位数据并赋初值 this.unit = unit; name = unit.unitName; data = Gamef.LoadUnitData(name); OriginalMaxV = data.MaxVelocity; OriginalMaxTurningV = data.MaxTurningVelocity; OriginalMaxSP = data.MaxSheildPoint; MaxManaPoint.OriginalValue = data.MaxManaPoint; ManaPoint.OriginalValue = data.MaxManaPoint; MPRegenerationRate.OriginalValue = data.ManaPointRegenerationRate; SPRegenerationRate.OriginalValue = data.ShieldPointRegenerationRate; //初始化速度 maxV_current = OriginalMaxV; Acceleration = maxV_current * GameDB.DAMPED_CONST; //初始化转向速度 maxTurningV_current = OriginalMaxTurningV; AngularAcceleration = maxTurningV_current * GameDB.ANGULAR_DAMPED_CONST; //初始化护盾 maxShieldPoint_current = OriginalMaxSP; sheildPoint_current = OriginalMaxSP; SPRegenerationRate.Init(this); //初始化魔法值 ManaPoint.setValueHandler = ClampMP; MaxManaPoint.setValueHandler = SetMP; MaxManaPoint.Init(this); ManaPoint.Init(this); MPRegenerationRate.Init(this); }
//UnitName unit, Vector3 position, Quaternion rotation public static void CreateObject(ProtocolBase protocol) { int start = 0; ProtocolBytes proto = (ProtocolBytes)protocol; proto.GetNameX(start, ref start); UnitName unitName = (UnitName)proto.GetByte(start, ref start); Vector3 pos = ParseVector3(proto, ref start); Quaternion rot = ParseQuaternion(proto, ref start); int unitId = proto.GetByte(start, ref start); bool isLocal = proto.GetByte(start, ref start) == 1; UnitData unitData = Gamef.LoadUnitData(unitName); GameObject prefab = isLocal ? unitData.LocalPrefab : unitData.NetPrefab; GameObject gameObj = Gamef.Instantiate(prefab, pos, rot); //set id Unit unit = gameObj.GetComponent <Unit>(); unit.InitAttributes(unitId); if (unitName == UnitName.Player && isLocal) { CameraGroupController.Instance.ResetTransform(pos, rot); GameCtrl.PlayerUnit = unit; } }
public void StartCreatePlayer(int playerID) { Debug.Log("Player ID = " + playerID); if (GameSceneInfo.Instance == null) { Debug.Log("Null instance"); } else if (GameSceneInfo.Instance.spawnPoints[playerID] == null) { Debug.Log("Null spawnPoint"); } Transform t = GameSceneInfo.Instance.spawnPoints[playerID].transform; if (GameCtrl.IsOnlineGame) { DataSync.CreateObject(UnitName.Player, t.position, t.rotation); } else { UnitData data = Gamef.LoadUnitData(UnitName.Player); Unit unit = Gamef.Instantiate(data.LocalPrefab, t.position, t.rotation).GetComponent <Unit>(); CameraGroupController.Instance.ResetTransform(t.position, t.rotation); GameCtrl.PlayerUnit = unit; } }