I want to have score increase when I go right and decrease when I go left

Im making a small game about the Area 51 raid and I want the score increase when I go right and decrease when I go left (going to negative if at 0). With the code I have now, it increases as long as I am moving away from the starting point. I know its increasing because I’m using the Vector2.Distance method, but there isn’t a displacement method, so I can’t figure out what to do. Here is my code and please feel free to make heavy changes to the code if it makes the score work how I want it to. Thanks.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameSession : MonoBehaviour
{

   [SerializeField] float score = 0;

   [SerializeField] Text scoreText;

   public Transform player;

   // Start is called before the first frame update
   void Start()
   {
       scoreText.text = score.ToString();
       transform.position = player.position;
   }

   // Update is called once per frame
   void Update()
   {
       if (player != null)
       {
           score = 10 * Mathf.RoundToInt(Vector2.Distance(player.position, transform.position));
           scoreText.text = score.ToString();
       }
   }
}

Is the level finite size, could the distance from start be multiplied by a factor to get a score?

For example if I am 600 away from the start and the total is 1000 I score 60% of total points?

If not then maybe you could do math on the distance vector and add/subtract. Example as you move forward the score goes up but when you go back the distance is less so you need to subtract an amount from the current something like current score is distance * .5 stored to score and then if new distance * .5 is less penalize them.

The level is finite and also pretty small, only takes a few seconds to reach the end of the screen.

I found out how to do it. Here is the solution if anyone comes across this problem in the future

    void Update()
    {
        if (player != null)
        {
            score = 10 * Mathf.RoundToInt(player.position.x - transform.position.x);
            scoreText.text = score.ToString();
        }
    }

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.

Privacy & Terms