Есть персонаж, он двигается с разные стороны, в зависимости от направления, я меняю ему Flip, на этом персонаже, в дочерних объектах есть Healthbar Canvas полоса со здоровьем, которая прикреплена к нему, в Healthbar Canvas так же есть дочерние объекты соответственно. Не могу понять,
как сделать так, чтобы флипался персонаж, но Healthbar Canvas оставался в той же проекции и не переворачивался ?
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Enemy : MonoBehaviour
{
public float health = 100f;
public Slider sliderHP;
public GameObject[] HeadObject;
public Transform[] spawnPoints;
public float movementSpeed = 2f;
public float timeToWaitAtSpawn = 2f;
public Animator animator;
private int currentSpawnPointIndex = 0;
private bool isMoving = true;
private bool isFacingRight = true;
private void Start()
{
int randomHeadObject = Random.Range(0, 5);
if (randomHeadObject == 0)
HeadObject[0].SetActive(true);
else if (randomHeadObject == 1)
HeadObject[1].SetActive(true);
sliderHP.value = health / 100f;
MoveToNextSpawnPoint();
}
void Update()
{
if (isMoving)
MoveTowardsSpawnPoint();
FlipCharacter();
}
public void TakeDamage(int damage)
{
health -= damage;
if (health <= 0)
{
health = 0;
Destroy(sliderHP.gameObject);
Destroy(gameObject);
}
sliderHP.value = health / 100f;
}
private void MoveTowardsSpawnPoint()
{
Vector3 targetPosition = new Vector3(spawnPoints[currentSpawnPointIndex].position.x, transform.position.y, transform.position.z);
transform.position = Vector3.MoveTowards(transform.position, targetPosition, movementSpeed * Time.deltaTime);
if (Vector3.Distance(transform.position, targetPosition) <= 0.1f)
{
isMoving = false;
animator.SetBool("Target", true);
StartCoroutine(MoveToNextSpawnPointAfterDelay());
}
else
{
animator.SetFloat("Move", 1f);
animator.SetBool("Target", false);
}
}
private IEnumerator MoveToNextSpawnPointAfterDelay()
{
yield return new WaitForSeconds(timeToWaitAtSpawn);
currentSpawnPointIndex = Random.Range(0, spawnPoints.Length);
isMoving = true;
}
private void MoveToNextSpawnPoint()
{
currentSpawnPointIndex = Random.Range(0, spawnPoints.Length);
Vector3 targetPosition = new Vector3(spawnPoints[currentSpawnPointIndex].position.x, transform.position.y, transform.position.z);
transform.position = targetPosition;
}
private void FlipCharacter()
{
if (isMoving)
{
if (transform.position.x > spawnPoints[currentSpawnPointIndex].position.x && !isFacingRight)
{
Flip();
}
else if (transform.position.x < spawnPoints[currentSpawnPointIndex].position.x && isFacingRight)
{
Flip();
}
}
}
private void Flip()
{
isFacingRight = !isFacingRight;
Vector3 newScale = transform.localScale;
newScale.x *= -1;
transform.localScale = newScale;
}
}