untiy射线和自动路径

这篇博客介绍了Unity中的射线技术和自动寻径功能。对于射线,通过创建球体和正方体,利用Raycast进行碰撞检测,并通过脚本实现鼠标控制物体移动。在自动寻径部分,讲解了如何创建地形,设置导航静态,烘焙Navmesh,并为角色添加NavMeshAgent组件以实现避开障碍物的自动寻径功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们今天学习了,unity的射线和自动寻径,先说一下射线吧。


1.射线


        先从unity的软件里建立个球体和正方体,然后拖到视图工程栏,给它们加入刚体,然后在scripts文件夹中建立脚本命名为Ray,然后在脚本后台中别写代码如下:

给一个形状体加入一条射线,拖拽形状体是射线不断加长

Ray ray=new Ray Cvector3.zero,transform.position);

RaycastHit hit;

physics.Raycast(ray,out hit,100)

Debug.DrawLine (ray.origin,hit.point);

   在从一个Scripts文件夹中建个脚本,命名为BeanText,然后在里面进行代码编写,使鼠标控制键,点到哪走到哪,代码如下:

Ray ray=Camera.main.screenpoint ToRay(Input.mouse position);

RaycastHit hit;

If(physics.Raycast  cary,out hit,100)){

Gameobject.Instantiate()

}

声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。

2.自动路径


        现在大部分mmo游戏都有自动寻路功能,点击场景上一个位置,角色就会自动寻路过去,中间可能有很多很多种实现方式。

我们要实现一个功能:点击场景的一个位置,角色可以自动寻径过去,角色会绕过各种复杂障碍,找到一条理论上“最短路径”

   给巨魔添加自动寻径

1.创建地形;

2.添加角色;

3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率;

4..选中地形,在Navigation窗口中,设置Navigation窗口中,设置Navigation Static;

5.一次选中障碍物,在avigation窗口中,设置Navigation Static

6.Navigation窗口中,选择Bake按钮,进程场景烘培,就可以烘培出寻路网格了;

7.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent;

8.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能;



### Unity 中获取资源路径的方法 在 Unity 开发过程中,获取资源路径是一个常见的需求。以下是几种常用的方式及其适用场景: #### 1. **通过 `Application` 类获取路径** - 使用 `Application.dataPath` 可以获取项目的 Assets 文件夹所在的绝对路径[^1]。 ```csharp string assetsPath = Application.dataPath; Debug.Log("Assets Path: " + assetsPath); ``` - 如果需要访问数据持久化的存储位置,则可以使用 `Application.persistentDataPath`: ```csharp string persistentPath = Application.persistentDataPath; Debug.Log("Persistent Data Path: " + persistentPath); ``` #### 2. **通过 `AssetDatabase.GUIDToAssetPath` 获取具体资源路径** - 当已知某个资源的 GUID 时,可以通过该方法将其转换为实际的文件路径[^3]。 ```csharp string guid = "your-guid-here"; string assetPath = AssetDatabase.GUIDToAssetPath(guid); Debug.Log("Asset Path by GUID: " + assetPath); ``` #### 3. **通过 Meta 文件路径反向解析资产路径** - 若拥有 `.meta` 文件的具体路径,可调用 `GetAssetPathFromTextMetaFilePath` 来获得对应的资源路径[^2]。 ```csharp public static string GetAssetPathFromTextMetaFilePath(string metaPath) { return metaPath.Replace(".meta", ""); } string metaFile = "path/to/asset.meta"; string assetPath = GetAssetPathFromTextMetaFilePath(metaFile); Debug.Log("Asset Path from Meta File: " + assetPath); ``` #### 4. **流媒体资源路径 (`StreamingAssets`) 的处理方式** - 将所需文件放置于 `StreamingAssets` 文件夹中,并利用 `Application.streamingAssetsPath` 访问这些资源[^4]。 ```csharp string streamingAssetsPath = Application.streamingAssetsPath; Debug.Log("Streaming Assets Path: " + streamingAssetsPath); ``` #### 5. **通过对象引用动态获取路径** - 对于已经加载的对象实例,可以直接借助其 ID 查询对应资源的实际路径[^5]。 ```csharp Object obj = Resources.Load("YourResourceName"); string objectPath = AssetDatabase.GetAssetPath(obj.GetInstanceID()); Debug.Log("Object Path via Instance ID: " + objectPath); ``` 以上列举了几种主流的技术手段来满足不同情境下的资源定位需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值