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);
    }
}

至此,整个扩展就完成了,这个游戏也更加丰富起来了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松爱睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值