当前位置: 首页 > news >正文

unity3d入门教程六

unity3d入门教程六

  • 15.1预制体
  • 15.2编辑预制体
  • 15.3在场景中编辑
  • 15.4动态创建实例
  • 15.5实例的销毁
  • 16.1(练习)子弹发射
  • 16.2定时器
  • 16.3键盘事件

15.1预制体

火神山10天建成,使用了预制体技术

一个个小房间都是事先建造好的,最后吊车装配

Unity也有预制体技术
在这里插入图片描述

模拟这样一个游戏背景

飞机发射子弹,子弹很多,所以在游戏中动态的创建游戏对象,子弹对象,此时就需要预制体技术

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.2编辑预制体

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

然后退出预制体的编辑状态进行其他的操作
在这里插入图片描述

   void Update(){//另其向上移动float step = 1.8f * Time.deltaTime;transform.Translate(0, step, 0, Space.Self);}

在这里插入图片描述
在这里插入图片描述

预制体相当于模板,可以创建更多的相同的实例

15.3在场景中编辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

断开联系后,就可以单独更改一个实例不影响其他的

15.4动态创建实例

如飞机射子弹,要发出非常多的子弹,不能全放进去,而是游戏运行时自动创建出来的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1 添加 MyJet.cs ,挂载到 ‘飞机’ 节点

2 添加公共变量

public GameObject myPrefab;

3 在 Inspector 中引用资源
在这里插入图片描述

4 当点击鼠标时,创建一个子弹的实例

GameObject bullet = Instantiate(myPrefab);
bullet.transform.position = transform.position + new Vector3(0, 1f, 0);

其中,Instantiate() 方法根据一个 Prefab ,来创建一个实例,返回值就是创建出来的GameObject 。

5 运行游戏
在 Hierarchy 窗口中,观察新创建的实例


Instantiate() 重载了很多版本,常用的如下:

bullet = Instantiate(myPrefab)

创建一个实例,position与rotation与当前游戏对象相当,挂载场景根节点下

bullet = Instantiate(myPrefab, Transform parent )

创建一个实例,position与rotation与当前游戏对象相当,同时指定父节点

bullet = Instantiate(myPrefab, position, rotation)

创建一个实例,挂载场景根节点下,同时指定 position与rotation
例如,

 bullet = Instantiate(myPrefab, transform.position, transform.rotation)
bullet = Instantiate(myPrefab, position, rotation, Transform parent)

创建一个实例,挂载 parent 节点下,同时指定 position与rotation

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class myjet2 : MonoBehaviour
{public GameObject myPrefab;// Start is called before the first frame updatevoid Start(){Application.targetFrameRate = 60;}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){Fire();}}private void Fire(){//Instantiate方法可以将预制体资源创建为一个objectGameObject bullet = Instantiate(myPrefab);bullet.transform.position = transform.position + new Vector3(0, 1f, 0);//创建位置放在飞机的上方bullet.name = "bullet";//更改创建的实例的名称}
}

15.5实例的销毁

在这里插入图片描述

之前点击一次创建一次子弹,创建的子弹会越来越多,需要将其销毁在合适的时机,即在消失在视野后进行销毁
在这里插入图片描述

将此脚本挂载到子弹的对象下,而不是飞机下,这样子弹自动被销毁
在这里插入图片描述

This指向的是当前组件,而实际要销毁的是游戏对象。

在这里插入图片描述

16.1(练习)子弹发射

在这里插入图片描述

使用键盘的左右键盘进行移动(键盘事件),并且自动不断发射子弹(需要定时器机制,如1秒2个子弹)

16.2定时器

在这里插入图片描述
在这里插入图片描述

子弹预制体对象上挂载的代码mybullet不用变,有自动向上移动和自我销毁功能

只需改变挂载到飞机上的代码即可,如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class myjet2 : MonoBehaviour
{//预制体资源 ‘子弹’public GameObject myPrefab;//定时private float interval = 0.4f;//计时,每个0.4秒发射一颗子弹private float count = 0;// Start is called before the first frame updatevoid Start(){Application.targetFrameRate = 60;}// Update is called once per framevoid Update(){如果鼠标按下就发射//if (Input.GetMouseButtonDown(0))//{//    Fire();//}//计时,每个0.4秒发射一颗子弹count += Time.deltaTime;if (count >= interval){count = 0;Fire();}}//发射开火子弹private void Fire(){//Instantiate方法可以将预制体资源创建为一个objectGameObject bullet = Instantiate(myPrefab);bullet.transform.position = transform.position + new Vector3(0, 1f, 0);//创建位置放在飞机的上方bullet.name = "bullet";//更改创建的实例的名称}
}

16.3键盘事件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class myjet2 : MonoBehaviour
{//预制体资源 ‘子弹’public GameObject myPrefab;//定时private float interval = 0.4f;//计时,每个0.4秒发射一颗子弹private float count = 0;// Start is called before the first frame updatevoid Start(){Application.targetFrameRate = 60;}// Update is called once per framevoid Update(){如果鼠标按下就发射//if (Input.GetMouseButtonDown(0))//{//    Fire();//}//计时,每个0.4秒发射一颗子弹count += Time.deltaTime;if (count >= interval){count = 0;Fire();}//按键响应float step = 2.5f * Time.deltaTime;//若左键被按下(按下的状态是一直按着的,不是按下一次)if (Input.GetKey(KeyCode.LeftArrow)){transform.Translate(-step, 0, 0);}if (Input.GetKey(KeyCode.RightArrow)){transform.Translate(step, 0, 0);}}//发射开火子弹private void Fire(){//Instantiate方法可以将预制体资源创建为一个objectGameObject bullet = Instantiate(myPrefab);bullet.transform.position = transform.position + new Vector3(0, 1f, 0);//创建位置放在飞机的上方bullet.name = "bullet";//更改创建的实例的名称}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [001-03-007].第07节:Redis中的管道
  • 【python报错已解决】`ModuleNotFoundError: No module named ‘requests‘`
  • 中级练习[4]:Hive SQL商品销售与用户增长数据分析
  • python使用Pyvis库绘制B站评论互动网络结构图
  • LeetCode70:爬楼梯
  • 后端入门 (JQuery基础) 01
  • Python 正则表达式详解:从基础匹配到高级应用
  • AIGC实战——多模态模型Flamingo
  • 手势开关灯
  • 上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例
  • Router安装以及导入
  • SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World
  • 【Unity学习心得】如何制作俯视角射击游戏
  • 多线程下的共享变量访问数据竞争的问题
  • 告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
  • python3.6+scrapy+mysql 爬虫实战
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【剑指offer】让抽象问题具体化
  • 2017年终总结、随想
  • CentOS6 编译安装 redis-3.2.3
  • CSS 专业技巧
  • docker-consul
  • E-HPC支持多队列管理和自动伸缩
  • go语言学习初探(一)
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux快速复制或删除大量小文件
  • MySQL的数据类型
  • October CMS - 快速入门 9 Images And Galleries
  • Spark学习笔记之相关记录
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Tornado学习笔记(1)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 代理模式
  • 对象引论
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 汉诺塔算法
  • 简单数学运算程序(不定期更新)
  • 前端性能优化——回流与重绘
  • 数据结构java版之冒泡排序及优化
  • 数组大概知多少
  • 通过git安装npm私有模块
  • nb
  • elasticsearch-head插件安装
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​比特币大跌的 2 个原因
  • # SpringBoot 如何让指定的Bean先加载
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 计算机视觉入门
  • #14vue3生成表单并跳转到外部地址的方式
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例