- Home /
Question by
DomDomDom · Oct 17, 2015 at 07:13 PM ·
spritemove an objectflippingmathf.sin
flip sprite while using mathf.sin
Hi there,
Below is my code I'm using to move an object (enemy in this case) back and forth. However I'm struggling to figure out my logic (in the fixed update function) to try and flip the sprite once it moves back and forth.
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour {
[SerializeField] float amplitude = 1.0f;
[SerializeField] float speed = 1.0f;
[SerializeField] Axis axis = Axis.XAxis;
Vector3 origin = Vector3.zero;
float t = 0.0f;
private bool facingRight = true;
Transform enemyGraphics;
Vector3 position;
void Start() {
enemyGraphics = transform.FindChild ("Graphics");
if (enemyGraphics == null) {
Debug.LogError("There is no 'Graphics' object as a child of the Enemy!");
}
this.origin = this.transform.position;
}
void Update() {
t = Time.realtimeSinceStartup;
position = this.transform.position;
switch(this.axis) {
case Axis.XAxis: {
position.x = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.x;
this.transform.position = position;
} break;
case Axis.YAxis: {
position.y = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.y;
this.transform.position = position;
} break;
case Axis.ZAxis: {
position.z = this.amplitude * Mathf.Sin(Time.realtimeSinceStartup * this.speed) + this.origin.z;
this.transform.position = position;
}break;
}
}
void FixedUpdate () {
//Checking to see what direction our enemy is going so and to see what way we need to flip it
// If the input is moving the enemy right and the enemy is facing left...
if (this.origin.x > this.origin.x && !facingRight)
// ... flip the enemy.
Flip();
// Otherwise if the input is moving the enemy left and the enemy is facing right...
else if (this.origin.x < this.origin.x && facingRight)
// ... flip the enemy.
Flip();
}
private void Flip()
{
// Switch the way the enemy is labelled as facing.
facingRight = !facingRight;
//Multiply the enemy's x local scale by -1.
Vector3 theScale = enemyGraphics.localScale;
theScale.x *= -1;
enemyGraphics.localScale = theScale;
}
}
public enum Axis {
XAxis,
YAxis,
ZAxis
}
Thanks for your help in advance.
Comment
Your answer
Follow this Question
Related Questions
Flip sprites in enemy spawner 1 Answer
Moving a sprite 1 Answer
Scrolling Sprite Object 0 Answers
Flipping a group of sprites 1 Answer
Sprite Flip Towards Camera 1 Answer