Я хочу заставить спрайтов двигаться только один раз, но то, как они движутся, бесконечно.Вот мои сценарии ниже:
Основной сценарий "битвы" :
public class Battle : MonoBehaviour {
public Sprite player1Sprite;
public Sprite player2Sprite;
public Sprite choicePlayer1;
public Sprite choicePlayer2;
public float currentTime = 0f;
float startingTime = 0f;
string attacker;
public string whoGotHit;
public bool battleExecuted=false;
ChangeSpritePlayer1 player1atk;
ChangeSpritePlayer2 player2atk;
ChangeSpritePlayer1Parry player1par;
ChangeSpritePlayer2Parry player2par;
void Start () {
player1Sprite = GameObject.Find("Player1").GetComponent<SpriteRenderer>().sprite;
player2Sprite = GameObject.Find("Player2").GetComponent<SpriteRenderer>().sprite;
GameObject.Find("BattleManager").GetComponent<OnHitPositionChanges>().enabled = false;
currentTime = startingTime; //setting the timer to 0
player1atk = GameObject.Find("Player1").GetComponent<ChangeSpritePlayer1>();
player2atk = GameObject.Find("Player2").GetComponent<ChangeSpritePlayer2>();
player1par = GameObject.Find("Player1").GetComponent<ChangeSpritePlayer1Parry>();
player2par = GameObject.Find("Player2").GetComponent<ChangeSpritePlayer2Parry>();
// GameObject BattleManager = GameObject.Find("BattleManager");
// OnHitPositionChanges move = BattleManager.GetComponent<OnHitPositionChanges>();
GameObject Canvas = GameObject.Find("Canvas");//accessing the Countdown script to find out who attacks first
Countdown coinflip = Canvas.GetComponent<Countdown>();
if (coinflip.outcome == "Player 1 Attacks First")
{
attacker = "Player1";
}
else if (coinflip.outcome=="Player 2 Attacks First")
{
attacker = "Player2";
}
if (attacker == "Player1")
{
GameObject.Find("Player1").GetComponent<ChangeSpritePlayer1Parry>().enabled = false; //player 1 can't parry since he's attacking
GameObject.Find("Player2").GetComponent<ChangeSpritePlayer2>().enabled = false; //player2 can't attack since he's defending
}
else if (attacker == "Player2")
{
GameObject.Find("Player1").GetComponent<ChangeSpritePlayer1>().enabled = false; //player1 can't attack since he's defending
GameObject.Find("Player2").GetComponent<ChangeSpritePlayer2Parry>().enabled = false; //player2 can't defend since he's attacking
}
}
void Update () {
Timer(); //this timer goes up
GameObject.Find("BattleManager").GetComponent<OnHitPositionChanges>().enabled = true;
battleOutcome();
if (battleExecuted)
{
Debug.Log("It works");
currentTime = 0;
Timer();
battleExecuted = false;
GameObject.Find("BattleManager").GetComponent<OnHitPositionChanges>().enabled = false;
battleOutcome();
}
}
void Timer()
{
currentTime += 1 * Time.deltaTime;
}
void battleOutcome()
{
if (currentTime >= 4.6f && currentTime <= 5.6f)
{
choicePlayer1 = GameObject.Find("Player1").GetComponent<SpriteRenderer>().sprite;
choicePlayer2 = GameObject.Find("Player2").GetComponent<SpriteRenderer>().sprite;
}
else if (currentTime > 6f)
{
if (attacker == "Player1")
{
if (player1atk.tempsprite.name == "Player1StrikeTop" && player2par.tempsprite.name == "Player2ParryTop")
{
player1Sprite = player1atk.tempsprite;
player2Sprite = player2par.tempsprite;
Debug.Log("Successful Parry (Top/Top)!");
whoGotHit = "Player1";
и т. Д. Для всех возможных результатов
И скрипт, который обрабатывает перемещение спрайта s:
public class OnHitPositionChanges : MonoBehaviour {
public GameObject Player1;
public GameObject Player2;
string victim;
public float speed = 5;
void Start() {
}
void Update()
{
Player1 = GameObject.Find("Player1");
Player2 = GameObject.Find("Player2");
GameObject BattleManager = GameObject.Find("BattleManager"); //accessing the BattleManager object
Battle whoGotHit = BattleManager.GetComponent<Battle>(); //finding out which player got hit
if (whoGotHit.whoGotHit == "Player1")
{
victim = "Player1";
Debug.Log("Player1 got hit");
}
else if (whoGotHit.whoGotHit == "Player2")
{
victim = "Player2";
Debug.Log("Player2 got hit");
}
else if (whoGotHit.whoGotHit == "Nobody")
{
victim = "Nobody";
Debug.Log("Nobody got hit");
}
if (victim == "Player1")
{
Player1.transform.position += Vector3.left * 1.0f;
Player2.transform.position += Vector3.left * 1.0f;
Debug.Log("Both players move to the left");
}
else if (victim == "Player2")
{
Player1.transform.position += Vector3.right * 1.0f;
Player2.transform.position += Vector3.right * 1.0f;
Debug.Log("Both players move to the right");
}
else if (victim == "Nobody")
{
Debug.Log("Nobody moves since nobody picked an option");
}
}
}
Я пытался отключить сценарий OnHitPositionChanges из Battle, а затем включать его каждый раз, когда достигается результат, но он не работает.