Hi, I am having an issue with a script not being serialized properly when building for Windows Standalone. When the exe is run, the output log says:
The file ‘C:/Users/One/Desktop/ZipZapTest/Game_Data/sharedassets0.assets’ is corrupted! Remove it and launch unity again!
[Position out of bounds! 35275732 > 35275728]
In the editor log when doing a build I get a few messages like the following:
Unable to properly serialize object for the player of class ‘UnityEngine.GameObject’ because of extra field ‘leftTurrets’ of type ‘ZZTurret modreq(System.Runtime.CompilerServices.IsVolatile)’ (expecting ‘UnityEngine.GameObject’ ‘TurretBasePrefab’)
UnityEditor.BuildPipeline:BuildPlayerInternalNoCheck(String, String, BuildTarget, BuildOptions, Boolean, UInt32&)
UnityEditor.BuildPlayerWindow:BuildPlayerWithDefaultSettings(Boolean, BuildOptions, Boolean) (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\BuildPlayerWindow.cs:743)
UnityEditor.BuildPlayerWindow:BuildPlayerWithDefaultSettings(Boolean, BuildOptions) (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\BuildPlayerWindow.cs:575)
UnityEditor.BuildPlayerWindow:GUIBuildButtons(Boolean, Boolean, Boolean, BuildPlatform) (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\BuildPlayerWindow.cs:1550)
UnityEditor.BuildPlayerWindow:ShowBuildTargetSettings() (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\BuildPlayerWindow.cs:1514)
UnityEditor.BuildPlayerWindow:OnGUI() (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\BuildPlayerWindow.cs:1134)
System.Reflection.MonoMethod:InternalInvoke(Object, Object, Exception&)
System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object, CultureInfo) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222)
System.Reflection.MethodBase:Invoke(Object, Object) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
UnityEditor.HostView:Invoke(String, Object) (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\GUI\DockArea.cs:231)
UnityEditor.HostView:Invoke(String) (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\GUI\DockArea.cs:224)
UnityEditor.HostView:OnGUI() (at C:\BuildAgent\work\d3d49558e4d408f4\Editor\Mono\GUI\DockArea.cs:120)
I have seen similar questions on here that say the problem is related to having a C# and a JS script named the same thing, but I have searched through the entire project and can find no such duplicates.
The script in question looks like this:
using UnityEngine;
using System.Collections;
public enum TurretUpgrade
{
LaserRangeX2,
LaserRangeX4,
LaserSpeedX2,
LaserSpeedX4,
}
public class ZZTurretManager : MonoBehaviour
{
public volatile ZZTurret[] leftTurrets;
public volatile ZZTurret[] rightTurrets;
public AudioClip clip;
ZZGameLogic gameLogic;
Transform theTransform;
public GameObject TurretBasePrefab;
public GameObject Turret2xSpeed;
public GameObject Turret4xSpeed;
public GameObject Turret2xRange;
public GameObject Turret4xRange;
public GameObject Turret2xBoth;
public GameObject Turret4xBoth;
GameObject ChosenTurret;
Vector3[] leftTurretPositions;
Vector3[] rightTurretPositions;
Vector3[] leftTurretRotations;
Vector3[] rightTurretRotations;
ArrayList upgradesObtained;
void Awake()
{
theTransform = this.transform;
ZZCache.turretManager = this;
upgradesObtained = new ArrayList();
leftTurretPositions = new Vector3[leftTurrets.Length];
leftTurretRotations = new Vector3[leftTurrets.Length];
rightTurretPositions = new Vector3[rightTurrets.Length];
rightTurretRotations = new Vector3[rightTurrets.Length];
for (int i = 0; i < leftTurrets.Length; i++)
{
Transform turretTransform = leftTurrets*.transform.parent;*
leftTurretPositions = turretTransform.localPosition;
leftTurretRotations = turretTransform.localEulerAngles;
}
for (int i = 0; i < rightTurrets.Length; i++)
{
Transform turretTransform = rightTurrets*.transform.parent;*
rightTurretPositions = turretTransform.localPosition;
rightTurretRotations = turretTransform.localEulerAngles;
}
}
void Start()
{
gameLogic = ZZCache.gameLogic;
ChosenTurret = TurretBasePrefab;
if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_4X) && IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_4X))
{
ChosenTurret = Turret4xBoth;
}
else if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_2X) && IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_2X))
{
ChosenTurret = Turret2xBoth;
}
else if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_4X) && IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_2X))
{
ChosenTurret = Turret2xBoth;
}
else if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_2X) && IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_4X))
{
ChosenTurret = Turret2xBoth;
}
else if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_4X))
{
ChosenTurret = Turret4xSpeed;
}
else if (IAP.isIAPPurchased(IAP.IAPName.FASTER_SHIP_LASERS_2X))
{
ChosenTurret = Turret2xSpeed;
}
else if (IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_4X))
{
ChosenTurret = Turret4xRange;
}
else if (IAP.isIAPPurchased(IAP.IAPName.SHIP_LASER_RANGE_2X))
{
ChosenTurret = Turret2xRange;
}
for (int i = 0; i < leftTurrets.Length; i++)
{
DestroyImmediate(leftTurrets*.transform.parent.gameObject);*
}
for (int i = 0; i < rightTurrets.Length; i++)
{
DestroyImmediate(rightTurrets*.transform.parent.gameObject);*
}
HealAllTurrets();
}
// Windows Only
public void UpgradeTurrets(TurretUpgrade upgrade)
{
if (!upgradesObtained.Contains(upgrade))
{
upgradesObtained.Add(upgrade);
}
if (upgrade == TurretUpgrade.LaserRangeX2)
{
if (ChosenTurret == TurretBasePrefab)
{
ChosenTurret = Turret2xRange;
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX4) || upgradesObtained.Contains(TurretUpgrade.LaserSpeedX2))
{
ChosenTurret = Turret2xBoth;
}
}
else if (upgrade == TurretUpgrade.LaserSpeedX2)
{
if (ChosenTurret == TurretBasePrefab)
{
ChosenTurret = Turret2xSpeed;
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserRangeX4) || upgradesObtained.Contains(TurretUpgrade.LaserRangeX2))
{
ChosenTurret = Turret2xBoth;
}
}
else if (upgrade == TurretUpgrade.LaserRangeX4)
{
if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX4))
{
ChosenTurret = Turret4xBoth;
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX2))
{
ChosenTurret = Turret2xBoth;
}
else
{
ChosenTurret = Turret4xRange;
}
}
else if (upgrade == TurretUpgrade.LaserSpeedX4)
{
if (upgradesObtained.Contains(TurretUpgrade.LaserRangeX4))
{
ChosenTurret = Turret4xBoth;
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserRangeX2))
{
ChosenTurret = Turret2xBoth;
}
else
{
ChosenTurret = Turret4xSpeed;
}
}
for (int i = 0; i < leftTurrets.Length; i++)
{
if (leftTurrets != null)
{
GameObject go = leftTurrets*.transform.parent.gameObject;*
leftTurrets*.StopAllCoroutines();*
Destroy(go);
}
}
for (int i = 0; i < rightTurrets.Length; i++)
{
if (rightTurrets != null)
{
GameObject go = rightTurrets*.transform.parent.gameObject;*
rightTurrets*.StopAllCoroutines();*
Destroy(go);
}
}
StopAllCoroutines();
StartCoroutine(UpdateTurretSpeed());
if (upgradesObtained.Contains(TurretUpgrade.LaserRangeX4))
{
ZZCache.leftCollider.SetX4Range();
ZZCache.rightCollider.SetX4Range();
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserRangeX2))
{
ZZCache.leftCollider.SetX2Range();
ZZCache.rightCollider.SetX2Range();
}
}
IEnumerator UpdateTurretSpeed()
{
yield return StartCoroutine(Utils.RunAfterFrames(HealAllTurrets, 5));
foreach (ZZTurret turret in leftTurrets)
{
if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX4))
{
turret.SetX4Speed();
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX2))
{
turret.SetX2Speed();
}
}
foreach (ZZTurret turret in rightTurrets)
{
if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX4))
{
turret.SetX4Speed();
}
else if (upgradesObtained.Contains(TurretUpgrade.LaserSpeedX2))
{
turret.SetX2Speed();
}
}
}
public void DisableTurretScripts()
{
for (int i = 0; i < leftTurrets.Length; i++)
{
if (leftTurrets != null)
{
leftTurrets*.enabled = false;*
}
}
for (int i = 0; i < rightTurrets.Length; i++)
{
if (rightTurrets != null)
{
rightTurrets*.enabled = false;*
}
}
}
public void EnableTurretScripts()
{
for (int i = 0; i < leftTurrets.Length; i++)
{
if (leftTurrets != null)
{
leftTurrets*.enabled = true;*
leftTurrets*.readyToFire = true;*
}
}
for (int i = 0; i < rightTurrets.Length; i++)
{
if (rightTurrets != null)
{
rightTurrets*.enabled = true;*
rightTurrets*.readyToFire = true;*
}
}
}
public void PlayAudioOnFire()
{
gameLogic.PlayClip (clip);
}
public void FireAtTarget(GameObject asteroid, bool rightCollider)
{
ZZTurret[] turrets = rightCollider ? rightTurrets : leftTurrets;
Vector3 colliderPosition = asteroid.transform.position;
float closest = float.MaxValue;
ZZTurret closestTurret = null;
foreach (ZZTurret turret in turrets)
{
if (turret.targetAsteroid != null && turret.targetAsteroid.Equals(asteroid))
{
return;
}
}
foreach (ZZTurret turret in turrets)
{
if (turret != null && turret.readyToFire)
{
if (Vector3.Angle(colliderPosition - turret.transform.position, rightCollider ? Vector3.right : Vector3.left) <= 65.0f)
{
float distance = Vector3.Distance(turret.transform.position, colliderPosition);
if (distance < closest)
{
closest = distance;
closestTurret = turret;
}
}
}
}
if (closestTurret != null && !closestTurret.isDestroyed)
{
closestTurret.targetAsteroid = asteroid;
closestTurret.rightTurret = rightCollider;
StartCoroutine(closestTurret.FireProjectile());
}
}
public void DestroyAllTurrets()
{
foreach (ZZTurret turret in leftTurrets)
{
turret.isDestroyed = true;
}
foreach (ZZTurret turret in rightTurrets)
{
turret.isDestroyed = true;
}
}
public void EnableAllTurrets()
{
foreach (ZZTurret turret in leftTurrets)
{
turret.isDestroyed = false;
}
foreach (ZZTurret turret in rightTurrets)
{
turret.isDestroyed = false;
}
}
public void HealAllTurrets()
{
for (int i = 0; i < leftTurrets.Length; i++)
{
if (leftTurrets == null || leftTurrets*.isDestroyed)*
{
GameObject newTurret = Utils.InstantiatePrefab(ChosenTurret, theTransform);
Transform turretTransform = newTurret.transform;
turretTransform.localPosition = leftTurretPositions*;*
turretTransform.localEulerAngles = leftTurretRotations*;*
leftTurrets = newTurret.GetComponentInChildren();
iTween.ScaleFrom(leftTurrets*.transform.parent.gameObject,*
iTween.Hash(false,
“scale”, Vector3.zero,
“time”, 1.0f));
}
}
for (int i = 0; i < rightTurrets.Length; i++)
{
if (rightTurrets == null || rightTurrets*.isDestroyed)*
{
GameObject newTurret = Utils.InstantiatePrefab(ChosenTurret, theTransform);
Transform turretTransform = newTurret.transform;
turretTransform.localPosition = rightTurretPositions*;*
turretTransform.localEulerAngles = rightTurretRotations*;*
rightTurrets = newTurret.GetComponentInChildren();
iTween.ScaleFrom(rightTurrets*.transform.parent.gameObject,*
iTween.Hash(false,
“scale”, Vector3.zero,
“time”, 1.0f));
}
}
}
}