当前位置:网站首页>【Unity】关于一个炮台Prefab的剖析
【Unity】关于一个炮台Prefab的剖析
2022-08-11 05:30:00 【偷不偷月】
Turret Prefab的整体架构
文章目录
一.前言
本文在1.2.1和1.2.1.1.1部分简述该Prefab的巧妙之处,其他部分均为实体,无需分析。
该预置物和脚本可以去unity手册自行下载:该预置物的有关操作和下载地址
二.Turret(炮台)
1.Base(底座)
1.2.Cube(立方体)
Global坐标
Local坐标
1.2.1.Barrel Pivot(炮管枢轴)
Global坐标
Local坐标(继承于Cube)
我们可以看到1.2.1名为Parrel Pivot(炮管枢轴),它本质是一个空物件,即除了Transform没有其他组件,选中后只能看到一个坐标系,而这里他作为cube的子物件,自然就代表了Cube的中心坐标,其position值为(0,0,0),但细心观察可以发现,选中Barrel Pivot后,坐标系并没有在Cube中心显示,而是显示在其子物体Barrel的中心位置,这是因为创建了空对象之后,其下的子物件Barrel自动粘附在这个坐标系上,对Barrel Pivot操作时子物体Barrel也会随之变动,操作子物件Barrel时Barrel Pivot不会变动,但一般Barrel Pivot是作为参照使用,不会轻易直接对其操作。因此子物件Barrel的坐标为相对于Cube(即此处的Barrel Pivot)坐标系下的相对位置坐标,Launcher的坐标为相对于Barrel坐标系下的相对位置坐标。
1.2.1.1.Barrel(炮管)
Global坐标
Local坐标(继承于Barrel Pivot)
1.2.1.1.1.Launcher(发射器)
Global坐标
Local坐标(继承于Barrel)
Launcher同Barrel Pivot类似,本质是一个空物件,在此处有它的巧妙之处,我们可以看到右侧有一个脚本组件,这个脚本是用来发射炮弹(刚体Rigidbody)的,因为炮台是由三个实体组成的,无论挂在哪个实体上都会有碰撞发生(除非把所有Collider关掉),炮弹会在里面直接爆炸,而这个空物件放在炮口附近就会避免这个问题的发生,而且看起来也很像从里面发射出来的效果。
脚本代码如下:
public Rigidbody projectile;
public float speed = 4;
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Rigidbody p = Instantiate(projectile, new Vector3(transform.position.x,transform.position.y,transform.position.z), transform.rotation);
p.velocity = transform.forward * speed;
}
}
这里的forward指的是z方向,后面几组图的物体都有旋转量,Cube旋转是朝向调整;Barrel旋转是形状需要,将圆柱体放平;而Launcher是为了炮弹的发射方向正确,这才是最终目的。
边栏推荐
- 解决AttributeError: ‘NoneType‘ object has no attribute ‘val‘ if left.val!=right.val:Line 17 问题
- 第六届蓝帽杯 EscapeShellcode
- Wonderful linkage | OpenMLDB Pulsar Connector principle and practical operation
- 微信小程序_开发工具的安装
- 微信小程序云开发项目wx-store代码详解
- Dark Horse Event Project
- C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
- 解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.
- 连接数据库时出现WARN: Establishing SSL connection without server‘s identity verification is not recommended.
- Interpretation of the paper: GAN and detection network multi-task/SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
猜你喜欢
随机推荐
Tinker的自我介绍
解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.
The role of the port
Minutes of OpenMLDB Meetup No.2
轻松理解进程与线程
第六届蓝帽杯 EscapeShellcode
Vscode remote connection server terminal zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
Jetpack's dataBinding
C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
微信小程序_开发工具的安装
Day 77
The official website of OpenMLDB is upgraded, and the mysterious contributor map will take you to advance quickly
Day 72
C语言实现扫雷游戏
JVM学习四:垃圾收集器与内存回收策略
星盟-pwn-babyfmt
C语言-7月18日-二维数组的学习
Js method commonly used objects and attributes
Pinyougou project combat notes
Use the adb command to manage applications