Я думаю, это будет просто, но по какой-то причине я не могу понять это. У меня 4 игрока GameObjects вокруг моего игрока, каждый со своим коллайдером. Мне нужно иметь возможность включать и отключать дочерние объекты GameObject в зависимости от направления движения персонажа. Таким образом, если игрок двигается вправо влево, верхний и нижний коллайдеры будут отключены, оставляя активным только правый коллайдер. Если игрок перемещается вверх, то левый, правый и нижний коллайдеры будут отключены, оставляя только верхний коллайдер. И это тот же принцип для двух других направлений. Но по какой-то причине мой код работает как для левого, так и для правого направления, но когда мой персонаж перемещается вверх или вниз, он отключает все, кроме левого коллайдера. Могу ли я получить помощь? Вот мой код:
public BasicNPCPrototype NPCPrototype;
private bool nearNPC = false;
public bool facingRight;
public bool facingUp;
public GameObject RightCollider;
public GameObject LeftCollider;
public GameObject TopCollider;
public GameObject BottomCollider;
// Use this for initialization
protected override void Start()
{
base.Start();
}
// Update is called once per frame
protected override void Update()
{
// Call the GetInput Function
GetInput();
// Call the CheckIfNear function
CheckIfNear();
// Call the CheckDirection function
CheckDirection();
// Call the DisableInteractionColliders function
DisableInteractionColliders();
base.Update();
}
void GetInput()
{
if(playerActive)
{
direction = Vector2.zero;
// Get the horizontal Axis and put in the X value of "direction"
direction.x = Input.GetAxisRaw("Horizontal");
// Get the Vertical Axis and put in the Y value of "direction"
direction.y = Input.GetAxisRaw("Vertical");
}
}
// Look at our movement direction and decide which way were facing
void CheckDirection()
{
if (direction.x > 0)
{
facingRight = true;
facingUp = false;
}
else if (direction.x < 0)
{
facingRight = false;
facingUp = false;
}
if (direction.y > 0) // && !facingRight)
{
facingUp = true;
facingRight = false;
}
else if (direction.y < 0) // && !facingRight)
{
facingUp = false;
facingRight = false;
}
}
// Look at what direction the Player is facing and disable/enable the correct colliders to account for it
void DisableInteractionColliders()
{
// WIP
if(facingRight)
{
RightCollider.SetActive(true);
LeftCollider.SetActive(false);
TopCollider.SetActive(false);
BottomCollider.SetActive(false);
} else if(!facingRight)
{
LeftCollider.SetActive(true);
RightCollider.SetActive(false);
TopCollider.SetActive(false);
BottomCollider.SetActive(false);
}
else if(facingUp)
{
TopCollider.SetActive(true);
RightCollider.SetActive(false);
LeftCollider.SetActive(false);
BottomCollider.SetActive(false);
} else if(!facingUp)
{
BottomCollider.SetActive(true);
RightCollider.SetActive(false);
LeftCollider.SetActive(false);
TopCollider.SetActive(false);
}
}
Если читать легче, вы можете прочитать его на PasteBin: https://pastebin.com/y1jQT17w
Игнорировать CheckIfNear (); вызовите функцию обновления, как для будущих планов, но в настоящее время она пуста.