利用球形检测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);
}
}
}
有什么不对的地方请指出,多多学习