- Home /
Going insane from this
So for the past few hours I've been trying to make a simple "dash". I have left and right buttons set up and everything but just can't make simple script that would move the character for a certain units to the left or right when the screen is tapped.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour {
//variables
public float moveSpeed = 300;
public GameObject character;
private Rigidbody2D characterBody;
private float ScreenWidth;
// Use this for initialization
void Start () {
ScreenWidth = Screen.width;
characterBody = character.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update () {
int i = 0;
//loop over every touch found
while (i < Input.touchCount) {
if (Input.GetTouch (i).position.x > ScreenWidth / 2) {
//move right
RunCharacter (1.0f);
}
if (Input.GetTouch (i).position.x < ScreenWidth / 2) {
//move left
RunCharacter (-1.0f);
}
++i;
}
}
void FixedUpdate(){
#if UNITY_EDITOR
RunCharacter(Input.GetAxis("Horizontal"));
#endif
}
private void RunCharacter(float horizontalInput){
//move player
characterBody.AddForce(new Vector2(horizontalInput * moveSpeed * Time.deltaTime, 0));
}
}
I've been trying to use this one but I jsut can't make it work as I want it to, it's movement is working fine, but I do not want it to slide from side to side but to dash for a given amount of units. I've tried using transform, velocity, etc... but I just can't. Any help?
Answer by JVene · Jul 23, 2018 at 03:35 AM
Since I don't have any configuration details on characterBody, I'm going to assume that a force of about 300 is quite sufficient to quickly move the object.
However, you're applying a very small fraction of that force when you use Time.deltaTime here. You use Time.deltaTime when what you have is rate of speed, you're controlling something more directly (as in changing positions or rotation angle), and you need to move portions of time on each update.
You're not doing that. You're applying force, and should let the physics engine do what it will with the force over time - let the physics engine handle time when you apply forces.
Remove the Time.deltaTime and see what happens. After that, adjust your speed member, which in reality isn't speed but force. Speed is calculated by the physics engine based on how much force is applied to an object of a particular mass for a given length of time.
Your answer
Follow this Question
Related Questions
Help with my Dash move? 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Why does my player dash differently based on window size? 1 Answer
Movement over Time 2 Answers
FPShooter sideway/forward dash? 1 Answer