can you set boolean values using the input.getkeydown(keycode.(key))
hello, I am fairly new to this, and didn't find another forum post for this, though I may not have done a query well enough to find the correct post. My code is below (found these through various searches).
using UnityEngine;
using System.Collections;
public float playerSpeed;
public float playerSpeedInitial = 1.5f;
public float playerSpeedMax = 10f;
public bool moving;
private bool moveForward;
private bool moveRight;
private bool moveBackward;
private bool moveLeft;
public class Movement : MonoBehaviour` {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
while (moving && playerSpeed != playerSpeedMax){
playerSpeed = playerSpeedInitial + .15f * Time.deltaTime;
}
while (moving && playerSpeed = playerSpeedMax){
playerSpeed = playerSpeedMax;
}
// below is the part that seems to be causing an issue, so I just wanted to
//check if this would work... so basically, can this input change the Boolean
//value of moveForward, and if it can, do I have to modify this to make it work as
//it should? (cant remember how to make multi line comments, so sorry about that.)
if (Input.GetKeyDown(KeyCode.W)){
moveForward = true;
}
if (moveForward){
transform.localPosition += transform.forward * playerSpeed;
moving = true;
}
if (Input.GetKeyDown(KeyCode.D)){
moveRight = true;
}
if (moveRight){
transform.localPosition += transform.right * playerSpeed;
moving = true;
}
if (Input.GetKeyDown(KeyCode.S)){
moveBackward = true;
}
if (moveBackward){
transform.localPosition += transform.backward * playerSpeed;
moving = true;
}
if (Input.GetKeyDown(KeyCode.A)){
moveLeft = true;
}
if (moveLeft){
transform.localPosition += transform.left * playerSpeed;
moving = true;
}
if !moving{
playerSpeed = 0f;
}
}
}
}
Answer by TBruce · Oct 04, 2016 at 12:04 AM
You can do this (forgive me for messing up your braces)
using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour
{
public float playerSpeed;
public float playerSpeedInitial = 1.5f;
public float playerSpeedMax = 10f;
public bool moving;
private bool moveForward;
private bool moveRight;
private bool moveBackward;
private bool moveLeft;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
/*
// the following could be an endless loop - uncomment it at your own risk (save scene first
while (moving && playerSpeed != playerSpeedMax)
{
playerSpeed = playerSpeedInitial + .15f * Time.deltaTime;
}
*/
/*
// the following is an endless loop - un comment it at your own risk (save scene first
while (moving && playerSpeed == playerSpeedMax)
{
playerSpeed = playerSpeedMax;
}
}
*/
moveForward = (Input.GetKeyDown(KeyCode.W));
moveRight = (Input.GetKeyDown(KeyCode.D));
moveBackward = (Input.GetKeyDown(KeyCode.S));
moveLeft = (Input.GetKeyDown(KeyCode.A));
moving = (moveForward || moveRight || moveBackward || moveLeft);
if (moveForward)
{
transform.localPosition += transform.forward * playerSpeed;
}
if (moveRight)
{
transform.localPosition += transform.right * playerSpeed;
}
if (moveBackward)
{
transform.localPosition += transform.backward * playerSpeed;
}
if (moveLeft)
{
transform.localPosition += transform.left * playerSpeed;
}
if (!moving)
{
playerSpeed = 0f;
}
}
}
or you can do this
using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour
{
public float playerSpeed;
public float playerSpeedInitial = 1.5f;
public float playerSpeedMax = 10f;
public bool moving;
private bool moveForward;
private bool moveRight;
private bool moveBackward;
private bool moveLeft;
// Use this for initialization
void Start ()
{
}
public void OnMouseDown ()
{
moveForward = (Input.GetKeyDown(KeyCode.W));
moveRight = (Input.GetKeyDown(KeyCode.D));
moveBackward = (Input.GetKeyDown(KeyCode.S));
moveLeft = (Input.GetKeyDown(KeyCode.A));
moving = (moveForward || moveRight || moveBackward || moveLeft);
if (moveForward)
{
transform.localPosition += transform.forward * playerSpeed;
}
if (moveRight)
{
transform.localPosition += transform.right * playerSpeed;
}
if (moveBackward)
{
transform.localPosition += transform.backward * playerSpeed;
}
if (moveLeft)
{
transform.localPosition += transform.left * playerSpeed;
}
if (!moving)
{
playerSpeed = 0f;
}
}
// Update is called once per frame
void Update ()
{
/*
// the following could be an endless loop - uncomment it at your own risk (save scene first
while (moving && playerSpeed != playerSpeedMax)
{
playerSpeed = playerSpeedInitial + .15f * Time.deltaTime;
}
*/
/*
// the following is an endless loop - uncomment it at your own risk (save scene first
while (moving && playerSpeed == playerSpeedMax)
{
playerSpeed = playerSpeedMax;
}
}
*/
}
First of you had this for one of your while loops
while (moving && playerSpeed = playerSpeedMax)
this
playerSpeed = playerSpeedMax
is an assignment, not a comparison. You either wanted this
playerSpeed != playerSpeedMax
or this
playerSpeed == playerSpeedMax
Second, both while loops have the potential to be endless loops. I commented them out. You should only uncomment them (one at a time) after saving your scene.
yes, It did, ill try these, thanks very much for the help!
Could you please be so kind as to click the "Accept" button above to accept the answer if you have found this helpful?
Your answer
Follow this Question
Related Questions
Other way to write a code 0 Answers
trouble switching between booleans 2 Answers
Change button after 'x' amount of time 2 Answers
Using one key only, change bool to true or false depending on it's current value 2 Answers
Turn on Prefab with Keycode issue 2 Answers