0
点赞
收藏
分享

微信扫一扫

unity简易跑酷避障小游戏(扩展部分)

玩物励志老乐 2022-04-19 阅读 88
unityc#

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

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

举报

相关推荐

0 条评论