用半小时实现《永劫无间》的飞索功能

  最近迷上了玩《永劫无间》,里面的飞索用起来很好玩。为了研究它是怎么实现的,简单写了个demo工程,用位移+射线检测+模型实现。

  首先我们需要一个轴心在脚底的圆柱,以实现飞索无限拉长且保持起点在手上的功能。这个找美术同事要一个就好。

  其次就是射线检测,可以判断目标点,最后加上位移就大功告成了。让我们来看看成果吧:

 测试代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

public class Fly : MonoBehaviour
{
    public Transform start;
    public Transform end;
    public Transform shenzi;
    public Transform man;

    public bool isFly = false;
    // Start is called before the first frame update
    void Start()
    {
      
    }

    // Update is called once per frame
    void Update()
    {
        //a.LookAt(b);

        if(Input.GetKeyDown(KeyCode.A))
        {
            Ray ray = new Ray(start.position, start.forward);
            bool isCollider = Physics.Raycast(ray, out RaycastHit hit);
            if (isCollider)
            {
                Debug.LogError(hit.point);
                end.transform.position = hit.point;
                FlyFun();
                isFly = true;                
            }
        }

        if(isFly)
        shenzi.localScale = new Vector3(shenzi.localScale.x, Vector3.Distance(start.position, end.position), shenzi.localScale.z);

    }

    public void FlyFun()
    {
        var _len = Vector3.Distance(start.position, end.position);
        shenzi.localScale = new Vector3(shenzi.localScale.x, _len, shenzi.localScale.z);
        Sequence _seq = DOTween.Sequence();
        _seq.Append(man.DOMove(end.position, 2f).SetEase(Ease.OutQuad)).AppendCallback(()=> { isFly = false; });

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值