3d 键盘控制位移:解释

来源:互联网 发布:求生之路2 mac 编辑:程序博客网 时间:2024/06/06 02:38
using System.Collections.Generic;using UnityEngine;[RequireComponent(typeof(CharacterController))][AddComponentMenu("Control Script/FPS Input")]//确保脚本加载了其他需要的组件public class FPSInput : MonoBehaviour {    public float speed = 3.0f;    public float gravity = -9.8f; //设置重力,让物体在路上走,设为0可以飞行    //角色控制器让你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。    private CharacterController _charController;     void Start () {        _charController = GetComponent<CharacterController> ();     }    void Update () {        //由键盘按键,控制坐标速度        float deltaX = Input.GetAxis ("Horizontal") * speed;        float deltaZ = Input.GetAxis ("Vertical") * speed;        // transform.Translate (deltaX, 0, deltaZ);        //(一)--------------不好用,会由计算机的性能产生差异        //transform.Translate(deltaX * Time.deltaTime, 0, deltaZ * Time.deltaTime);        //(二)----------两帧的时间:Time.deltaTime        //时间*速度=每调用一次update产生的位移,解决法(一)的缺点        //------------------------综合调用------------------------        Vector3 movement = new Vector3 (deltaX, 0, deltaZ);        movement = Vector3.ClampMagnitude(movement,speed);        movement.y = gravity;        movement *= Time.deltaTime; //让移动独立于帧率        movement = transform.TransformDirection (movement);        _charController.Move (movement)        /*Vector3.ClampMagnitude:返回原向量的拷贝,            并且模最大不超过第二个参数所指示的长度。            功能:限制向量长度到一个特定的长度。          tranform.TransformDirection:变换方向从局部坐标转换到世界坐标。          说明是以世界为坐标轴左移,而不是以玩家的面向,两者可能截然不同          characterController:角色控制器不受力的影响,            仅当你调用Move函数时才运动。它执行的运动受制于碰撞。*/    }}
原创粉丝点击