- Home /
Question by
YesIPeeRainbows · Jul 18, 2016 at 06:28 PM ·
collisioncharactercontrollercontrollerdetection
Ceiling collision detection
I would like my player to hit the ceiling and it's velocity to set to fallVel however I can't figure out how to use the collisionFlags with my CharacterController. Im not quite sure how to get around it., any Ideas?
using UnityEngine;
using System.Collections;
public class CharacterController : MonoBehaviour
{
[System.Serializable]
public class MoveSettings
{
public float forwardVel = 12;
public float rotateVel = 100;
public float jumpVel = 25;
public float distToGrounded = 0.1f;
public LayerMask ground;
}
[System.Serializable]
public class PhysSettings
{
public float downAccel = 0.1f;
}
[System.Serializable]
public class InputSettings
{
public float inputDelay = 0.1f;
public string FORWARD_AXIS = "Vertical";
public string TURN_AXIS = "Horizontal";
public string JUMP_AXIS = "Jump";
}
public MoveSettings moveSetting = new MoveSettings();
public PhysSettings physSetting = new PhysSettings();
public InputSettings inputSetting = new InputSettings();
Vector3 velocity = Vector3.zero;
Quaternion targetRot;
Rigidbody rBody;
float forwardInput, turnInput, jumpInput;
public Quaternion TargetRot
{
get { return targetRot; }
}
bool Grounded()
{
return Physics.Raycast(transform.position, Vector3.down, moveSetting.distToGrounded, moveSetting.ground);
}
void Start()
{
targetRot = transform.rotation;
if (GetComponent<Rigidbody>())
rBody = GetComponent<Rigidbody>();
else
Debug.LogError("Character Requires Rigidbody");
forwardInput = turnInput = jumpInput = 0;
}
void GetInput()
{
forwardInput = Input.GetAxis(inputSetting.FORWARD_AXIS);
turnInput = Input.GetAxis(inputSetting.TURN_AXIS);
jumpInput = Input.GetAxisRaw(inputSetting.JUMP_AXIS);
}
void Update()
{
GetInput();
Turn();
}
void FixedUpdate()
{
Run();
Jump();
rBody.velocity = transform.TransformDirection(velocity);
}
void Run()
{
if (Mathf.Abs(forwardInput) > inputSetting.inputDelay)
{
velocity.z = moveSetting.forwardVel * forwardInput;
}
else
velocity.z = 0;
}
void Turn()
{
targetRot *= Quaternion.AngleAxis(moveSetting.rotateVel * turnInput * Time.deltaTime, Vector3.up);
transform.rotation = targetRot;
}
int jumpCount = 2;
CharacterController controller = new CharacterController();
void Jump()
{
if (Input.GetKeyDown(KeyCode.Space) && jumpCount >= 1)
{
jumpCount--;
velocity.y = moveSetting.jumpVel + jumpCount;
}
else if (Grounded())
{
jumpCount = 2;
velocity.y = 0;
}
else
{
velocity.y -= physSetting.downAccel;
}
}
Comment