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";//更改创建的实例的名称}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

观众登记2025中国(深圳)国际智能手机供应链展览会

时间:2024年4月9-11日 地点:深圳会展中心 ◆展会背景background: 近年来,国内手机品牌在全球市场上的影响力不断增强,华为、OPPO、VIVO和小米等…

ICPC网络赛 以及ACM训练总结

一、训练反思 关于我自己暑假期间训练的反思,我承认无论是因为什么原因,我自己浪费我整整一个暑假的时间,暑假期间正是我们集训的关键时期,这期间没有任何的事情来打扰我们学习,而我却熬夜,白天训练懈怠&a…

在服务器上开Juypter Lab教程(远程访问)

在服务器上开Juypter Lab教程(远程访问) 文章目录 在服务器上开Juypter Lab教程(远程访问)一、安装anaconda1、安装anaconda2、提权限3、运行4、同意协议5、安装6、是否要自动初始化 conda7、结束8、检查 二、Anaconda安装Pytorch…

python 自动化测试接口

比如我们要测试接口:identity/chatRecords/pages 已在Postman中有,那我们就可以直接从里面复制出Python脚本 新建: pagerequest.py import requests import jsonurl "http://192.168.31.132:70/identity/chatRecords/pages"payl…

下载MySQL Connector/c

MySQL :: Download MySQL Connector/C (Archived Versions) 其他语言: MySQL :: MySQL Product Archives

基于AgentUniverse在金融场景中的多智能体应用探索

基于AgentUniverse在金融场景中的多智能体应用探索 1.基于大模型智能体超级状态机 智能体、多智能体都是当下的技术热点,但作为一个技术人应该理解,所有的技术都有自己所针对的问题、及其能力边界,并不存在普适的、放诸业务场景皆 work 的技术方案。在这里尝试区分,从大模…

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…

2024年华为9月4日秋招笔试真题题解

2024年华为0904秋招笔试真题 二叉树消消乐好友推荐系统维修工力扣上类似的题--K站中转内最便宜的航班 二叉树消消乐 题目描述 给定原始二叉树和参照二叉树(输入的二叉树均为满二叉树,二叉树节点的值范围为[1,1000],二叉树的深度不超过1000)&#xff0c…

线性表之单链表

在上一节我们学习了线性表中的顺序表,今天我们来学习一下线性表中的另一种结构——单链表 前言 我们在之前已经初步了解了数据结构中的两种逻辑结构,但线性结构中并非只有顺序表一种,它还有不少兄弟姐妹,今天我们再来学习一下单链…

Python基础语法(3)下

列表和元组 列表是什么,元组是什么 编程中,经常需要使用变量,来保存/表示数据。变量就是内存空间,用来表示或者存储数据。 如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可。 num1 10 num2 20 num3…

[数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1123 标注数量(xml文件个数):1123 标注数量(txt文件个数):1123 标注…

【重学 MySQL】二十九、函数的理解

【重学 MySQL】二十九、函数的理解 什么是函数不同 DBMS 函数的差异函数名称和参数功能实现数据类型支持性能和优化兼容性和可移植性 MySQL 的内置函数及分类单行函数多行函数(聚合函数)使用注意事项 什么是函数 函数(Function)在…

系统架构设计师 需求分析篇二

📘 面向对象分析方法 1. 用例模型 📈 构建用例模型一般需要经历 4 个阶段: 识别参与者 🔍:识别与系统交互的所有事物。合并需求获得用例 🔗:将需求分配给予其相关的参与者。细化用例描述 &am…

秋韵虫趣.

文章目录 虫鸣概览虫坛文化蟀种纷呈中华蟋蟀宁阳蟋蟀刻点铁蟋长颚斗蟋 油葫芦棺头蟋中华灶蟋小素蟋树皮蟋蟀 花生大蟋斑腿针蟋其他鸣虫树蟋,又名竹蛉、邯郸梨片蟋,又名金钟、天蛉、绿蛣蛉、银琵琶凯纳奥蟋,又名石蛉,鳞蟋黄蛉蟋&am…

在单机存储与分布式存储的技术选型中考虑的因素

在单机存储与分布式存储的技术选型中,可以从以下几个方面进行深入思考: 一、性能方面 读写性能 单机存储:在处理小规模数据量时,可能具有较高的读写速度。因为数据存储在单一设备上,访问路径相对较短,无需通…

uniapp中实现<text>文本内容点击可复制或拨打电话

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

Java 文件目录并发操作:删除特定文件

需求: 爬取某个网站的商品信息存在一个商品文件目录中,每个子商品信息文件夹中都有一个 goods.txt 文件 文件,现在不需要了,需要删除它。为了提升操作效率,使用了多线程处理。 代码示例 public static void main(Str…

Python | Leetcode Python题解之第409题最长回文串

题目: 题解: class Solution:def longestPalindrome(self, s: str) -> int:ans 0count collections.Counter(s)for v in count.values():ans v // 2 * 2if ans % 2 0 and v % 2 1:ans 1return ans

本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录

概要 本文介绍本地部署大模型和知识库的小白方法,可以运行较多种类的大模型,使用的软件为docker和ollama以及MaxKb作为知识库前端。 下载 各安装包可以百度去官网或者github下载或使用,也可以点击下面的的链接和我下载相同的版本。 ollama…

??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡

文章目录 一、会话保持与Nginx会话保持Nginx 中的会话保持实现1. 基于 Cookie 的会话保持 expires 指令的语法常见用法expires 的翻译2. 基于 IP 的会话保持 作用底层原理实现示例选择合适的会话保持方法 二、将Nginx实现会话保持与Redis结合1. **配置 Redis 作为会话存储**2. …