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

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

预制体的创建

预制体操作

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

动态创建实例

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

实例初始化

实例的销毁

例子:炮塔发射子弹

 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 有多个重载版本,最常用的几种如下:

基本形式

 bool Physics.Raycast(Vector3 origin, Vector3 direction);

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

返回值:

true → 击中物体false → 未击中

获取命中信息

 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);

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

RaycastHit 是一个结构体,包含:

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

限制射线长度

 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);

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


指定层遮罩(LayerMask)

 bool Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);

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

 int enemyLayer = LayerMask.GetMask("Enemy");Physics.Raycast(origin, direction, out hitInfo, 100f, enemyLayer);
http://www.dtcms.com/a/528926.html

相关文章:

  • 怎样建设好网站如何评判一个网站建设的怎么样
  • 【017】旅游网
  • 两款实用电脑工具:屏幕监控与文件整理,提升工作效率
  • 用php做的网站有写软文怎么接单子
  • temu跨境电商厦门seo俱乐部
  • unity实现2D人物从上面踩踏敌人,敌人减血的简易方法(类似马里奥的攻击手段)
  • Spring AI 1.0 核心功能脉络
  • 【清除 Mac DNS 缓存】Mac 电脑能访问外网却无法加载特定页面?你的 DNS 缓存“发霉”了!
  • 局域网手机/平板无数据线传输文件-通过网络传输LocalSend
  • 网站开发时ie11的兼容网站开发的prd 怎么写
  • 电分:无功、有功,功率因数
  • Spring Bean作用域全解析
  • 网页制作与网站建设wordpress插件库
  • 【参赛心得】HarmonyOS创新赛获奖秘籍:如何用Stage模型和声明式UI打造高分作品
  • 我的班级网站模板糖果屋网站建设策划书
  • 【开题答辩实录分享】以《幼儿园信息管理系统设计与开发》为例进行答辩实录分享
  • C++ STL简介:从原理到入门使用指南
  • 青州网站建设公司页游平台排行榜
  • 哪些网站可以做设计软件重庆知名商城网站建设公司
  • 做预算查价格的网站是哪个好深圳做网站哪里好
  • 权重初始化方法详解
  • 三门峡建设环境局网站点击立即进入正能量网站
  • 北京哪里有做网站的咨询网站 模板
  • 自制leetcode计算题
  • dz可以做视频网站吗网站重新解析
  • 网站建设技术网站建网站策划方案
  • 犀牛云网站建设淘气堡网站建设
  • 技术无罪,人心有善恶
  • python学习之进程池
  • CS Representation and operation of data