- Home /
Character Clipping Through Walls When Uncrouching and Receiving Errors
I have been attempting to fix one of my scripts to make sure that my character does not clip through walls when the player unchrouches, or in this scenario, lets go of "C." I tried adding a Raycast that I turned from Javascript into C#, but, this is giving me quite a few errors. These errors are:
Assets/Scripts/Crouching/RunAndCrouch.cs(50,68): error CS0165: Use of unassigned local variable
hit' 2. Assets/Scripts/Crouching/RunAndCrouch.cs(50,36): error CS1502: The best overloaded method match for
UnityEngine.Physics.Raycast(UnityEngine.Vector3, UnityEngine.Vector3, out UnityEngine.RaycastHit, float)' has some invalid argumentsAssets/Scripts/Crouching/RunAndCrouch.cs(50,36): error CS1620: Argument
#3' is missing
out' modifier
I am attempting to make the script send a test message "Hit" into the console when an object is above the character, but the script returns these errors and prevents me from playing the scene. Here is the script:
using UnityEngine; using System.Collections;
public class RunAndCrouch : MonoBehaviour { public float walkSpeed = 7; // regular speed public float crchSpeed = 3; // crouching speed public float runSpeed = 20; // run speed [SerializeField] private float _standHeight = 0.5f; [SerializeField] private float _radius = 0.5f; [SerializeField] private LayerMask _terrianLayers;
private CharacterMotor chMotor;
private Transform tr;
private float dist; // distance to ground
private bool CanStand()
{
return Physics.CheckCapsule(transform.position, transform.position + new Vector3(0f, _standHeight, 0f), _radius,
_terrianLayers);
}
// Use this for initialization
void Start ()
{
chMotor = GetComponent<CharacterMotor>();
tr = transform;
CharacterController ch = GetComponent<CharacterController>();
dist = ch.height/2; // calculate distance to ground
}
// Update is called once per frame
void FixedUpdate ()
{
float vScale = 1.0f;
float speed = walkSpeed;
if ((Input.GetKey("left shift") || Input.GetKey("right shift")) && chMotor.grounded)
{
speed = runSpeed;
}
if (Input.GetKey("c"))
{ // press C to crouch
vScale = _standHeight;
speed = crchSpeed; // slow down when crouching
var up= transform.TransformDirection(Vector3.up);
RaycastHit hit;
Debug.DrawRay(transform.position, up * 1.1f, Color.green);
if(Physics.Raycast(transform.position, up, hit, 1.1f)){
Debug.Log("Hit");
}
}
chMotor.movement.maxForwardSpeed = speed; // set max speed
float ultScale = tr.localScale.y; // crouch/stand up smoothly
Vector3 tmpScale = tr.localScale;
Vector3 tmpPosition = tr.position;
tmpScale.y = Mathf.Lerp(tr.localScale.y, vScale, 5 * Time.deltaTime);
tr.localScale = tmpScale;
tmpPosition.y += dist * (tr.localScale.y - ultScale); // fix vertical position
tr.position = tmpPosition;
}
}
I am not sure how I would go about fixing these errors or if there is a different way to go about fixing my character clipping through things when it crouches. Can anyone possibly help me fix these errors or find another solution?
First off, you need to tweak your Raycast line:
if(Physics.Raycast(transform.position, up, hit, 1.1f))
should read
if(Physics.Raycast(transform.position, up, out hit, 1.1f))
Answer by Paul-Sinnett · Apr 14, 2015 at 09:23 AM
On line 38 add the keyword "out"
if(Physics.Raycast(transform.position, up, out hit, 1.1f)){
Answer by Pixel-Sword · Apr 14, 2015 at 05:27 PM
Okay, thank you both. I managed to fix the errors, and I have figured out how to stop the character from clipping through walls.
Cool. Don't forget to mark this question as answered, so that it no longer appears in the unanswered questions list.
Your answer
Follow this Question
Related Questions
Bullet bounce issue using Vector3.reflect 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Restricting movement with Mathf.Clamp 4 Answers
Script will be found on the client but not on the server. 0 Answers