美文网首页
1.2D小游戏开发实记-群英争霸

1.2D小游戏开发实记-群英争霸

作者: 祝你万事顺利 | 来源:发表于2019-06-24 16:38 被阅读0次

1.云彩左右飘动效果

public class SimpleMove : MonoBehaviour
{
    private Vector3 originPos;
    private Vector3 towardsPos;
    private Vector3 curTarget;

    private void Start()
    {
        originPos = transform.position;
        towardsPos = transform.position + new Vector3(3, 0, 0);
        curTarget = towardsPos;
    }

    private void Update()
    {
        if (Vector3.Distance(transform.position,curTarget)<0.1f)
        {
            //到了当前的tar
            if (curTarget == towardsPos)
            {
                curTarget = originPos;
            }
            else
            {
                curTarget = towardsPos;
            }
        }
        Vector3 forward = Vector3.Normalize(curTarget - transform.position) * Time.deltaTime;
        transform.position += forward;
    }
}

2.制作按钮-可拓展

public class MyButton : MonoBehaviour
{
    public bool isPressing = false;//一直按着按钮为true
    public bool onPressed = false;//按下按钮为true
    public bool onReleased = false;//松开按钮为true

    private bool curState = false;
    private bool lastState = false;

    public void Tick(bool input)
    {
        curState = input;
        isPressing = curState;
        onPressed = false;
        onReleased = false;

        if (curState != lastState)
        {
            if (curState)
            {
                onPressed = true;
            }
            else
            {
                onReleased = true;
            }
        }
        lastState = curState;
    }
}

3.用户输入
将用户的输入转换成虚拟信号

public class KeyAndCoardInput : MonoBehaviour
{
    [Header("===== Key Setting =====")]
    public string keyLeft = "a";
    public string keyRight = "d";
    public string keyJump = "space";
    public string keyAtk01;
    public string keyAtk02;

    [Header("===== Output signals =====")]
    public float Dright;
    public bool jump;
    public bool attack01;
    

    public MyButton buttonJ = new MyButton();
    public MyButton buttonSpace = new MyButton();

    // Update is called once per frame
    void Update()
    {
        buttonJ.Tick(Input.GetKey(keyAtk01));
        buttonSpace.Tick(Input.GetKey(keyJump));

        attack01 = buttonJ.onPressed;
        jump = buttonSpace.onPressed;

        //移动后期可以添加SmoothDamp处理
        Dright = ((Input.GetKey(keyRight) ? 1.0f : 0) - (Input.GetKey(keyLeft) ? 1.0f : 0));
    }
}

4.清空Trigger
在idle状态中AddBehavior,进入idle状态重置atk的trigger

public class FSMClearSignals : StateMachineBehaviour
{
    public string[] clearTriggerAtEnter;
    public string[] clearTriggerAtExit;
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        foreach (string item in clearTriggerAtEnter)
        {
            animator.ResetTrigger(item);
        }
    }
}

相关文章

网友评论

      本文标题:1.2D小游戏开发实记-群英争霸

      本文链接:https://www.haomeiwen.com/subject/ceumqctx.html