首先我们先创建一个底面Ground(绿色的Plane),底面上有一个玩家Player(白色的Cube),磁铁Magnet(红色的Cube),还有一堆金币Coin(白色的Sphere)。设置Player的Tag值为Player,设置金币的Tag值为Coin。
效果描述:我们让玩家碰到磁铁的时候开始让玩家吸收金币,如果没有碰到磁铁是不会吸收金币的
玩家的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MagnetTest : MonoBehaviour {
//控制玩家是否可以吸取周围的金币
private bool isMagnet = false;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//如果玩家碰到吸铁石的话 就检测玩家周围的所有带有碰撞器的游戏对象
if (isMagnet)
{
//检测以玩家为球心半径是5的范围内的所有的带有碰撞器的游戏对象
Collider[] colliders = Physics.OverlapSphere(this.transform.position, 5);
foreach (var item in colliders)
{
//如果是金币
if (item.tag.Equals("Coin"))
{
//让金币的开始移动
item.GetComponent<CoinMoveController>().isCanMove = true;
}
}
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag.Equals("Magnet"))
{
//设置玩家可以吸取周围的金币
isMagnet = true;
//销毁吸铁石
Destroy(other.gameObject);
}
}
}
每一个金币上都挂载脚本,还有刚体,只不过没有使用重力如图:
金币的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinMoveController : MonoBehaviour {
//金币移动的的目标
GameObject target;
//金币是否可以移动
public bool isCanMove = false;
//金币移动的速度
public float speed = 50;
// Use this for initialization
void Start () {
//获取玩家
target = GameObject.FindGameObjectWithTag("Player");
}
// Update is called once per frame
void Update () {
if (isCanMove)
{
//金币向玩家移动的速度
transform.position = Vector3.MoveTowards(transform.position,target.transform.position,Time.deltaTime*speed);
}
}
private void OnTriggerEnter(Collider other)
{
//如果金币碰到的物体是玩家
if (other.tag.Equals("Player"))
{
//金币碰到玩家后就会销毁金币
Destroy(gameObject);
}
}
}
磁铁上要添加刚体组件但是不勾选重力,碰撞器勾选IsTrigger属性
效果展示:
相关QQ群 1056320746
文章导航目录
相关公众号