Hello.
I make a laser shooting game. Camera moves itself on a way. And i stuck on optimizing process. I write script, that rotate my camera to 1 of 4 angle and instantiate bots. But sometimes i see in the profiler spikes with this script. The original code contains about 500 lines of code. I’ve heard that instantiate a heavy function and in its place is better on and off gameObjects. But I do not know how it can be implemented. Here is the part of code:
#pragma strict
private var rndView : float;
static var angle_x : float;
static var angle_y : float;
var Bot_PM : GameObject;
var Bot_AK : GameObject;
var Bot_PM_UP : GameObject;
var Bot_AK_UP : GameObject;
var Bot_PM_ShootUP : GameObject;
var Bot_AK_ShootUP : GameObject;
var Bot_PM_ShootDown : GameObject;
var Bot_AK_ShootDown : GameObject;
var Hostage_Stand : GameObject;
var Hostage_Run : GameObject;
private var s_point_1 : Transform;
private var s_point_2 : Transform;
private var s_point_3 : Transform;
var S_Points : Transform[];
private var thingToMake : GameObject;
private var rndS : int;
private var rndPoint : int;
private var Hostage : GameObject;
private var location : Transform;
private var randomPick : int;
private var rndBot : int;
private var b_Spawn_at_1 : boolean;
private var b_Spawn_at_2 : boolean;
private var b_Spawn_at_3 : boolean;
var Aux_Points : Transform[];
var Hostage_Points : Transform[];
private var hostage_location : Transform;
function Start () {
b_Spawn_at_1 = false;
b_Spawn_at_2 = false;
b_Spawn_at_3 = false;
}
function Update () {
// Simply say if all terrorists killed in view, change view and spawns new bots.
// Maybe there is better to use coroutine? or invoke function?
if(Terrorist_Counter_Level_3.b_Spawn){
b_Spawn_at_1 = false;
b_Spawn_at_2 = false;
b_Spawn_at_3 = false;
ChangeView();
Check();
Spawn();
if(CamMov_Level_3.b_InPos_3 || CamMov_Level_3.b_InPos_4 || CamMov_Level_3.b_InPos_7 || CamMov_Level_3.b_InPos_8){
SpawnHostage_Stand();
}
if(CamMov_Level_3.b_InPos_1 || CamMov_Level_3.b_InPos_5 || CamMov_Level_3.b_InPos_9){
SpawnHostage_Run();
}
Terrorist_Counter_Level_3.b_Spawn = false;
Terrorist_Counter_Level_3.b_can_Run = false;
}
if(Terrorist_Counter_Level_3.b_can_move){
transform.position = Camera.mainCamera.transform.position;
}
}
//Here I check what position the player is and what angles can rotate the camera. I left here one position to not take up much space
function ChangeView(){
rndView = Random.Range(1,3);
if(CamMov_Level_3.b_InPos_3 || CamMov_Level_3.b_InPos_7)
{
if(rndView == 1)
{
if(angle_y != 328){
angle_x = 0;
angle_y = 328;
}
else
{
angle_x = 0;
angle_y = 238;
}
}
if(rndView == 2)
{
if(angle_y != 238){
angle_x = 0;
angle_y = 238;
}
else
{
angle_x = 0;
angle_y = 328;
}
}
}
RndRotation();
}
function RndRotation() {
transform.eulerAngles = Vector3(angle_x,angle_y,0);
}
//Here I check what position the player is and what bot must be instantiated. There i left one position, other is similar.
function Spawn(){
for (var i : int = 0; i < Terrorist_Counter_Level_3.rndN; i++)
{
rndBot = Random.Range(1,3);
if(CamMov_Level_3.b_InPos_3 || CamMov_Level_3.b_InPos_4 || CamMov_Level_3.b_InPos_7 || CamMov_Level_3.b_InPos_8){
randomPick = Random.Range(1,4);
if(randomPick == 1){
if(!b_Spawn_at_1){
location = s_point_1;
b_Spawn_at_1 = true;
}
else if(!b_Spawn_at_2){
location = s_point_2;
b_Spawn_at_2 = true;
}
else if(!b_Spawn_at_3){
location = s_point_3;
b_Spawn_at_3 = true;
}
}
if(randomPick == 2){
if(!b_Spawn_at_2){
location = s_point_2;
b_Spawn_at_2 = true;
}
else if(!b_Spawn_at_1){
location = s_point_1;
b_Spawn_at_1 = true;
}
else if(!b_Spawn_at_3){
location = s_point_3;
b_Spawn_at_3 = true;
}
}
if(randomPick == 3){
if(!b_Spawn_at_3){
location = s_point_3;
b_Spawn_at_3 = true;
}
else if(!b_Spawn_at_2){
location = s_point_2;
b_Spawn_at_2 = true;
}
else if(!b_Spawn_at_1){
location = s_point_1;
b_Spawn_at_1 = true;
}
}
if(rndBot == 1){
thingToMake = Instantiate(Bot_AK_UP,location.position, location.rotation);
}
if(rndBot == 2){
thingToMake = Instantiate(Bot_PM_UP,location.position, location.rotation);
}
}
}
// Here i check in which position player and assign spawn points.
function Check()
{
if(CamMov_Level_3.b_InPos_3)
{
if(angle_y == 238 angle_x == 0){
s_point_1 = S_Points[8];
s_point_2 = S_Points[9];
s_point_3 = Aux_Points[0];
hostage_location = Hostage_Points[0];
}
if(angle_y == 328 angle_x == 0){
s_point_1 = S_Points[10];
s_point_2 = S_Points[11];
s_point_3 = Aux_Points[1];
hostage_location = Hostage_Points[1];
}
}
}
function SpawnHostage_Stand()
{
Hostage = Instantiate(Hostage_Stand,hostage_location.position, hostage_location.rotation);
}
function SpawnHostage_Run()
{
Hostage = Instantiate(Hostage_Run,location.position, location.rotation);
}
I hope you will help me make my code better. Thanks in advice.