Character bounces off walls, and drops to the ground on movement
Hi guys, I am making a click to move game. Think of Diablo. At the moment the character only moves with the click of the mousebutton, and has a rigidbody attached to it to apply some physics. The problem is that whenever the character moves at a faster speed it falls (Not through the ground), but falls to ground, or whenever it collides with a fall it will bounce and fall. I just want it to collide and stop.
Right now I am moving my character with transform, but I would also like your input if I should move it with Rigidbody instead. In the end it is going to be a mobile game where you move the character with your finger.
Just in case, after I have managed to fix this I will apply animations to the character.
Here is a little gif showing what is happening: https://gyazo.com/53f443146b859b56011e939f162c5bf6
I can imagine that I can set the speed to 0 when my object is colliding with 1 particular object, but do I really have to do that FOR EVERY OBJECT? It also doesn't fix the problem that my character walks and falls.
Here is the movement script I found off the internet:
using UnityEngine;
using System.Collections;
public class ClickToMove : MonoBehaviour {
private Transform myTransform; // this transform
private Vector3 destinationPosition; // The destination Point
private float destinationDistance; // The distance between myTransform and destinationPosition
public float moveSpeed; // The Speed the character will move
void Start()
{
myTransform = transform; // sets myTransform to this GameObject.transform
destinationPosition = myTransform.position; // prevents myTransform reset
}
void Update()
{
// keep track of the distance between this gameObject and destinationPosition
destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
if (destinationDistance < .5f)
{ // To prevent shakin behavior when near destination
moveSpeed = 0;
}
else if (destinationDistance > .5f)
{ // To Reset Speed to default
moveSpeed = 10;
}
// Moves the Player if the Left Mouse Button was clicked
if (Input.GetMouseButtonDown(0) && GUIUtility.hotControl == 0)
{
Plane playerPlane = new Plane(Vector3.up, myTransform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
Vector3 targetPoint = ray.GetPoint(hitdist);
destinationPosition = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
myTransform.rotation = targetRotation;
}
}
// To prevent code from running if not needed
if (destinationDistance > .5f)
{
myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
}
}
Answer by Ibis1126 · Feb 11, 2018 at 10:07 PM
You might just need to set up your rigidbody constraints;
Your answer
Follow this Question
Related Questions
Problem. Pick up and Grab object script, except all objects in scene are picked up instead of one. 0 Answers
Throwing an object whilst moving 1 Answer
Ray cast to object to transform, instead all objects with script transform. 0 Answers
Counteracting rigidbody velocity using AddForce? 0 Answers
Realistic Soccer Ball Dribbling? 1 Answer