123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- #pragma strict
- var inputMoveDirection:Vector3;
- var inputJump=false;
- var grounded=false;
- var downmovement=0.1;
- var velocity:Vector3;
- public var max_speed=0.1;
- public var max_speed_air=0.13;
- public var max_speed_ground=0.1;
- public var acceleration=10;
- public var acceleration_air=10;
- public var gravity=-0.18;
- public var friction=0.8;
- public var cameraObject:GameObject;
- private var controller : CharacterController;
- public var groundNormal:Vector3;
- public var jumpspeed=0.16;
- public var stopmovingup=false;
- public var fallkillspeed=-0.38;
- public var collisionFlags : CollisionFlags;
- public var ground_gameobject:GameObject=null;
- public var last_ground_pos:Vector3;
- private var jumpcommand=0;
- public var floating=false;
- public var autowalk:int=0;
- public var inhibit_autowalk=1;
- public var reload_once:int=0;
- function Awake () {
- controller = GetComponent (CharacterController);
- Debug.Log("Controller Slopelimit"+controller.slopeLimit);
- }
- function toggle_autowalk(){
- if (autowalk==0)autowalk=1;
- else autowalk=0;
- }
- function JumpUp(){
- jumpcommand=1;
- }
- function Start () {
- reload_once=0;
- }
- function OnControllerColliderHit (hit : ControllerColliderHit) {
-
- if (hit.normal.y > 0 && hit.moveDirection.y < 0) {
- groundNormal = hit.normal;
- grounded=true;
- ground_gameobject=hit.gameObject;
-
- //print("Landed on: ground"+ground_gameobject.name);
- stopmovingup=false;
-
-
- }
-
-
- }
-
- var fadeduration = 2.0; // fade duration in seconds
- function Die(){
- // create a GUITexture:
- var fade: GameObject = new GameObject();
- fade.AddComponent(GUITexture);
- // and set it to the screen dimensions:
- fade.GetComponent.<GUITexture>().pixelInset = Rect(0, 0, Screen.width, Screen.height);
- // set its texture to a black pixel:
- var tex = new Texture2D(1, 1);
- tex.SetPixel(0, 0, Color.black);
- tex.Apply();
- fade.GetComponent.<GUITexture>().texture = tex;
- // then fade it during duration seconds
- for (var alpha:float = 0.0; alpha < 1.0; ){
- alpha += Time.deltaTime / fadeduration;
- fade.GetComponent.<GUITexture>().color.a = alpha;
- yield;
- }
- // finally, reload the current level:
- if (reload_once==0){
- reload_once =1;
- var async : AsyncOperation = Application.LoadLevelAsync(Application.loadedLevel);
- yield async;
-
- }
-
- }
-
- function Update () {
- if (velocity.y < fallkillspeed)Die();
- Debug.DrawLine (transform.position, transform.position+groundNormal, Color.red);
- //print("GroundNormal y" +groundNormal.y);
- var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
- if (autowalk==1)directionVector=Vector3(0,0,1*inhibit_autowalk);
- 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
- inputMoveDirection = directionVector;
- inputJump = Input.GetButton("Jump");
-
-
-
- if(jumpcommand==1){
- inputJump=true;
- jumpcommand=0;
- }
-
- grounded=(collisionFlags & CollisionFlags.Below);
-
- if (floating){
- velocity.y=0.1;
- }
- if (inputJump&&grounded){
- velocity.y+=jumpspeed;
- velocity.z*=1.5;
-
- //print ("Jump");
- grounded=false;
- }
-
-
- if (grounded){
- velocity+=inputMoveDirection*acceleration*Time.deltaTime;
- }
- else
- {
- velocity+=inputMoveDirection*acceleration_air*Time.deltaTime;
- }
-
- var translation=Vector3(velocity.x,0,velocity.z);
-
- translation=Vector3.Lerp(Vector3(0,0,0),translation,friction);
-
- velocity.x=translation.x;
- velocity.z=translation.z;
- velocity.y = velocity.y+gravity*Time.deltaTime;
- //print ("Time deltatime "+Time.deltaTime);
-
-
- if (grounded)velocity.y=0;
- //print ("Vel y "+velocity.y);
-
-
-
- if (grounded)max_speed=max_speed_ground;
- if (!grounded)max_speed=max_speed_air;
-
- if (translation.magnitude>max_speed){
- translation=translation/translation.magnitude;
- translation=translation*max_speed;
- }
- velocity.x=translation.x;
- velocity.z=translation.z;
- translation.y=velocity.y;
-
-
-
-
-
- var yrotation_camera= Quaternion.Euler(0, cameraObject.transform.rotation.eulerAngles.y, 0);
- //transform.position+=yrotation_camera*translation;
-
-
- var platformdelta:Vector3;
-
- if(ground_gameobject!=null) {
- //print("ground object ungleich null");
- platformdelta=ground_gameobject.transform.position-last_ground_pos;
- }
-
- //if (!grounded)platformdelta=Vector3.zero;
-
-
- //MAKE A MOVE!
-
- collisionFlags=controller.Move(yrotation_camera*translation+platformdelta);
-
-
- if (collisionFlags & CollisionFlags.CollidedAbove)
- {
-
- if (stopmovingup==false){
- print ("ControllerColliderHit");
- velocity.y=0;
- stopmovingup=true;
- }
-
- }
-
-
-
- if (ground_gameobject!=null && !grounded){
- ground_gameobject=null;
- }
-
- if(ground_gameobject!=null)last_ground_pos=ground_gameobject.transform.position;
- }
- function LateUpdate () {
- //groundNormal=Vector3.zero;
- }
- function OnGUI () {
- // GUI.Label (Rect (10, 10, 400, 20), "isgrounded "+grounded+ " velocity.y "+velocity.y+" collsionbelow "+ (collisionFlags & CollisionFlags.Below) );
-
- var e : Event = Event.current;
- if (e.isKey) {
- Debug.Log("Detected key code: " + e.keyCode);
- GUI.Label (Rect (10, 10, 400, 20), "Keycode ="+ e.keyCode );
-
- }
-
-
-
- }
- function OnTriggerEnter( other : Collider ) {
- if (other.name == "Float") {
- floating=true;
- inhibit_autowalk=0.1;
- }
- }
- function OnTriggerExit( other : Collider ) {
- if (other.name == "Float") {
- floating=false;
- inhibit_autowalk=1;
- }
- }
- @script RequireComponent (CharacterController)
|