栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

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

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

unity简易跑酷避障小游戏(扩展部分)
    • 更换player的Mesh Filter
    • 创建障碍物预制体
    • 随机障碍物设置
    • 障碍物清除

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号