Passing a value between scripts for use in an argument?
I'm very much a beginner to object based programming and development through Unity so forgive me if this is extremely easy or has been answered already a million times. I've gone through a handful of questions here and haven't found a solution that's worked yet.
For context, the player can instantiate an object in front of them on left click. I want there to be a finite amount of times the player can do this, like ammo.
Here is the PlayerBehavior script with the simple if statement I want to use to determine if the player can place an object. I don't think PlayerBehavior knows anything in StressSystem exists, so my error in PlayerBehavior is at the if (currentStress > null) statement.
public class PlayerBehavior : MonoBehaviour
{
public float speed;
public GameObject statBlockPrefab;
public StressSystem StressSystem;
void Start()
{
}
void Update()
{
// WASD to move
Vector3 inputVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Rigidbody myRigidBody = GetComponent<Rigidbody>();
myRigidBody.velocity = inputVector * speed;
Ray rayFromCameraToCursor = Camera.main.ScreenPointToRay(Input.mousePosition);
Plane playerPlane = new Plane(Vector3.up, transform.position);
playerPlane.Raycast(rayFromCameraToCursor, out float distanceFromCamera);
Vector3 cursorPosition = rayFromCameraToCursor.GetPoint(distanceFromCamera);
// Face the new position
Vector3 lookAtPosition = cursorPosition;
transform.LookAt(lookAtPosition);
if (Input.GetButtonDown("Fire1"))
{
Spawn(cursorPosition);
}
}
public void Spawn(Vector3 targetPosition)
{
if (currentStress > null);
{
GameObject newBlock = Instantiate(statBlockPrefab, transform.position + transform.forward, transform.rotation);
}
}
}
Next is the StressSystem script which just declares the public floats and starts by saying the current value is equal to the max value.
public class StressSystem : MonoBehaviour
{
public float maxStress;
public float currentStress;
void Start()
{
currentStress = maxStress;
}
void Update()
{
//TO DO Tick stress up at a rate
}
}
Once I'm finally able to get currentStress passed to the if statement in PlayerBehavior, I want to have the spawn action in PlayerBehavior finish with currentStress -= 1.
I very much would understand if I'm going about this fundamentally weird or inefficient, so I would really appreciate some guidance!
Your answer
Follow this Question
Related Questions
Networking Unity, I need to pass a simple variable value between Client and Server. 1 Answer
public variable not showing in inspector 1 Answer
(Help) I need this script to destroy all game objects in a scene. 1 Answer
Can not set a public variable of a script or gameobject in prefab 1 Answer
How do you access variables from a different script? 0 Answers