##修改上次跳跃的不足
案例上的跳跃总觉得有点问题,好像是直接到达跳跃高度,然后往下落,但是想要的效果应该是平滑的从小往上,再下降的一个过程。研究了一下,把PlayerControl代码改成了
using UnityEngine;
using System.Collections;
public class PlayerControl : MonoBehaviour {
#region 人物属性
public string m_name="CWH";//名字,以后看可以让玩家自己取名字的
public int m_experience=0;//这是经验,将会是隐性的属性,也就是说在玩家眼中是不可见的。原来的版本没有,这次重新做的话,还是决定加进去。
public int m_maxLife=100;//生命
public int m_currentLife=100;//当前生命
public int m_maxMagic=50;//魔法值
public int m_currentMagic=50;//当前魔法值
public int m_defense=10;//防御力
public int m_attack=20;//攻击力
public float m_speed=3;//速度
public int m_rotateSpeed=180;//旋转速度
public float m_jump=45;//跳跃力
#endregion
#region 对象
public Transform m_transform;//定义一个自己的对象,据说有好处。
private CharacterController m_controller;
#endregion
#region 变量
private int m_moveDirection=-1;//这个是属于临时变量,用于判断移动方向的
private float m_moveSpeed=0;//这个是临时的速度变量,用于判断移动速度具体方向
public Animation m_animation;
#endregion
#region 判断
private bool m_jumpTmp=false;//判断是否可以跳跃
#endregion
void Start ()
{
m_transform=this.transform;
m_controller=GetComponent<CharacterController>();
m_animation=GetComponent<Animation>();
}
void Update ()
{
Move ();
}
void Move()
{
Vector3 m_forward=m_transform.TransformDirection(Vector3.forward);
Vector3 m_direction=m_transform.TransformDirection(Vector3.down);//方向向下的临时变量
if(Input.GetKey(KeyCode.A))///以键盘上的A键控制角色向左旋转,注意向左旋转的话,rotateSpeed是为负的。
{
if(m_jumpTmp){
m_animation.CrossFade("Jump2");
}else{
m_animation.CrossFade("Run");
}
m_transform.Rotate(m_transform.up*-m_rotateSpeed*Time.deltaTime);
}else if(Input.GetKey(KeyCode.D))///以键盘上的D键控制人物向右旋转
{
if(m_jumpTmp){
m_animation.CrossFade("Jump2");
}else{
m_animation.CrossFade("Run");
}
m_transform.Rotate(m_transform.up*m_rotateSpeed*Time.deltaTime);
}else if(Input.GetKey(KeyCode.W))///向前移动
{
if(m_jumpTmp){
m_animation.CrossFade("Jump2");
}else{
m_animation.CrossFade("Run");
}
m_moveDirection=1;
m_moveSpeed=m_moveDirection*m_speed;
}else if(Input.GetKey(KeyCode.S))///向后移动
{
if(m_jumpTmp){
m_animation.CrossFade("Jump2");
}else{
m_animation.CrossFade("Run");
}
m_moveDirection=-1;
m_moveSpeed=m_moveDirection*m_speed;
}else if(m_animation.IsPlaying("Run")){
m_moveSpeed=0;
if(m_jumpTmp){
m_animation.CrossFade("Jump2");
}else{
m_animation.CrossFade("Idle");
}
///m_animation.CrossFade("Idle");
}else m_moveSpeed=0;
if(m_controller.isGrounded)///只有在地面才可以跳
{
if(Input.GetKey(KeyCode.Space))
{
if(m_controller.isGrounded)
{
m_jumpTmp=true;
}else if(!Physics.Raycast(m_transform.position,m_direction,1.5f))///判断跳跃高度
{
m_jumpTmp=false;
}
if(m_jumpTmp)
{
m_animation.CrossFade("Jump2");
}
}
}
if(!Physics.Raycast(m_transform.position,m_direction,1.5f))///判断跳跃高度
{
m_jumpTmp=false;
}
if(m_jumpTmp){
m_transform.Translate(Vector3.up * Time.deltaTime*2.5f);
}
m_controller.SimpleMove(m_forward*m_moveSpeed);//移动
}
}