RuralPowerCompetition_yizhe.../RuralPowerCompetition_yizheng1/Assets/3rdParty/ccc/Player.cs

73 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
//定义一个移动速度MoveSpeed 其类型为public类型
public float MoveSpeed;
//用户在PlayerMove脚本界面可以对其进行调整
//用public定义脚本外可以修改并以脚本外修改的为主
//如果是private类型则只能在脚本修改
//定义两个私有类型的浮点型数据horizontal和vertical来记录A、D键和
//W、S键的数据也可以理解为记录水平轴和竖直轴的数据即X轴和Y轴
private float horizontal;
private float vertical;
//定义一个重力gravity
private float gravity = 9.8f;
//定义一个起跳速度
public float JumpSpeed = 15f;
//定义一个公有类型的CharacterController将其命名为PlayerController
//用于实例化对象
public CharacterController PlayerController;
//定义一个Vector3
//Vector3向量既可以用来表示位置也可以用来表示方向
//在立体三维坐标系中,分别取与x轴、y轴,z轴方向相同的3个单位向量ij, k作为一组基底。
//若a为该坐标系内的任意向量以坐标原点O为起点作向量OP=a。由空间基本定理知有且只有一组实数xy, z
//使得 a=向量OP=xi+yj+zk因此把实数对xy, z叫做向量a的坐标
//记作a=xy, z。这就是向量a的坐标表示。其中xy, z,也就是点P的坐标。向量OP称为点P的位置向量。
Vector3 Player_Move;
//如果还是不理解的话可以去CSDN上详细了解这里就不做过多说明了
//放在Updata里面每一帧都会执行导致不能够保存前一时刻的值
void Update()
{
//判断PlayerController是否在地面上如果不是在地面上就不能够前后左右移动也不能够起跳
if (PlayerController.isGrounded)
{
//Input.GetAxis("Horizontal")为获取X(横轴)轴方向的值给horizontal
horizontal = Input.GetAxis("Horizontal");
//Input.GetAxis("Vertical")为获取Z(纵轴)轴方向的值给Vertical
vertical = Input.GetAxis("Vertical");
//transform为本物体所在位置forward是向前的一个分量
//transform.forward * vertical为物体向前的方向乘获取的Z轴的值即物体向前移动的量如果vertical为负数则物体后退
//transform.right * horizontal为物体向右的方向乘获取的X轴的值即物体向右移动的量如果horizon为负数则物体向左
//两者相加后最后面乘移动数度赋值给Vector3类型的Player_Move即为物体实际运动的方向
Player_Move = (transform.forward * vertical + transform.right * horizontal) * MoveSpeed;
//判断玩家是否按下空格键
if (Input.GetAxis("Jump") == 1)
{
//按下空格键,给其竖直方向添加一个向上的数度,使其跳起
//Player_Move.y相当于Player_Move下的Vector3(0,1,0)
Player_Move.y = Player_Move.y + JumpSpeed;
}
}
//模拟重力下降的效果,让向上的量减去重力下降的量
//变量deltaTime表示为unity本地变量作为Time类中的数据在各帧中被更新在各帧中该变量显示了距上一帧所经历的时间值以秒计算
//这个变量的优点: 使用这个函数他会与你的游戏帧速率无关 放在Update函数中的代码是以帧来执行的
//我们需要将移动的物体乘以秒来执行而乘以deltaTime其就可以实现
//例如想让一个游戏对象向前以每秒10m移动的话 用你的速度10乘Time.deltaTime 他表示每秒移动的距离为10m而不是每帧10m
Player_Move.y = Player_Move.y - gravity * Time.deltaTime;
//PlayerController下的.Move为实现物体运动的函数
//Move()括号内放入一个Vector3类型的量本例中为Player_Move
PlayerController.Move(Player_Move * Time.deltaTime);
}
}