UnityRPG系列笔记----2

##修改上次跳跃的不足

案例上的跳跃总觉得有点问题,好像是直接到达跳跃高度,然后往下落,但是想要的效果应该是平滑的从小往上,再下降的一个过程。研究了一下,把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);//移动
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值