Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

I get 2 internal compiler errors when i import Character Controller.

Discussion in 'Editor & General Support' started by Pancic, Nov 10, 2014.

  1. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Hi. Today I wanted to make a project. I imported Character Controller assets and right away i got 2 internal compiler errors. My Unity is up to date. I tried reinstalling it but with no success. This type of internal error has no output. When i delete Scripts folder from Character Controller, errors are gone, so there is problem with scripts. Character Controller is default Unity asset, not downloaded from Asset store.
     
  2. drewradley

    drewradley

    Joined:
    Sep 22, 2010
    Posts:
    3,063
    And what are these errors? Copy and paste them from the console. I've used the standard character controllers (as have many, many other people) with no problems so the scripts are fine as is.
     
  3. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Forum 1.png Forum2.png forum3.png forum4.png Ok a took this screenshots
    Come on guys. Because of this, I am unable to play my game (build and run), test it in Unity. Its default package which comes with unity
     
    Last edited: Nov 11, 2014
  4. Graham-Dunnett

    Graham-Dunnett

    Unity Technologies

    Joined:
    Jun 2, 2009
    Posts:
    4,287
    So, I know it's annoying to not get the help you want, but, as @drewradley said, loads of people have used these components without problems. There's not a universal problem that we're just ignoring.

    So, you said that when you delete the scripts the compiler errors are gone. I guess the inspector is now saying that the scripts are missing. Can you do the following:

    a) Start a new Unity project, with no packages imported into it. (Make sure everything is unticked in the Create New Project tab of the Project Wizard.

    b) Press the Play button and the game window should show you the boring blue game.

    c) Stop the game.

    d) Use Assets->Import Package->Character Controller and select the Import button bottom right of the Importing Package dialog. This should import the package. Usually these components are then imported and scripts compiled without any problems. In your case, I suspect you'll have errors. Please screenshot the errors that you get, and also screenshot the inspector window for each script. We'll try and work out what's going wrong on your machine.
     
  5. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
  6. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    taka6.png
     

    Attached Files:

  7. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    FPS input controller Java script


    private var motor : CharacterMotor;

    // Use this for initialization
    function Awake () {
    motor = GetComponent(CharacterMotor);
    }

    // Update is called once per frame
    function Update () {
    // Get the input vector from keyboard or analog stick
    var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

    if (directionVector != Vector3.zero) {
    // Get the length of the directon vector and then normalize it
    // Dividing by the length is cheaper than normalizing when we already have the length anyway
    var directionLength = directionVector.magnitude;
    directionVector = directionVector / directionLength;

    // Make sure the length is no bigger than 1
    directionLength = Mathf.Min(1, directionLength);

    // Make the input vector more sensitive towards the extremes and less sensitive in the middle
    // This makes it easier to control slow speeds when using analog sticks
    directionLength = directionLength * directionLength;

    // Multiply the normalized direction vector by the modified length
    directionVector = directionVector * directionLength;
    }

    // Apply the direction to the CharacterMotor
    motor.inputMoveDirection = transform.rotation * directionVector;
    motor.inputJump = Input.GetButton("Jump");
    }

    // Require a character controller to be attached to the same game object
    @script RequireComponent (CharacterMotor)
    @script AddComponentMenu ("Character/FPS Input Controller")
     
    Last edited: Nov 12, 2014
  8. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Platform input controller Java script


    // This makes the character turn to face the current movement speed per default.
    var autoRotate : boolean = true;
    var maxRotationSpeed : float = 360;

    private var motor : CharacterMotor;

    // Use this for initialization
    function Awake () {
    motor = GetComponent(CharacterMotor);
    }

    // Update is called once per frame
    function Update () {
    // Get the input vector from keyboard or analog stick
    var directionVector = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);

    if (directionVector != Vector3.zero) {
    // Get the length of the directon vector and then normalize it
    // Dividing by the length is cheaper than normalizing when we already have the length anyway
    var directionLength = directionVector.magnitude;
    directionVector = directionVector / directionLength;

    // Make sure the length is no bigger than 1
    directionLength = Mathf.Min(1, directionLength);

    // Make the input vector more sensitive towards the extremes and less sensitive in the middle
    // This makes it easier to control slow speeds when using analog sticks
    directionLength = directionLength * directionLength;

    // Multiply the normalized direction vector by the modified length
    directionVector = directionVector * directionLength;
    }

    // Rotate the input vector into camera space so up is camera's up and right is camera's right
    directionVector = Camera.main.transform.rotation * directionVector;

    // Rotate input vector to be perpendicular to character's up vector
    var camToCharacterSpace = Quaternion.FromToRotation(-Camera.main.transform.forward, transform.up);
    directionVector = (camToCharacterSpace * directionVector);

    // Apply the direction to the CharacterMotor
    motor.inputMoveDirection = directionVector;
    motor.inputJump = Input.GetButton("Jump");

    // Set rotation to the move direction
    if (autoRotate && directionVector.sqrMagnitude > 0.01) {
    var newForward : Vector3 = ConstantSlerp(
    transform.forward,
    directionVector,
    maxRotationSpeed * Time.deltaTime
    );
    newForward = ProjectOntoPlane(newForward, transform.up);
    transform.rotation = Quaternion.LookRotation(newForward, transform.up);
    }
    }

    function ProjectOntoPlane (v : Vector3, normal : Vector3) {
    return v - Vector3.Project(v, normal);
    }

    function ConstantSlerp (from : Vector3, to : Vector3, angle : float) {
    var value : float = Mathf.Min(1, angle / Vector3.Angle(from, to));
    return Vector3.Slerp(from, to, value);
    }

    // Require a character controller to be attached to the same game object
    @script RequireComponent (CharacterMotor)
    @script AddComponentMenu ("Character/Platform Input Controller")
     
  9. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    ThirdPersonCamera Java script




    var cameraTransform : Transform;
    private var _target : Transform;

    // The distance in the x-z plane to the target

    var distance = 7.0;

    // the height we want the camera to be above the target
    var height = 3.0;

    var angularSmoothLag = 0.3;
    var angularMaxSpeed = 15.0;

    var heightSmoothLag = 0.3;

    var snapSmoothLag = 0.2;
    var snapMaxSpeed = 720.0;

    var clampHeadPositionScreenSpace = 0.75;

    var lockCameraTimeout = 0.2;

    private var headOffset = Vector3.zero;
    private var centerOffset = Vector3.zero;

    private var heightVelocity = 0.0;
    private var angleVelocity = 0.0;
    private var snap = false;
    private var controller : ThirdPersonController;
    private var targetHeight = 100000.0;

    function Awake ()
    {
    if(!cameraTransform && Camera.main)
    cameraTransform = Camera.main.transform;
    if(!cameraTransform) {
    Debug.Log("Please assign a camera to the ThirdPersonCamera script.");
    enabled = false;
    }


    _target = transform;
    if (_target)
    {
    controller = _target.GetComponent(ThirdPersonController);
    }

    if (controller)
    {
    var characterController : CharacterController = _target.GetComponent.<Collider>();
    centerOffset = characterController.bounds.center - _target.position;
    headOffset = centerOffset;
    headOffset.y = characterController.bounds.max.y - _target.position.y;
    }
    else
    Debug.Log("Please assign a target to the camera that has a ThirdPersonController script attached.");


    Cut(_target, centerOffset);
    }

    function DebugDrawStuff ()
    {
    Debug.DrawLine(_target.position, _target.position + headOffset);

    }

    function AngleDistance (a : float, b : float)
    {
    a = Mathf.Repeat(a, 360);
    b = Mathf.Repeat(b, 360);

    return Mathf.Abs(b - a);
    }

    function Apply (dummyTarget : Transform, dummyCenter : Vector3)
    {
    // Early out if we don't have a target
    if (!controller)
    return;

    var targetCenter = _target.position + centerOffset;
    var targetHead = _target.position + headOffset;

    // DebugDrawStuff();

    // Calculate the current & target rotation angles
    var originalTargetAngle = _target.eulerAngles.y;
    var currentAngle = cameraTransform.eulerAngles.y;

    // Adjust real target angle when camera is locked
    var targetAngle = originalTargetAngle;

    // When pressing Fire2 (alt) the camera will snap to the target direction real quick.
    // It will stop snapping when it reaches the target
    if (Input.GetButton("Fire2"))
    snap = true;

    if (snap)
    {
    // We are close to the target, so we can stop snapping now!
    if (AngleDistance (currentAngle, originalTargetAngle) < 3.0)
    snap = false;

    currentAngle = Mathf.SmoothDampAngle(currentAngle, targetAngle, angleVelocity, snapSmoothLag, snapMaxSpeed);
    }
    // Normal camera motion
    else
    {
    if (controller.GetLockCameraTimer () < lockCameraTimeout)
    {
    targetAngle = currentAngle;
    }

    // Lock the camera when moving backwards!
    // * It is really confusing to do 180 degree spins when turning around.
    if (AngleDistance (currentAngle, targetAngle) > 160 && controller.IsMovingBackwards ())
    targetAngle += 180;

    currentAngle = Mathf.SmoothDampAngle(currentAngle, targetAngle, angleVelocity, angularSmoothLag, angularMaxSpeed);
    }


    // When jumping don't move camera upwards but only down!
    if (controller.IsJumping ())
    {
    // We'd be moving the camera upwards, do that only if it's really high
    var newTargetHeight = targetCenter.y + height;
    if (newTargetHeight < targetHeight || newTargetHeight - targetHeight > 5)
    targetHeight = targetCenter.y + height;
    }
    // When walking always update the target height
    else
    {
    targetHeight = targetCenter.y + height;
    }

    // Damp the height
    var currentHeight = cameraTransform.position.y;
    currentHeight = Mathf.SmoothDamp (currentHeight, targetHeight, heightVelocity, heightSmoothLag);

    // Convert the angle into a rotation, by which we then reposition the camera
    var currentRotation = Quaternion.Euler (0, currentAngle, 0);

    // Set the position of the camera on the x-z plane to:
    // distance meters behind the target
    cameraTransform.position = targetCenter;
    cameraTransform.position += currentRotation * Vector3.back * distance;

    // Set the height of the camera
    cameraTransform.position.y = currentHeight;

    // Always look at the target
    SetUpRotation(targetCenter, targetHead);
    }

    function LateUpdate () {
    Apply (transform, Vector3.zero);
    }

    function Cut (dummyTarget : Transform, dummyCenter : Vector3)
    {
    var oldHeightSmooth = heightSmoothLag;
    var oldSnapMaxSpeed = snapMaxSpeed;
    var oldSnapSmooth = snapSmoothLag;

    snapMaxSpeed = 10000;
    snapSmoothLag = 0.001;
    heightSmoothLag = 0.001;

    snap = true;
    Apply (transform, Vector3.zero);

    heightSmoothLag = oldHeightSmooth;
    snapMaxSpeed = oldSnapMaxSpeed;
    snapSmoothLag = oldSnapSmooth;
    }

    function SetUpRotation (centerPos : Vector3, headPos : Vector3)
    {
    // Now it's getting hairy. The devil is in the details here, the big issue is jumping of course.
    // * When jumping up and down we don't want to center the guy in screen space.
    // This is important to give a feel for how high you jump and avoiding large camera movements.
    //
    // * At the same time we dont want him to ever go out of screen and we want all rotations to be totally smooth.
    //
    // So here is what we will do:
    //
    // 1. We first find the rotation around the y axis. Thus he is always centered on the y-axis
    // 2. When grounded we make him be centered
    // 3. When jumping we keep the camera rotation but rotate the camera to get him back into view if his head is above some threshold
    // 4. When landing we smoothly interpolate towards centering him on screen
    var cameraPos = cameraTransform.position;
    var offsetToCenter = centerPos - cameraPos;

    // Generate base rotation only around y-axis
    var yRotation = Quaternion.LookRotation(Vector3(offsetToCenter.x, 0, offsetToCenter.z));

    var relativeOffset = Vector3.forward * distance + Vector3.down * height;
    cameraTransform.rotation = yRotation * Quaternion.LookRotation(relativeOffset);

    // Calculate the projected center position and top position in world space
    var centerRay = cameraTransform.GetComponent.<Camera>().ViewportPointToRay(Vector3(.5, 0.5, 1));
    var topRay = cameraTransform.GetComponent.<Camera>().ViewportPointToRay(Vector3(.5, clampHeadPositionScreenSpace, 1));

    var centerRayPos = centerRay.GetPoint(distance);
    var topRayPos = topRay.GetPoint(distance);

    var centerToTopAngle = Vector3.Angle(centerRay.direction, topRay.direction);

    var heightToAngle = centerToTopAngle / (centerRayPos.y - topRayPos.y);

    var extraLookAngle = heightToAngle * (centerRayPos.y - centerPos.y);
    if (extraLookAngle < centerToTopAngle)
    {
    extraLookAngle = 0;
    }
    else
    {
    extraLookAngle = extraLookAngle - centerToTopAngle;
    cameraTransform.rotation *= Quaternion.Euler(-extraLookAngle, 0, 0);
    }
    }

    function GetCenterOffset ()
    {
    return centerOffset;
    }
     
  10. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Third Person Controller Java script



    // Require a character controller to be attached to the same game object
    @script RequireComponent(CharacterController)

    public var idleAnimation : AnimationClip;
    public var walkAnimation : AnimationClip;
    public var runAnimation : AnimationClip;
    public var jumpPoseAnimation : AnimationClip;

    public var walkMaxAnimationSpeed : float = 0.75;
    public var trotMaxAnimationSpeed : float = 1.0;
    public var runMaxAnimationSpeed : float = 1.0;
    public var jumpAnimationSpeed : float = 1.15;
    public var landAnimationSpeed : float = 1.0;

    private var _animation : Animation;

    enum CharacterState {
    Idle = 0,
    Walking = 1,
    Trotting = 2,
    Running = 3,
    Jumping = 4,
    }

    private var _characterState : CharacterState;

    // The speed when walking
    var walkSpeed = 2.0;
    // after trotAfterSeconds of walking we trot with trotSpeed
    var trotSpeed = 4.0;
    // when pressing "Fire3" button (cmd) we start running
    var runSpeed = 6.0;

    var inAirControlAcceleration = 3.0;

    // How high do we jump when pressing jump and letting go immediately
    var jumpHeight = 0.5;

    // The gravity for the character
    var gravity = 20.0;
    // The gravity in controlled descent mode
    var speedSmoothing = 10.0;
    var rotateSpeed = 500.0;
    var trotAfterSeconds = 3.0;

    var canJump = true;

    private var jumpRepeatTime = 0.05;
    private var jumpTimeout = 0.15;
    private var groundedTimeout = 0.25;

    // The camera doesnt start following the target immediately but waits for a split second to avoid too much waving around.
    private var lockCameraTimer = 0.0;

    // The current move direction in x-z
    private var moveDirection = Vector3.zero;
    // The current vertical speed
    private var verticalSpeed = 0.0;
    // The current x-z move speed
    private var moveSpeed = 0.0;

    // The last collision flags returned from controller.Move
    private var collisionFlags : CollisionFlags;

    // Are we jumping? (Initiated with jump button and not grounded yet)
    private var jumping = false;
    private var jumpingReachedApex = false;

    // Are we moving backwards (This locks the camera to not do a 180 degree spin)
    private var movingBack = false;
    // Is the user pressing any keys?
    private var isMoving = false;
    // When did the user start walking (Used for going into trot after a while)
    private var walkTimeStart = 0.0;
    // Last time the jump button was clicked down
    private var lastJumpButtonTime = -10.0;
    // Last time we performed a jump
    private var lastJumpTime = -1.0;


    // the height we jumped from (Used to determine for how long to apply extra jump power after jumping.)
    private var lastJumpStartHeight = 0.0;


    private var inAirVelocity = Vector3.zero;

    private var lastGroundedTime = 0.0;


    private var isControllable = true;

    function Awake ()
    {
    moveDirection = transform.TransformDirection(Vector3.forward);

    _animation = GetComponent(Animation);
    if(!_animation)
    Debug.Log("The character you would like to control doesn't have animations. Moving her might look weird.");

    /*
    public var idleAnimation : AnimationClip;
    public var walkAnimation : AnimationClip;
    public var runAnimation : AnimationClip;
    public var jumpPoseAnimation : AnimationClip;
    */
    if(!idleAnimation) {
    _animation = null;
    Debug.Log("No idle animation found. Turning off animations.");
    }
    if(!walkAnimation) {
    _animation = null;
    Debug.Log("No walk animation found. Turning off animations.");
    }
    if(!runAnimation) {
    _animation = null;
    Debug.Log("No run animation found. Turning off animations.");
    }
    if(!jumpPoseAnimation && canJump) {
    _animation = null;
    Debug.Log("No jump animation found and the character has canJump enabled. Turning off animations.");
    }

    }


    function UpdateSmoothedMovementDirection ()
    {
    var cameraTransform = Camera.main.transform;
    var grounded = IsGrounded();

    // Forward vector relative to the camera along the x-z plane
    var forward = cameraTransform.TransformDirection(Vector3.forward);
    forward.y = 0;
    forward = forward.normalized;

    // Right vector relative to the camera
    // Always orthogonal to the forward vector
    var right = Vector3(forward.z, 0, -forward.x);

    var v = Input.GetAxisRaw("Vertical");
    var h = Input.GetAxisRaw("Horizontal");

    // Are we moving backwards or looking backwards
    if (v < -0.2)
    movingBack = true;
    else
    movingBack = false;

    var wasMoving = isMoving;
    isMoving = Mathf.Abs (h) > 0.1 || Mathf.Abs (v) > 0.1;

    // Target direction relative to the camera
    var targetDirection = h * right + v * forward;

    // Grounded controls
    if (grounded)
    {
    // Lock camera for short period when transitioning moving & standing still
    lockCameraTimer += Time.deltaTime;
    if (isMoving != wasMoving)
    lockCameraTimer = 0.0;

    // We store speed and direction seperately,
    // so that when the character stands still we still have a valid forward direction
    // moveDirection is always normalized, and we only update it if there is user input.
    if (targetDirection != Vector3.zero)
    {
    // If we are really slow, just snap to the target direction
    if (moveSpeed < walkSpeed * 0.9 && grounded)
    {
    moveDirection = targetDirection.normalized;
    }
    // Otherwise smoothly turn towards it
    else
    {
    moveDirection = Vector3.RotateTowards(moveDirection, targetDirection, rotateSpeed * Mathf.Deg2Rad * Time.deltaTime, 1000);

    moveDirection = moveDirection.normalized;
    }
    }

    // Smooth the speed based on the current target direction
    var curSmooth = speedSmoothing * Time.deltaTime;

    // Choose target speed
    //* We want to support analog input but make sure you cant walk faster diagonally than just forward or sideways
    var targetSpeed = Mathf.Min(targetDirection.magnitude, 1.0);

    _characterState = CharacterState.Idle;

    // Pick speed modifier
    if (Input.GetKey (KeyCode.LeftShift) || Input.GetKey (KeyCode.RightShift))
    {
    targetSpeed *= runSpeed;
    _characterState = CharacterState.Running;
    }
    else if (Time.time - trotAfterSeconds > walkTimeStart)
    {
    targetSpeed *= trotSpeed;
    _characterState = CharacterState.Trotting;
    }
    else
    {
    targetSpeed *= walkSpeed;
    _characterState = CharacterState.Walking;
    }

    moveSpeed = Mathf.Lerp(moveSpeed, targetSpeed, curSmooth);

    // Reset walk time start when we slow down
    if (moveSpeed < walkSpeed * 0.3)
    walkTimeStart = Time.time;
    }
    // In air controls
    else
    {
    // Lock camera while in air
    if (jumping)
    lockCameraTimer = 0.0;

    if (isMoving)
    inAirVelocity += targetDirection.normalized * Time.deltaTime * inAirControlAcceleration;
    }



    }


    function ApplyJumping ()
    {
    // Prevent jumping too fast after each other
    if (lastJumpTime + jumpRepeatTime > Time.time)
    return;

    if (IsGrounded()) {
    // Jump
    // - Only when pressing the button down
    // - With a timeout so you can press the button slightly before landing
    if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
    verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
    SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
    }
    }
    }


    function ApplyGravity ()
    {
    if (isControllable) // don't move player at all if not controllable.
    {
    // Apply gravity
    var jumpButton = Input.GetButton("Jump");


    // When we reach the apex of the jump we send out a message
    if (jumping && !jumpingReachedApex && verticalSpeed <= 0.0)
    {
    jumpingReachedApex = true;
    SendMessage("DidJumpReachApex", SendMessageOptions.DontRequireReceiver);
    }

    if (IsGrounded ())
    verticalSpeed = 0.0;
    else
    verticalSpeed -= gravity * Time.deltaTime;
    }
    }

    function CalculateJumpVerticalSpeed (targetJumpHeight : float)
    {
    // From the jump height and gravity we deduce the upwards speed
    // for the character to reach at the apex.
    return Mathf.Sqrt(2 * targetJumpHeight * gravity);
    }

    function DidJump ()
    {
    jumping = true;
    jumpingReachedApex = false;
    lastJumpTime = Time.time;
    lastJumpStartHeight = transform.position.y;
    lastJumpButtonTime = -10;

    _characterState = CharacterState.Jumping;
    }

    function Update() {

    if (!isControllable)
    {
    // kill all inputs if not controllable.
    Input.ResetInputAxes();
    }

    if (Input.GetButtonDown ("Jump"))
    {
    lastJumpButtonTime = Time.time;
    }

    UpdateSmoothedMovementDirection();

    // Apply gravity
    // - extra power jump modifies gravity
    // - controlledDescent mode modifies gravity
    ApplyGravity ();

    // Apply jumping logic
    ApplyJumping ();

    // Calculate actual motion
    var movement = moveDirection * moveSpeed + Vector3 (0, verticalSpeed, 0) + inAirVelocity;
    movement *= Time.deltaTime;

    // Move the controller
    var controller : CharacterController = GetComponent(CharacterController);
    collisionFlags = controller.Move(movement);

    // ANIMATION sector
    if(_animation) {
    if(_characterState == CharacterState.Jumping)
    {
    if(!jumpingReachedApex) {
    _animation[jumpPoseAnimation.name].speed = jumpAnimationSpeed;
    _animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
    _animation.CrossFade(jumpPoseAnimation.name);
    } else {
    _animation[jumpPoseAnimation.name].speed = -landAnimationSpeed;
    _animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
    _animation.CrossFade(jumpPoseAnimation.name);
    }
    }
    else
    {
    if(controller.velocity.sqrMagnitude < 0.1) {
    _animation.CrossFade(idleAnimation.name);
    }
    else
    {
    if(_characterState == CharacterState.Running) {
    _animation[runAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, runMaxAnimationSpeed);
    _animation.CrossFade(runAnimation.name);
    }
    else if(_characterState == CharacterState.Trotting) {
    _animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, trotMaxAnimationSpeed);
    _animation.CrossFade(walkAnimation.name);
    }
    else if(_characterState == CharacterState.Walking) {
    _animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, walkMaxAnimationSpeed);
    _animation.CrossFade(walkAnimation.name);
    }

    }
    }
    }
    // ANIMATION sector

    // Set rotation to the move direction
    if (IsGrounded())
    {

    transform.rotation = Quaternion.LookRotation(moveDirection);

    }
    else
    {
    var xzMove = movement;
    xzMove.y = 0;
    if (xzMove.sqrMagnitude > 0.001)
    {
    transform.rotation = Quaternion.LookRotation(xzMove);
    }
    }

    // We are in jump mode but just became grounded
    if (IsGrounded())
    {
    lastGroundedTime = Time.time;
    inAirVelocity = Vector3.zero;
    if (jumping)
    {
    jumping = false;
    SendMessage("DidLand", SendMessageOptions.DontRequireReceiver);
    }
    }
    }

    function OnControllerColliderHit (hit : ControllerColliderHit )
    {
    // Debug.DrawRay(hit.point, hit.normal);
    if (hit.moveDirection.y > 0.01)
    return;
    }

    function GetSpeed () {
    return moveSpeed;
    }

    function IsJumping () {
    return jumping;
    }

    function IsGrounded () {
    return (collisionFlags & CollisionFlags.CollidedBelow) != 0;
    }

    function GetDirection () {
    return moveDirection;
    }

    function IsMovingBackwards () {
    return movingBack;
    }

    function GetLockCameraTimer ()
    {
    return lockCameraTimer;
    }

    function IsMoving () : boolean
    {
    return Mathf.Abs(Input.GetAxisRaw("Vertical")) + Mathf.Abs(Input.GetAxisRaw("Horizontal")) > 0.5;
    }

    function HasJumpReachedApex ()
    {
    return jumpingReachedApex;
    }

    function IsGroundedWithTimeout ()
    {
    return lastGroundedTime + groundedTimeout > Time.time;
    }

    function Reset ()
    {
    gameObject.tag = "Player";
    }
     
  11. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Mouse look C# script


    using UnityEngine;
    using System.Collections;

    /// MouseLook rotates the transform based on the mouse delta.
    /// Minimum and Maximum values can be used to constrain the possible rotation

    /// To make an FPS style character:
    /// - Create a capsule.
    /// - Add the MouseLook script to the capsule.
    /// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
    /// - Add FPSInputController script to the capsule
    /// -> A CharacterMotor and a CharacterController component will be automatically added.

    /// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
    /// - Add a MouseLook script to the camera.
    /// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
    [AddComponentMenu("Camera-Control/Mouse Look")]
    public class MouseLook : MonoBehaviour {

    public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityX = 15F;
    public float sensitivityY = 15F;

    public float minimumX = -360F;
    public float maximumX = 360F;

    public float minimumY = -60F;
    public float maximumY = 60F;

    float rotationY = 0F;

    void Update ()
    {
    if (axes == RotationAxes.MouseXAndY)
    {
    float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

    rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
    rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

    transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
    }
    else if (axes == RotationAxes.MouseX)
    {
    transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
    }
    else
    {
    rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
    rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

    transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
    }
    }

    void Start ()
    {
    // Make the rigid body not change rotation
    if (GetComponent<Rigidbody>())
    GetComponent<Rigidbody>().freezeRotation = true;
    }
    }
     
  12. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    I see. No one can fix this problem. Just because of that error i don't want to use Unity anymore. All my creativity killed in a second.
     
  13. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Which version of Unity are you using?
    Did you try the steps as explained by Graham?
     
  14. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    I did. There is no internal compiler error with no output when there isn't Character Controller. There isn't that error when i import other assets, like Terrain or Substances. It only happens with it. I tried different version of Unity and this error only happens in 4.x. I used 4.5.5, and i tried older versions.
     
  15. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    What exactly is the internal compiler error? You can select the message and copy it using Ctrl+C.
     
  16. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    Internal compiler error. See the console log for more information. output was:
     
  17. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    So there is no further text when you select the message?
     
  18. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    No. That's it.
     
  19. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Let's try to isolate the issue then. Try this:
    - Create an empty project
    - Select "Assets->Import Package->Character Controller"
    --> Deselect everything, but the MouseLook script

    Do you get the error message now?
     
  20. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    I get one internal compiler error now.
     
  21. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    It seems like an issue with the UnityScript compiler. Did you make any changes to Unity?

    It might help to completely remove Unity and then install it again. Did you also make sure that nothing is blocked by your anti-virus?
     
  22. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    I tried redownloading and reinstalling Unity. Unity is allowed in firewall and antivirus. I didn't make any changes so i don't know where is a problem.
     
  23. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    Unity is not blocked in the firewall or antivirus is often not good enough. I had to use a different antivirus because it block Unity, even if I selected it as trustworthy. You may find out whether that is the cause by uninstalling them, test whether Unity works and then install them again of course.
    Yes, it is annoying, but I don't know whether there is another method to test it reliably.
     
  24. Pancic

    Pancic

    Joined:
    Nov 10, 2014
    Posts:
    16
    I am using COMODO antivirus. But is there a way to fix UnityScrpt compiler or is it maybe a broken Character Controller asset?
     
  25. Dantus

    Dantus

    Joined:
    Oct 21, 2009
    Posts:
    5,667
    The issue is not related to the character controller, because it doesn't need to be compiled at all. If you only add a character controller without further scripts, you will most likely not have any issues. The problem only occurs as soon as something needs to be compiled. At least the UnityScript compiler doesn't seem to be executed correctly, maybe not even started.
    It might be possible the the antivirus blocks the UnityScript compiler. It is just one possibility. You will only know whether that is the issue if you uninstall it. It is up to you whether you want to give it a try.
     
  26. Dorian_Bucknor

    Dorian_Bucknor

    Joined:
    Nov 5, 2018
    Posts:
    2
    I am also having that problem with the Character Controller too
     
  27. Dorian_Bucknor

    Dorian_Bucknor

    Joined:
    Nov 5, 2018
    Posts:
    2
    can someone plzz help