脚本my_CharacteCrontroll
人物前后左右运动
if (Input.GetKey(KeyCode.W))
{
transform.position += transform.forward * move_speed_forward * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position -= transform.right * move_speed_right * Time.deltaTime;
}
if (Input.GetKey(KeyCode.D))
{
transform.position += transform.right * move_speed_right * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
transform.position -= transform.forward * move_speed_back * Time.deltaTime;
}
在FixedUpdate()中加入代码,在固定时间运动一段距离;
人物跳跃
给人物加一个RigidBody和BoxCollider,勾选use gravity?给plane一个Collider,不然会穿过plane
bool IsGrounded()
{
return Physics.Raycast(transform.position, -Vector3.up, margin);
}
通过射线检测判断角色是不是在地面上
if(!IsGrounded())
{
rb.AddForce(0, -gravity, 0, ForceMode.Impulse);
}
如果不在地面上就给人物的刚体加一个向下为gravity的冲量
private void OnCollisionEnter(Collision collision)
{
if (collision.collider.tag == "Plane" && flag_jump == true)
{
rb.Sleep();
flag_jump = false;
}
}
当人物与地面碰到时,并且人物是按了跳跃键后落地的此时将人物的刚体sleep,防止其穿过地面。
if (flag_jump == false)
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(0, jumpspeed, 0, ForceMode.Impulse);
flag_jump = true;
}
}
当人物并没有在跳跃中时,按下按键跳跃,给人物一个向上的冲量。