Unity里吃金币效果的实现

怀刚毅
2023-12-01

利用球形检测Physics.OverLapSphere实现吃金币效果
玩家身上的脚本

using UnityEngine;
using System.Collections;

public class CubeMove : MonoBehaviour {
    //此脚本应挂载在玩家身上
    //设置一个bool值
    bool isMagnet = false;
    public float speed;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        //游戏对象向前移动的逻辑
        transform.Translate(transform.forward *speed * Time.deltaTime);
        //判断条件//碰撞器触发变为true
        if (isMagnet)
        {
            //利用球形检测(球心坐标,半径)
            //返回值类型为碰撞器Collider类型
            Collider[] cols = Physics.OverlapSphere(transform.position, 10);
            foreach (var item in cols)
            {
                //找到标签为Coin的对象
                if (item.gameObject.CompareTag("Coin"))
                {
                    //注:获取当前对象的CoinMove自定义组件中的公共变量设为true
                    item.GetComponent<CoinMove>().isMove = true;
                }
            }
        }



    }
    void OnTriggerEnter(Collider other)
    {
        //触发器//碰到标签为Magnet的对象
        if (other.gameObject.tag == "Magnet")
        {
            //销毁碰到的对象
            Destroy(other.gameObject);
            //同时把isMagnet设置为true
            isMagnet = true;
        }
    }
}

挂在金币身上的脚本

using UnityEngine;
using System.Collections;

public class CoinMove : MonoBehaviour {
    //此脚本应挂载在金币身上
    //传入玩家
    public Transform target;
    //公共变量
    public bool isMove = false;
    void Update () {
        //当前组件被获取到满足条件后isMove变为true
        if (isMove)
        {
            //使用线性插值让物体有一个平缓运动//向玩家移动
            transform.position = Vector3.Lerp(transform.position, target.position, 0.2f);
        }      
    }
    void OnTriggerEnter(Collider other)
    {
        //当碰到玩家时销毁自己
        if (other.gameObject.CompareTag("Player"))
        {
            Destroy(gameObject);
        }
    }
}

有什么不对的地方请指出,多多学习

 类似资料: