Unity 3D笔记(进阶部分)——《B站阿发你好》

预制体的创建

预制体操作

预制体变化,预制体的实例也会变化

动态创建实例

对于数量多的物体可以使用API来创建

实例初始化

实例的销毁

例子:炮塔发射子弹

cs 复制代码
 public class FireLogic : MonoBehaviour
 {
     // 对子弹 prefab 资源的引用
     public GameObject bulletPrefab;
     public Transform bulletFather;
     public Transform firePosition;
     public Transform fireAngle;
     public float fireSpeed;
     public float fireTime;
     void Start()
     {
     }
     void Update()
     {
         if(Input.GetMouseButtonDown(0))
         {
              TestFire();
         }
     }
     void TestFire()
     {
         Debug.Log("* 创建子弹的实例 ..");
         GameObject node = Object.Instantiate(bulletPrefab, bulletFather);
         node.transform.position = firePosition.transform.position;
         // 在你的场景中,由于子弹的父级为 null,使用 localEulerAngles 和 eulerAngles 效果相同。
         // 但为了代码的清晰性和可维护性,建议使用 eulerAngles 或直接设置 rotation。
         node.transform.eulerAngles = fireAngle.transform.eulerAngles;
         BulletLogic bulletLogic = node.GetComponent<BulletLogic>();
         bulletLogic.speed = 1;
         bulletLogic.maxDistance = bulletLogic.speed * 5;
     }
 }
 ​
 ​
 public class BulletLogic : MonoBehaviour
 {
     public float speed;
     public float maxDistance;
     void Start()
     {
         float flytime = 1;
         if(speed > 0)
         {
             flytime = maxDistance / speed;
         }
         Invoke("SelfDestroy", flytime);
     }
     void Update()
     {
         this.transform.Translate(0, 0, speed, Space.Self);
     }
     private void SelfDestroy()
     {
         Object.Destroy(this.gameObject);
     }
 }

物理系统

物理碰撞

反弹和摩擦

碰撞检测

碰撞体的编辑

射线检测函数

Physics.Raycast 是 Unity 物理系统中的射线检测函数(Raycasting)。

简单来说:

它从一个点沿某个方向发射一条"看不见的射线(Ray)",检测射线是否击中了场景中的碰撞体(Collider)。

函数原型与重载

Physics.Raycast 有多个重载版本,最常用的几种如下:

基本形式

cs 复制代码
 bool Physics.Raycast(Vector3 origin, Vector3 direction);

作用:origin 出发,沿 direction 方向发射射线,检测是否击中任何 Collider。

返回值:

cs 复制代码
true → 击中物体

false → 未击中

获取命中信息

cs 复制代码
 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);

作用: 除了判断是否命中,还返回命中的详细信息(如命中点、法线、距离、物体等)。

RaycastHit 是一个结构体,包含:

cs 复制代码
 hitInfo.point         // 射线击中的世界坐标
 hitInfo.normal        // 击中表面的法线
 hitInfo.distance      // 从起点到击中点的距离
 hitInfo.collider      // 被击中的 Collider 对象
 hitInfo.transform     // 被击中物体的 Transform
 hitInfo.rigidbody     // 被击中物体的 Rigidbody(如果有)

限制射线长度

cs 复制代码
 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);

作用: 仅检测从起点沿方向最多 maxDistance 长度内的碰撞。


指定层遮罩(LayerMask)

cs 复制代码
 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);

作用: 只检测某些层(Layer)的碰撞体。 比如只检测"Enemy"层:

cs 复制代码
 int enemyLayer = LayerMask.GetMask("Enemy");
 Physics.Raycast(origin, direction, out hitInfo, 100f, enemyLayer);
相关推荐
换个昵称218 分钟前
大模型学习8下-高性能推理引擎vLLM学习笔记
笔记·学习·vllm
云飞云共享云桌面28 分钟前
单机建模卡顿运维繁琐!中小型机械制造厂云飞云 3D 云桌面落地
运维·服务器·网络·3d·自动化·电脑·负载均衡
LONGZHIQIN42 分钟前
C#基础复习笔记
开发语言·笔记·c#
得闲喝茶1 小时前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
智慧景区与市集主理人2 小时前
巨有科技:市集笔记内容分发,低成本打造本地流量曝光矩阵
大数据·笔记·科技
IDIOSF3 小时前
Apple Notes Liberator:把 Apple Notes 里的笔记搬出来
笔记·其他
ljt27249606613 小时前
CPU:从底层电路到高性能执行架构
笔记
普普通通的一名码农3 小时前
TPS6120芯片说明
驱动开发·笔记·芯片手册
Amazing_Cacao4 小时前
CFCA精品可可工艺师初级校准:暴力破解机器黑盒,实现物理参数与最终风味的精准对齐
笔记·学习
阿米亚波4 小时前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发