当前位置:网站首页>【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是为了炮弹的发射方向正确,这才是最终目的。
边栏推荐
猜你喜欢

He Kaiming's new work ViTDET: target detection field, subverting the concept of layered backbone

一文看懂注解与反射

C语言-6月8日-给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出

解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.

JS进阶网页特效(pink老师笔记)

Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB

nepctf Nyan Cat 彩虹猫

微信小程序启动页的实现

Intelligent risk control China design and fall to the ground

C语言预处理
随机推荐
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
解决AttributeError: ‘NoneType‘ object has no attribute ‘val‘ if left.val!=right.val:Line 17 问题
本地服务配置内网穿透实现微信公众号整合
Vscode remote connection server terminal zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
three.js基础学习
Building a data ecology for feature engineering - Embrace the open source ecology, OpenMLDB fully opens up the MLOps ecological tool chain
深度学习Matlab工具箱代码注释
The role of the port
Jetpack's dataBinding
Minutes of OpenMLDB Meetup No.2
Day 80
The Summer of Open Source 2022 is coming | Welcome to sign up for the OpenMLDB community project~
轻松理解进程与线程
微信小程序_开发工具的安装
Day 76
【剑指offer系列】面试题日记(前期题)
C-自定义类型(结构体、枚举、联合)
C语言-7月19日-指针的学习
stack stack