Unity3d游戏 轻功设计

unity3d游戏,武侠类,需要实现人物多段式轻功
思路就是点击轻功的时候,给角色一个向上的速度并转换动作,摇杆控制方向。把向上或向下的速度,与角色水平方向区分处理。

  1. 角色起跳前判断位置是否属于可跳

    通过Physics.Raycast射线方式,判断角色脚下是否为walk层

   //向下发射线
   bool IsGrounded(float margin, string layerName = "Walk")
    {
        //本角色当前位置提高0.9f,然后向下发出1.2f的射线
        Vector3 SourcePosition = transform.position;
        Vector3 rayStartPoint = SourcePosition + new Vector3(0f, 0.9f, 0f);
        RaycastHit hit;
        LayerMask mask = 1 << LayerMask.NameToLayer(layerName);//射线打到walk层
        if (Physics.Raycast(rayStartPoint, Vector3.down, out hit, margin, mask))
        {
            //Helper.LogError("距离:::::::::::"+hit.distance);
            //Helper.DrawLine(rayStartPoint, hit.point, Color.red);
           //如果射线打到walk层就返回true
            return true;
        }
        else
        {
            return false;
        }
    }  
  1. 起跳设置
    首先人物身上挂CharacterController脚本
    CharacterController controller = GetComponent<CharacterController>();
 获取到CharacterController实例

核心起跳语句:

float gravity=10F; 
float temp =10;
bool checkdis=false;//是否开始轻功计算
void setjump()
{
    //点击起跳按钮后的初速度 只执行一次的
    moveDirection.y = jumpUpSpeed1;
    checkdis = true;
}
void FixedUpdate()
   {
    ......
    if(checkdis)
    {  
    moveDirection.y = temp;//每次必须把上次计算的方向y值结果赋值给方向y值
    //每一帧计算的,高度减值
    moveDirection.y -= gravity * Time.deltaTime;
    temp = moveDirection.y;
    controller.Move(moveDirection * Time.deltaTime);//注意是一个方向
    }
   }
  1. 四段跳 判断动作名,以及下降阶段变动作的判断
        bool result = false;
        //获取当前动作的状态
        AnimatorStateInfo animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
        if (animatorStateInfo.IsName("jumpdown") || CurState == AnimatorState.JumpDown)
        {
            如果已经是降落状态,返回false
            return result;
        }
        if (animatorStateInfo.normalizedTime >= 0.9f)
        {
            //动作播放超过了0.9秒,并且是属于四段跳中的一段,则返回true
            if (animatorStateInfo.IsName("jump1") || animatorStateInfo.IsName("jump2") || animatorStateInfo.IsName("jump3") || animatorStateInfo.IsName("jump4"))
            {
                result = true;              
            }
        }

在fixupdata里面判断动作播放情况,并根据时间(0.9f可以读配置)来改变动作

  1. 如何判断轻功落地停止
    当起跳一段时间后,可以判断人物脚底是不是walk层,依此来判定是否落地
    IsGrounded(1.2f)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值