Я играю в матч-3, и для того, чтобы разбить конфеты, я использовал Raycast, но когда я пытаюсь показать, сколько конфет разбил игрок, он показывает на одну меньше, чем ожидалось.
private List<GameObject> FindMatch(Vector2 direction)
{
List<GameObject> matchingCandies = new List<GameObject>();
RaycastHit2D hit = Physics2D.Raycast(this.transform.position, direction);
while(hit.collider != null && hit.collider.GetComponent<SpriteRenderer>().sprite == spriteRenderer.sprite) {
matchingCandies.Add(hit.collider.gameObject);
hit = Physics2D.Raycast(hit.collider.transform.position, direction);
}
return matchingCandies;
}
private bool ClearMatch(Vector2[] directions)
{
List<GameObject> matchingCandies = new List<GameObject>();
foreach(Vector2 direction in directions) {
matchingCandies.AddRange(FindMatch(direction));
}
if(matchingCandies.Count >= BoardManager.MinCandiesToMatch) {
foreach(GameObject candy in matchingCandies){
goalManager.CompareGoals(candy.GetComponent<SpriteRenderer>().sprite.ToString());
goalManager.UpdateGoals();
}
public class BlankGoal
{
public int numberNeeded;
public int numberCollected;
}
public class GoalManager : MonoBehaviour
{
public BlankGoal[] levelGoals;
public void UpdateGoals()
{
for(int i = 0; i < levelGoals.Length; i++)
{
currentGoals[i].thisText.text = "" + levelGoals[i].numberCollected + "/" + levelGoals[i].numberNeeded;
if(levelGoals[i].numberCollected >= levelGoals[i].numberNeeded)
{
goalsCompleted++;
currentGoals[i].thisText.text = "" + levelGoals[i].numberNeeded + "/" + levelGoals[i].numberNeeded;
}
}
}
public void CompareGoals(string goalToCompare)
{
for(int i = 0; i < levelGoals.Length; i++)
{
if(goalToCompare == levelGoals[i].matchValue)
{
levelGoals[i].numberCollected++;
}
}
}
Когда я разбиваю 3 конфеты, выбирается число 2, если я ломаю 4 - 3 и т. Д.