2D游戏物品丢弃效果

物品item下创建两个sprite子物体,一个用于显示基础图片,另一个用于显示阴影。

阴影子物体挂载脚本用于跟显示基础图片对应,需要做到丢出物品时阴影也为物品的样式。

在物品item上挂载脚本ItemBounce,并在脚本里声明改变游戏物体位置所需的变量和抛物线所需的变量

        private Transform spriteTrans;  // 基础图片的trans组件
        private BoxCollider2D coll;     // 游戏物体的碰撞判断,在丢弃时不进行碰撞检测
        public float gravity = -3.5f;   // 重力,下落速度
        private bool isGround;          // 是否落地
        private float distance;         // 目标点与自身的初始距离
        private Vector2 direction;      // 向量
        private Vector3 targetPos;      // 目标坐标

得到以上变量创建函数Bounce在Update里执行,用IsGround判断是否落地,如果落地打开物体的碰撞组件。

            isGround = spriteTrans.position.y <= transform.position.y;

            if(!isGround)
            {
                spriteTrans.position += Vector3.up * Settings.gravity * Time.deltaTime;
            }
            else
            {
                spriteTrans.position = transform.position;
                coll.enabled = true;
            }

y轴移动做完后可以用Vector3.Distance(自身坐标,目标坐标)两个坐标之间的距离作为x移动的判断

            if(Vector3.Distance(transform.position,targetPos) >0.1f)
            {
                transform.position += (Vector3)direction * distance * -Settings.gravity * Time.deltaTime;
                // transform.position = Vector3.Lerp(targetPos, transform.position, 0.1f*Time.deltaTime);
            }

再写一个调用函数用于外部传入目标坐标和游戏物体坐标初始化。

        // 外部调用函数
        public void InitBounceItem(Vector3 target,Vector2 dir)
        {
            coll.enabled = false; // 碰撞体
            direction = dir;      // 向量
            targetPos = target;   // 目标坐标
            distance = Vector3.Distance(target,transform.position); // 初始距离

            spriteTrans.position += Vector3.up * 1.5f; // 物品初始位置
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值