unity简易跑酷避障小游戏(扩展部分)
更换player的Mesh Filter
选中player,在右侧的属性栏找到Mesh Filter,在mesh那一行,点击右侧的圆,在弹出的窗口里选择sphere,选择之后,player就从正方体变成了球体。
创建障碍物预制体
右键点击创建障碍物,3D Object==>Cube,创建完成之后命名为barrier(命名只是便于确认物体,此处只是作为演示)
然后,创建文件夹,文件栏右键点击创建 Create==>Folder,用于管理预制体。
文件创建完成之后,拖动障碍物barrier到刚刚创建的文件夹里,成功之后会发现物体的图标有黑色转变为蓝色,
随机障碍物设置
设置障碍物:创建一个空物体 右键点击==>Create Empty,然后命名为barrierControl,以便管理,
代码部分:代码编辑完成之后,挂载到障碍物的空物体上,然后联系各物体,即将物体拖到挂载好代码的空物体属性栏的none上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class barrierControl : MonoBehaviour
{
public GameObject player;
public GameObject BarrierPre;
public GameObject CurrentBarrier;
public int BarrierInterval=10;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
AutCreatBarrier();
}
public void AutCreatBarrier(){
if(player.transform.position.x>CurrentBarrier.transform.position.x){
//生成新的障碍物
float targetX=CurrentBarrier.transform.position.x+BarrierInterval;
float targetY=RandomBarrierPositionY();
Vector3 targetPos=new Vector3(targetX,targetY,0);
GameObject g=Instantiate(BarrierPre,targetPos,Quaternion.identity);
g.transform.localScale=new Vector3(g.transform.localScale.x,RandomBarrierSizeY((int)g.transform.position.y),g.transform.localScale.z);
CurrentBarrier=g;
}
}
public float RandomBarrierSizeY(int y){
int yAbs=Mathf.Abs(y);
if(yAbs==0){
return 6;
}else
{
return (3-yAbs)*2-1;
}
}
public float RandomBarrierPositionY(){
int r=Random.Range(-3,3);
return r;
}
}
障碍物清除
为了不让运行时内存冗余,需要将“用过的”障碍物进行清除销毁,清理机制是在player左侧设置一面“墙”,“墙”随着player运动,“用过的”障碍物碰到墙之后会销毁,
实操开始,创建一个竖着的长方体,(创建物体步骤详解前面有讲到),创建完成之后命名为trigger,并将其放进wall空物体里,
选中trigger,在右侧的属性栏里,删除Cube (Mesh Filter)和Mesh Renderer 属性,点击属性条的右侧,选择Remove Compoent就删除了。
删除完成之后就会发现,它“消失”透明了。
然后就是代码部分,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutoDestoryBarrier : MonoBehaviour
{
private void OnTriggerEnter(Collider other){
Destroy(other.gameObject);
}
}
至此,整个扩展就完成了,这个游戏也更加丰富起来了。