美文网首页
UNITY实现上车与下车效果

UNITY实现上车与下车效果

作者: 观南屏听晚钟 | 来源:发表于2017-06-07 19:49 被阅读0次

    前些日子,做了一个项目,在上车下车的问题上困扰了很久,因为上车之后,要将游戏人物设为非激活,而要下车的时候根本无法实现。后来想了一个办法,引入了一个int值,当进行上下车操作的时候,将int值进行修改,然后根据int值进行上车和下车的操作。
    首先,为坦克设置碰撞体检测,并对坦克的相应的动画进行设置
    代码如下:
    public class TankTrigger : MonoBehaviour
    {

    //玩家
    private GameObject player;
    

    //坦克移动脚本
    private TankMove tankMove;
    //坦克旋转脚本
    private TankRotate tankRotate;
    //坦克开火脚本
    private TankFire tankFire;
    //bool值,当前操作的是否为坦克
    private bool isTank = false;
    //int值
    int a = 0;
    //在坦克上的摄像机
    private GameObject tankCamera;
    //进入坦克的时候的过渡画面
    private Image panel;
    //离开坦克的时候的过渡动画
    private Image downPanel;
    //float值
    private float alpha;
    private float beta;

    void Awake()
    {
        player = GameObject.FindWithTag("Player");
        tankMove = transform.GetComponentInChildren<TankMove>();
        tankRotate = transform.GetComponentInChildren<TankRotate>();
        tankFire = transform.GetComponentInChildren<TankFire>();
        panel = GameObject.FindWithTag("Panel").GetComponent<Image>();
        downPanel = GameObject.FindWithTag("DownPanel").GetComponent<Image>();
        //关闭坦克组件
        transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(false);
        tankRotate.enabled = false;
        tankMove.enabled = false;
        tankFire.enabled = false;
    }
    
    void Update()
    {
        //按下F键,int值加一,当int值能够整除2的时候进行下车操作,不能被2整除的时候                          自然进行上车操作
        if (Input.GetKeyDown(KeyCode.F))
        {
            a++;
          
        }
        if (Input.GetKeyDown(KeyCode.F)&& a %2==0)
        {
            Down();
        }
    
    }
    
    ///上车
    void OnTriggerStay(Collider other)
    {
       //两个float值用于设置过渡画面的渐变效果
        alpha += 0.01f;
        beta -= 0.01f;
        if (!isTank)
        {
            if (other.CompareTag("Player"))
            {
                if (Input.GetKeyDown(KeyCode.F))
                {
                   //渐变上车动画,隐藏人物,开启坦克摄像机,并开启所有有关Tank的脚本
                    panel.color = new Color(255, 255, 255, alpha);
                    player.transform.SetParent(transform);
                    player.SetActive(false);
                    transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(true);
                    tankMove.enabled = true;
                    tankRotate.enabled = true;
                    tankFire.enabled = true;
                    isTank = true;
                   //协程,一段时间之后过渡画面消失
                    StartCoroutine(PanelA());
                }
            }
        }
    }
    
    IEnumerator PanelA()
    {
        yield return new WaitForSeconds(1);
        panel.color = new Color(255, 255, 255, beta);
    }
    
    //下车
    void Down()
    {
        alpha += 0.01f;
        beta -= 0.01f;
        if (isTank == true)
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                //渐变下车动画,设置人物位置,开启人物摄像机,并关闭所有有关Tank的脚本
                downPanel.color = new Color(255, 255, 255, alpha);
                transform.GetChild(0).GetChild(0).GetChild(0).gameObject.SetActive(false);
                player.SetActive(true);
               //使人物出现在坦克的附近
                player.transform.position = transform.GetChild(0).GetChild(1).position+ new Vector3(1.5f, 0, 0);
                player.transform.SetParent(transform.parent.parent);
                tankMove.enabled = false;
                tankRotate.enabled = false;
                tankFire.enabled = false;
                isTank = false;
                StartCoroutine(PanelB());
            }
        }
    }
    
    IEnumerator PanelB()
    {
        yield return new WaitForSeconds(1);
        downPanel.color = new Color(255, 255, 255, beta);
    }
    

    }

    相关文章

      网友评论

          本文标题:UNITY实现上车与下车效果

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