p70,improving Sword throw state (增加转剑状态)(转圈),准备阶段 ;类恶魔城Demo学习(记录)

p70,improving Sword throw state (增加转剑状态)(转圈),准备阶段 ;类恶魔城Demo学习(记录)
转圈动画设置:
功能1:让玩家进入瞄准状态时随着鼠标左右改变方向。
思路:获取鼠标距离,当鼠标坐标x大于plyaer.x 且 玩家面向朝左 时就翻转。反之同理

Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (mousePosition.x > player.transform.position.x && player.facingDir == -1)
    player.Flip();
else if (mousePosition.x < player.transform.position.x && player.facingDir == 1)
    player.Flip();

功能2:玩家回收剑时随着剑的地方改变玩家方向
思路:和上面同理,鼠标坐标换成剑的坐标
。这里我把这里放到entity,增加莲藕性。
注:但是我发现CatchState的转身有bug,不知道是不是传输后有代码顺序和时间差距。

//Entity
    //第一个是接受者(如玩家),第二个发送者(如鼠标坐标)
    public void AtoB_Flip(Vector2 receiverPosition, Vector2 senderPosition)
{
    if (receiverPosition.x < senderPosition.x && facingDir == -1)
        Flip();
    else if (receiverPosition.x > senderPosition.x && facingDir == 1)
        Flip();
}
//PlayerAimSwordState 改莲藕性
    Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
	player.AtoB_Flip(player.transform.position, mousePosition); 
//PlayerCatchSwordState 改莲藕性
public override void Enter()
{
    base.Enter();
    Vector2 swordPosition = player.skill.sword.newSword.transform.position;
   player.AtoB_Flip(player.transform.position, swordPosition);
}
//SwordSkill中,新加CatchSword状态,这里注意要写在破坏剑前面
public void ClearAndCatchTheSword()
{
    player.stateMachine.ChangeState(player.catchSword); //先切再破坏
    Destroy(newSword);
}

功能3:让接剑动画和状态结束
思路:将接剑动画事件even添加方法AnimationTrigger,接剑State加if(Trigger)时切换到Idle状态。

功能4:优化:在瞄准状态下不能位移和接剑时短暂不能位移
思路:使用协同的暂停

//要锁的地方
player.StartCoroutine("BusyFor", .2f);
//entity
protected virtual IEnumerator BusyFor(float time) 
{
    isBusy = true;
    yield return new WaitForSeconds(time); // 等待0.1秒
    isBusy = false;
}

功能5:让剑还没碰到墙和敌人前返回:

//sword——control
public void ReTruningSword()
{
    //rb.isKinematic = false;
//改成freeze
    rb.constraints = RigidbodyConstraints2D.FreezeAll;

    transform.parent = null;
    isReturningSword = true;
}
public void OnTriggerEnter2D(Collider2D collision)
{
//加一条if
    if (isReturningSword)
        return;
    //碰到触发点后就设定不能转了
    isReturningSword = false;

    cd.enabled = false;// 碰撞取消

    rb.isKinematic = true; //设置成Kinematic,冻结
    rb.constraints = RigidbodyConstraints2D.FreezeAll;

    transform.parent = collision.transform; //将当前物体的父物体设置为与碰撞物体相同的父物体
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值