Unity15--射线伤害门程序:(线性检测)和吃金币,吸铁石功能的实现:(球形检测)
一、伤害门,任何物体经过两个物体之间都会毁灭消失
做题流程:三个文件构成:
//1.产生创建脚本CreateCubes文件和CubeMove移动脚本,CubeMove不用赋给任何文件
//PhysicsDemo和CreateCubes都给了空文件夹记得赋值 startObj;和endObj;
//2.在Unity面板里Tag里添加Door,两个物体都标签Door,如果不是标签Door的就毁灭
//3.两个门之间距离不宜太远
----------------------------------------------------------------------------------------------------------------------------------------
//线性检测最上面定义的
public GameObjectstartObj;
public GameObject endObj;
1. PhysicsDemo文件
void Update () {
RaycastHit hit; //检测射线碰撞到的点
if( Physics.Linecast(startObj.transform.position,endObj.transform.position,out hit))
{
if(!hit.collider.gameObject.CompareTag("Door"))//在Unity面板里Tag里添加Door,两个物体都标签Door,如果不是标签Door
的就毁灭
{
Destroy(hit.collider.gameObject);
}
}
}
2. CreateCubes文件下
float timer = 0.0f;
void Update () {
timer += Time.deltaTime;
if(timer>3) //每3秒创建一个方块。
{
timer -= 3;
GameObject obj =GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.transform.position = newVector3(0, 0, 0);
obj.AddComponent<CubeMove>(); //添加组件的方式
}
}
3. CubeMove文件下: //不用赋给任何文件
void Update () { //不断产生移动的方块往伤害门走
transform.Translate(transform.forward * Time.deltaTime);
}
二、球型检测,吃金币,吸铁石功能的实现(两个文件)
//吃道具,收集金币使用碰撞检测
//球体检测,用到CubeMove2和CoinMove ,添加标签,金币是吸铁石,在Tag面板里添加Tag --吸铁石
//Magnet,金币都添加刚体,去掉重力,勾选IsTagger ,
//全选所以小球面板右边Add添加,搜CoinMove都添加了这个文件,
-------------------------------------------------------------------------------------------------------------------------------实现的流程:
1.两个文件CubeMove2 和CoinMove文件,CubeMove2 文件给了Player文件,CoinMove给了小球们
2. Magnet 和金币都各自在Unity面板里添加标签,标签必须写对对应
3.Magnet和Coins都添加--刚体把重力的√去掉,都点击Is Trigger触发
金币目标是Player 不点Is Move ,让小球不移动,再了运行,Player会先吃掉Magnet,再了往前走,走到小球那,小球会
挨个飞过去,销毁
---------------------------------------------------------------------------------------------------------------------------------
1.. CubeMove2文件
bool isMagnet =false; //一开始让吸铁石为错误
publicfloat speed;
1.void Update () {
transform.Translate(transform.forward *speed *Time.deltaTime);
if(isMagnet)
{
Collider[] cols =Physics.OverlapSphere(transform.position, 10); //距离,后面可改
foreach (var itemin cols)
{
if(item.gameObject.CompareTag("Coin")) //加标签必须对
{
item.GetComponent<CoinMove>().isMove =true;
}
}
}
}
2. void OnTriggerEnter(Collider other)//触发器
{
if(other.gameObject .tag =="Magnet")
{
Destroy(other.gameObject);
isMagnet = true;
}
}
2. CoinMove文件:
publicTransform target;
publicbool isMove =false;
1.void Update () {
if(isMove)
{
//球朝向目标移动
transform.position =Vector3.Lerp(transform.position, target.position,0.2f);
}
}
2. void OnTriggerEnter(Collider other)
{
if(other.gameObject.CompareTag("Player"))
{
Destroy(gameObject);
}
}