alors, voilà, je travaille sur un FPS en ce moment et je cherche à faire en sorte que mon personnage puisse faire des wall run dès que j'appuierai sur Espace et qu'il sera à coté d'un mur, j'ai donc fais un script, le problème c'est qu'il ne remplit pas du tout sa fonction et qu'il est plein de bugs, est ce que vous pourriez me dire si j'ai juste quelques erreurs à corriger et quelques trucs à modifier ou est ce qu'il faut que je recommence tout à zéro parce que rien ne va dans le script ?
Code : Tout sélectionner
var moveSpeed: float = 8;
var turnSpeed: float = 90;
var gravity: float = 10;
var isGrounded: boolean;
var deltaGround: float = 0.2;
var jumpSpeed: float = 10;
var jumpRange: float = 10;
var Rigibody = GameObject;
private var myNormal: Vector3;
private var turnAngle: float = 0;
private var distGround: float;
private var jumping = false;
private var vertSpeed: float = 0;
function Start(){ myNormal = transform.up;
GetComponent.<Rigidbody>().freezeRotation = true;
distGround = GetComponent.<CharacterController>().height / 2 - GetComponent.<CharacterController>().center.y;
}
function FixedUpdate(){ GetComponent.<Rigidbody>().AddForce(-gravity * myNormal);
}
function Update(){ var ray: Ray;
var hit: RaycastHit;
if (!jumping){
if (Input.GetButtonDown("Jump")){
ray = Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, hit, jumpRange)){
JumpToWall(hit.point, hit.normal);
}else if (isGrounded){
vertSpeed = jumpSpeed;
}}else {
var turn = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;
turnAngle = (turnAngle + turn) % 360;
ray = Ray(transform.position, -myNormal);
if (Physics.Raycast(ray, hit)){
isGrounded = hit.distance <= distGround + deltaGround;
myNormal = Vector3.Lerp(myNormal, hit.normal, Time.deltaTime);
}else {
isGrounded = false;
}
var rot = Quaternion.FromToRotation(Vector3.up, myNormal);
rot *= Quaternion.Euler(0,turnAngle,0);
transform.rotation = rot;
var move = Input.GetAxis("Vertical") * moveSpeed * Vector3.forward;
move.y = vertSpeed;
transform.Translate(move * Time.deltaTime, Space.Self);
vertSpeed -= gravity * Time.deltaTime;
if (vertSpeed < 0) {vertSpeed = 0;}
}}}
function JumpToWall(point: Vector3, normal: Vector3){ jumping = true;
GetComponent.<Rigidbody>().isKinematic = true;
var orgPos = transform.position;
var orgRot = transform.rotation;
var dstPos = point + normal * (distGround + 0.5);
var dir = dstPos - orgPos;
var dstRot = Quaternion.FromToRotation(Vector3.up, normal);
dstRot *= Quaternion.Euler(0, turnAngle, 0);
for (var t: float = 0.0; t < 1.0; ){ t += Time.deltaTime; transform.position = Vector3.Lerp(orgPos, dstPos, t);
transform.rotation = Quaternion.Slerp(orgRot, dstRot, t);
yield;
} myNormal = normal;
GetComponent.<Rigidbody>().isKinematic = false;
jumping = false; }