• unity3d 移动与旋转 1


    移动与旋转 1

    player角色随asdw按键左右上下移动并旋转

     1 public void Update()
     2     {            
     3         // Reset player rotation to look in the same direction as the camera.
     4         Quaternion tempRotation = myCamera.transform.rotation;
     5         tempRotation.x = 0;
     6         tempRotation.z = 0;        
     7         myTransform.rotation = tempRotation;
     8         
     9         float xMovement = Input.GetAxis("Horizontal");// The horizontal movement.
    10         float zMovement = Input.GetAxis("Vertical");// The vertical movement.
    11                 
    12         // Are whe grounded, yes then move.
    13         if (IsGrounded()) {
    14             
    15             //Move player the same distance in each direction. Player must move in a circular motion.
    16             float tempAngle = Mathf.Atan2(zMovement,xMovement);  //获取到键盘输入的弧度
    17 
    18             xMovement *= Mathf.Abs(Mathf.Cos(tempAngle));//将键盘坐标系的弧度转换为新坐标系的x坐标(当斜边为1时cos弧度求到x)
    19             zMovement *= Mathf.Abs(Mathf.Sin(tempAngle));//同理求到y
    20 
    21             moveDirection = new Vector3(xMovement, 0, zMovement); //得到方向
    22 
    23             moveDirection = myTransform.TransformDirection(moveDirection);
    24             moveDirection *= moveSpeed;
    25             
    26             // Make the player jump.
    27             if (Input.GetButton("Jump"))
    28                {
    29                 moveDirection.y = jumpSpeed; //跳跃
    30                 // TODO Add jump animation.
    31                }            
    32            }
    33         
    34         // Apply gravity.
    35         moveDirection.y -= gravity * Time.deltaTime; //重力
    36                     
    37         // Are we moving.
    38         if(moveDirection.x == 0 && moveDirection.z == 0)
    39         {
    40             if(animator!=null)
    41             {
    42                 animator.SetBool("run", false);    //停止移动后停止播放动画        
    43             }
    44         }
    45         else
    46         {
    47             // Make rotation object(The child object that contains animation) rotate to direction we are moving in.
    48             Vector3 temp = myTransform.position;
    49             temp.x += xMovement; //得到下一个目标点
    50             temp.z += zMovement;        
    51             myRotationObject.localRotation = Quaternion.Slerp(myRotationObject.localRotation, Quaternion.LookRotation(temp-myTransform.position), rotationSpeed * Time.deltaTime);    //使角色平滑转向下一个目标点
    52             if(animator!=null)
    53             {
    54                 animator.SetBool("run", true); 
    55             }
    56         }
    57             
    58         controller.Move(moveDirection * Time.deltaTime); //开始移动                    
    59     }
  • 相关阅读:
    JDK1.8源码之String
    C# MySQL数据库的备份 还原 初始化
    c# 校验文本框的正则
    生成条形码和二维码并实现打印的功能
    获取一张图片的字节数组及字节数组的合并
    多线程以及抓取图片。
    C#获取URL参数值(NameValueCollection)
    键值对
    SqLiter
    生成机器码
  • 原文地址:https://www.cnblogs.com/88999660/p/3707168.html
Copyright © 2020-2023  润新知