I am just trying to learn in unity, so far so good I guess. Everything is terribly slow but I got this after 5 hours or so. Which is nice. I just have some problems and no idea how to solve it.
Sometimes I have to press a key twice to move. ( using Input.GetKey(“d”) and Input.GetKeyDown(“right”) - different just to try behavior. )
I do not know how to make it move on a grid by 1smoothly (using Rigidbody and stuff) so I just made it teleport instead for now.
I am not sure how can I move the ground towards me. Now it is set to move towards the player and every time position Z is 100, it adds 100 to Z. But if I add texture this is quite noticeable and it looks ugly. Other solution might be to spawn one platform every time player gets to an end and despawn old one or something like that. Not sure if that would be smooth. To be honest, I have no idea how to do it to make it look nice.
In near future, I want to add death and respawns and menu and stuff. Maybe static camera would be better
If only I knew how to do it well, I will try to learn it as other things.
hello, you need something like Time.deltaTime, this can make you movement more smooth
here is tutorial
and if you need something like a rigidbody controller, which allous you to move in scene, I have it too, but only woth out camera rotation.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rigidbody_Controller : MonoBehaviour {
// Script works perfect only need to set camera rotation and such stuff
public Rigidbody rb; // put your player here
// and you need collider + Rigidbody component
public float speed = 10.0f;
public float gravity = 10.0f;
public float maxVelocityChange = 10.0f;
public bool canJump = true;
public float jumpHeight = 2.0f;
private bool grounded = false;
void Awake () {
rb.freezeRotation = true;
rb.useGravity = false;
}
void FixedUpdate () {
if (grounded) {
// Calculate how fast we should be moving
Vector3 targetVelocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
targetVelocity = transform.TransformDirection(targetVelocity);
targetVelocity *= speed;
// Apply a force that attempts to reach our target velocity
Vector3 velocity = rb.velocity;
Vector3 velocityChange = (targetVelocity - velocity);
velocityChange.x = Mathf.Clamp(velocityChange.x, -maxVelocityChange, maxVelocityChange);
velocityChange.z = Mathf.Clamp(velocityChange.z, -maxVelocityChange, maxVelocityChange);
velocityChange.y = 0;
rb.AddForce(velocityChange, ForceMode.VelocityChange);
// Jump
if (canJump && Input.GetButton("Jump")) {
rb.velocity = new Vector3(velocity.x, CalculateJumpVerticalSpeed(), velocity.z);
}
}
// We apply gravity manually for more tuning control
rb.AddForce(new Vector3 (0, -gravity * rb.mass, 0));
grounded = false;
}
void OnCollisionStay () {
grounded = true;
}
float CalculateJumpVerticalSpeed () {
// From the jump height and gravity we deduce the upwards speed
// for the character to reach at the apex.
return Mathf.Sqrt(2 * jumpHeight * gravity);
}