I’ve been you tubing, googling etc for a definitive answer, but it seems very inconsistent, even the unity online tutorials Space Shooter, Tanks, 2D UFO etc are inconsistent.
On the net some post’s have control (getAxis), Update and move the gameobject in FixedUpdate.
Yesterday I had everything in fixedupdate e.g
- Joystick movement.
- Animation settings eg. Setinteger etc.
- Physics2D.LineCast
- Gameobject.transform.position
But today I set about splitting, things up but only putting the movement in fixedupdate, everything went well, on the PC it was slow to I increased the speed, and it was really nice but on my Android device it was too fast all characters moved with lightning speed, I guess this is because of not fixed time frame using Update??
A part of the code I’m using for one of the 8 directions is:
mOffset = Vector2.up * speed * Time.DeltaTime;
So what I’m trying to find out is this what part of 1-4 should go where e.g
Update
- Joystick movement.
- Animation settings eg. Setinteger etc.
FixedUpdate
- Physics2D.LineCast
- Gameobject.transform.position
Or should it be something else??
Also if I use Update should it be speed * Time.DeltaTime and if it’s Fixeupdate should it be speed * Time. fixedDeltaTime instead.
I’m trying to get the maximum amount of refreshrate.
My old(before yesterday) Update/FixedUpate are this
private void Update()
{
if (mMonsterType == MonsterTypes.Sorcerer)
{
if (mCameraComponent.ObjectCoordinatesInScaledCameraView(0.1F, 0.125F, (int)this.gameObject.transform.position.x, (int)this.gameObject.transform.position.y) == false)
return;
if (DateTime.Now > mDateTime)
{
mVisible = !mVisible;
if (mVisible == true)
{
int mSeconds = UnityEngine.Random.Range(2, 5);
mRenderer.color = new Color(1F, 1F, 1F, 1F);
mDateTime = DateTime.Now.AddSeconds(mSeconds);
}
else
{
mRenderer.color = new Color(1F, 1F, 1F, 0F);
mDateTime = DateTime.Now.AddSeconds(2);
}
}
}
}
private void FixedUpdate()
{
Profiler.BeginSample("Monster FixedUpdate");
if (mHero == null)
mHero = GameObject.Find("Hero" + GameObject.Find("World").GetComponent<WorldComponent>().HeroType.ToString().ToLower());
else if (mCameraComponent == null)
mCameraComponent = (CameraComponent)Camera.main.gameObject.GetComponent(typeof(CameraComponent));
if (mCameraComponent != null && mHero != null)
if (mDirectionType != DirectionTypes.None)
{
if (mAnimator.GetInteger("Direction") != (int)mDirectionType)
mAnimator.SetInteger("Direction", (int)mDirectionType);
//mCameraComponent.DrawViewPort(mCameraComponent.CameraViewPort(), Color.red, 5F);
//mCameraComponent.DrawViewPort(mCameraComponent.CameraScaledViewPort(0.3F, 0.3F), Color.green, 5F);
//Debug.Log("Current Direction " + mCurrentDirection.ToString());
//float mDistanceToHero = Vector3.Distance(this.transform.position, mHero.transform.position);
//if (mDistanceToHero >= 8)
if (mCameraComponent.ObjectCoordinatesInScaledCameraView(0.1F, 0.125F, (int)this.gameObject.transform.position.x, (int)this.gameObject.transform.position.y) == false)
{
mAnimator.enabled = false;
//mRenderer.color = new Color(0f, 0f, 255f, 1f);
return;
}
else
{
// mRenderer.color = new Color(0f, 255f, 0f, 1f);
if ( mAnimator.enabled == false)
mAnimator.enabled = true;
}
if (mMonsterType == MonsterTypes.Demon)
if (mProjecTileRegenerationTime != DateTime.MinValue)
if (DateTime.Now > mProjecTileRegenerationTime)
{
float mX = Math.Abs(this.transform.position.x - mHero.transform.position.x);
float mY = Math.Abs(this.transform.position.y - mHero.transform.position.y);
float mDistance = Vector3.Distance(this.transform.position, mHero.transform.position);
if (((mX < 6) && Utilitles.isVertical(mDirectionType) == true) || ((mY < 6) && Utilitles.isHorizontal(mDirectionType) == true) || ((mDistance < 6) && Utilitles.isDiagonal(mDirectionType) == true))
{
OnAddProjecTile(new ProjecTileEventArgs(mDirectionType));
mProjecTileRegenerationTime = DateTime.Now.AddMilliseconds(mProjecTileRegenerationRate);
}
}
if (mMonsterType == MonsterTypes.Lobber)
if (mProjecTileRegenerationTime != DateTime.MinValue)
if (DateTime.Now > mProjecTileRegenerationTime)
{
//float mX = Math.Abs(this.transform.position.x - mHero.transform.position.x);
//float mY = Math.Abs(this.transform.position.x - mHero.transform.position.x);
float mDistance = Vector3.Distance(this.transform.position, mHero.transform.position);
if (mDistance < 8)
{
OnAddProjecTile(new ProjecTileEventArgs(mDirectionType));
mProjecTileRegenerationTime = DateTime.Now.AddMilliseconds(mProjecTileRegenerationRate);
}
}
if (mIsThinking == true && --mThinking > 0)
{
if (mAnimator.GetFloat("HSpeed") != 0)
mAnimator.SetFloat("HSpeed", 0);
if (mAnimator.GetFloat("VSpeed") != 0)
mAnimator.SetFloat("VSpeed", 0);
if (this.Mode == ModeType.Debug)
Debug.Log("Thinking value is: " + mThinking);
return;
}
if (mIsTraveling == true && mTraveling > 0)
{
if (mAnimator.GetFloat("HSpeed") != 1)
mAnimator.SetFloat("HSpeed", 1);
if (mAnimator.GetFloat("VSpeed") != 1)
mAnimator.SetFloat("VSpeed", 1);
if (this.Mode == ModeType.Debug)
Debug.Log("Traveling value is: " + mTraveling);
Step((Vector2)this.gameObject.transform.position, mLocationComponent, mDirectionType, countdown(mTraveling), mSpeed * Time.deltaTime);
return;
}
List<DirectionTypes> mDirections = Utilitles.CalculateDirections(this.gameObject, mHero, mSpeed * Time.deltaTime, mDirectionType, out CalculatedDirection);
if (mDirections != null && mDirections.Count > 0)
{
if (this.Mode == ModeType.Debug)
Debug.Log("Number Of Directions: " + mDirections.Count);
foreach (DirectionTypes direction in mDirections)
{
int mIndex = mDirections.IndexOf(direction);
//Debug.Log("Index is: " + mIndex);
//float mValue = mIndex < 2 ? 0 : mTravelingRate * ((mIndex - 2));
// float mValue = (mTravelingRate * 2);
float mValue = mTravelingRate;
if (this.Mode == ModeType.Debug)
Debug.Log("Enemy Checking Direction " + direction.ToString());
if (Step((Vector2)this.gameObject.transform.position, mLocationComponent, direction, mValue, mSpeed * Time.deltaTime) == true)
{
if (this.Mode == ModeType.Debug)
{
Debug.Log("Enemy Selected Direction is: " + direction.ToString());
Debug.Log("Direction index " + mDirections.IndexOf(direction));
}
return;
}
else
{
if (this.Mode == ModeType.Debug)
Debug.Log("Cannot Move in the Following direction: " + direction.ToString());
}
}
}
else
{
if (this.Mode == ModeType.Debug)
Debug.Log("No usable directions!!");
}
}
Profiler.EndSample();
}