zoukankan      html  css  js  c++  java
  • 滑板控制器

    private var character :CharacterController;
    private var speed =0.0;
    private var trans:Transform;
    private var targetRot:Quaternion;

     var rotationSpeed = 90 ;
     var pedalImpulse = 3.5;
     var maxSpeed = 15;
     var decayRate = 0.1;
     var jumpSpeed : float = 8.0;
     var raycastMask :LayerMask;
     
    function Start()
    {
       character = GetComponent(CharacterController);
       trans= transform ;
    }

    function pedal()
    {
        speed += pedalImpulse;
        speed = Mathf.Min(speed, maxSpeed);
    }


    function Update ()
    {
       var horizontal = Input.GetAxis("Horizontal");
       var Vertical = Input.GetAxis("Vertical");
       transform.Rotate(0,rotationSpeed*horizontal*Time.deltaTime,0);
      
       if(character.isGrounded)
         pedal();
       //For normalized vectors Dot returns 1 if they point in exactly the same direction, -1
       //if they point in completely opposite directions and zero if the vectors are perpendicular.
       var moveDirection = trans.forward*speed*Vertical;
       var upright = Vector3.Dot(trans.forward,Vector3.up);//upright >0 是向上行走 <0向下行走
       Debug.Log(upright.ToString());
       //we want fake gravity when the character becomes upright
       //become the characterController dosen`t rotate
      
       //当x>0,sign(x)=1;当x=0,sign(x)=0; 当x<0, sign(x)=-1
       //Clamp01  Clamps value between 0 and 1 and returns value.
       moveDirection += Vector3.Lerp( Physics.gravity,Mathf.Sign(upright)
                   * -trans.forward * Physics.gravity.magnitude,
                   Mathf.Clamp01(Mathf.Abs(upright)));
      
       character.Move(moveDirection*Time.deltaTime);
      
       //旋转角色根据地形法线
       var ray = new Ray(trans.position+Vector3.up,-Vector3.up);
       var hit : RaycastHit;
       if (character.isGrounded && Physics.Raycast(ray,hit,100,raycastMask))
       {
           var targetRight = Vector3.Cross(hit.normal,trans.forward);
           var targetForward = Vector3.Cross(targetRight,hit.normal);
           targetRot = Quaternion.LookRotation(targetForward,hit.normal);
       }
      
       trans.rotation = Quaternion.Slerp(trans.rotation,targetRot,5*Time.deltaTime);
      
       if(character.isGrounded)
       {
           if(speed<0.3)
             speed=0;
        else
        {
           speed -= decayRate*Time.deltaTime*speed;
        }
       }
      
      
    }

  • 相关阅读:
    js实现将字符串里包含手机号的中间四位替换为****
    草稿for套for
    js实现将时间戳转换成2017-05-06 09:03:02
    时间日期校验接口
    JS延迟导航nav
    nav导航
    鼠标滚动请求加载
    常用开源Jabber(XMPP) IM服务器介绍(转)
    01.base-v1.js
    Haproxy安装及配置(转)
  • 原文地址:https://www.cnblogs.com/softimagewht/p/3757865.html
Copyright © 2011-2022 走看看