Unity’s profiler has identified that the majority of my cpu is being used by this script, particularly the transform.rotatearound part, i’m experiencing rather low FPS ~40 (on a machine that can run BF3 on ultra) and was wonder how i could go about optimizing it.
(profiler says nearly 80% of the cpu used for the game is for this script alone
using UnityEngine;
using System.Collections;
public class boat : MonoBehaviour {
public float speed;
private float turnspeed=0f;
public GameObject player;
public GameObject position;
public Rigidbody boatr;
private bool onBoat=false;
private bool forward=false;
private bool left=false;
private bool right=false;
private Vector3 lastpos;
private float rotinit;
void Start () {
transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
lastpos=transform.position;
rotinit=transform.rotation.x;
}
void Update () {
//keep the boat at water level
transform.position=new Vector3(transform.position.x,9.6f,transform.position.z);
//get distance between boat and player
float distance=Vector3.Distance(player.transform.position,transform.position);
if(Input.GetKeyDown(KeyCode.T)==true){
onBoat=!onBoat;
}
if(onBoat==true){
//make player position be at the driver position on boat
player.transform.position=position.transform.position;
}
if(onBoat==true & Input.GetKeyDown(KeyCode.I)==true){
forward=true;
}
if(onBoat==true & Input.GetKeyUp(KeyCode.I)==true){
forward=false;
}
if(onBoat==true & Input.GetKeyDown(KeyCode.J)==true){
left=true;
}
if(onBoat==true & Input.GetKeyUp(KeyCode.J)==true){
left=false;
}
if(onBoat==true & Input.GetKeyDown(KeyCode.L)==true){
right=true;
}
if(onBoat==true & Input.GetKeyUp(KeyCode.L)==true){
right=false;
}
if(forward==true){
//transform.Translate(Vector3.right*Time.deltaTime*5);
//move forward (right =forward in this gameobjects case
boatr.AddForce(transform.right*Time.deltaTime*5000);
}
if(left==true){
//rotate left
transform.RotateAround(position.transform.position,Vector3.up,-turnspeed);
}
if(right==true){
//rotate right
transform.RotateAround(position.transform.position,Vector3.up,turnspeed);
}
}
void FixedUpdate(){
//find speed of boat and set turnspeed based on boat speed
speed=((transform.position-lastpos).magnitude)/Time.deltaTime;
lastpos=transform.position;
turnspeed=speed/5.8f;
turnspeed=Mathf.Max(turnspeed,.001f);
turnspeed=Mathf.Min(turnspeed,1f);
}
}