Need help to solve problems with First Person Dungeon Crawler movement script
I have make an script to make a FPS Grid Based Movement with Vector3.MoveToWard & Quaternion.RotateTowards, I want to change it for Vector3.Lerp & Quaternion.Lerp but I do not know how to do it keeping movement time < cooldown.
this is the script:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Player : MonoBehaviour {
Vector3 newPos;
Quaternion newRot;
Transform player;
int gridSize = 2;
int mSmooth = 6;
int rSmooth = 360;
bool hitF;
bool hitB;
bool waitW;
bool waitT;
void Start() {
player = transform;
newPos = transform.position;
newRot = transform.rotation;
hitF = false;
hitB = false;
waitW = false;
waitT = false;
}
void Update() {
if (Physics.Raycast (player.position, transform.forward, 1.5f)) { // check for forward move
hitF = true;
} else {
hitF = false;
}
if (Physics.Raycast (player.position, -transform.forward, 1.5f)) { // check for backward move
hitB = true;
} else {
hitB = false;
}
if (Input.GetKeyDown (KeyCode.W) && waitW == false && waitT == false && hitF == false) { // move forward
waitW = true;
StartCoroutine ("WaitingWalk");
newPos = (transform.forward * gridSize) + transform.position;
}
if (Input.GetKeyDown (KeyCode.S) && waitW == false && waitT == false && hitB == false) { // move backward
waitW = true;
StartCoroutine ("WaitingWalk");
newPos = (-transform.forward * gridSize) + transform.position;
}
if (Input.GetKeyDown (KeyCode.D) && waitT == false) { // turn right
waitT = true;
StartCoroutine ("WaitingTurn");
newRot = newRot * Quaternion.Euler (0, 90, 0);
}
if (Input.GetKeyDown (KeyCode.A) && waitT == false) { // turn left
waitT = true;
StartCoroutine ("WaitingTurn");
newRot = newRot * Quaternion.Euler (0, -90, 0);
}
transform.position = Vector3.MoveTowards (transform.position, newPos, Time.deltaTime * mSmooth);
transform.rotation = Quaternion.RotateTowards (transform.rotation, newRot, Time.deltaTime * rSmooth);
}
IEnumerator WaitingWalk () { // walk cooldown
yield return new WaitForSeconds (0.5f);
waitW = false;
}
IEnumerator WaitingTurn () { // turn cooldown
yield return new WaitForSeconds (0.3f);
waitT = false;
}
}
Your answer
Follow this Question
Related Questions
Camera is Moving in Inspector but not in game? 1 Answer
I wrote a jumping script, but it isn't working and i'm not even getting any error codes. pls help. 0 Answers
How to make objects spawned from 2 players go in different directions. 0 Answers
Cant find why character doesnt move forward with this movement script 0 Answers
Script to get Eye Material to move only seems to work in Inspector/Edit Mode 0 Answers