赞
踩
方案:利用射线获取坐标,使用navmash导航功能进行寻路
首先声明:using UnityEngine.AI;
渲染设置好地图:(当然关于navmash就不在这里做赘述)
代码如下:
- public Ray ray;//声明射线
- public NavMeshAgent nav;//获取NavMeshAgent
-
- // Start is called before the first frame update
- void Start()
- {
- nav=this.GetComponent<NavMeshAgent>();//获取NavMeshAgent赋值
-
- //由于 GetComponent 函数的执行速度相当慢,因此该脚本在 Start 函数期间将其结果存储在变量中,而不是在 Update 中重复调用它。
-
- }
-
-
-
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.Mouse0)) //如果鼠标左键点击
- {
- ray=Camera.main.ScreenPointToRay(Input.mousePosition);//射线从鼠标在屏幕坐标中发射
-
- RaycastHit hit;
- //存储射线对象内的投射命中点的信息到RaycastHit
- if (Physics.Raycast(ray,out hit))
- {
- Vector3 points=hit.point;
- transform.LookAt(points);
- //让导航对像在移动时始终面向导航坐标位置
- nav .SetDestination(points);
-
- //利用导航到指定坐标点位置
- }
- }
- }
最后如果你的导航对象身上携带刚体以便与地图中角色或物品进行物理交互,或者发现模型移动发生错误,请务必添加Rigidbody并锁定x、y、z轴
如果不锁定会导致在碰撞时,角色本身的x、y、z发生改变,进而影响导航,从而导致bug出现
具体情况请自行测试!
------------------------------------------------------2D射线点击---------------------------------------------------------
1、首先你的目标上要有“2D的collider”对象,这样才能被检测到
2、代码如下:
- Ray2D ray;
-
-
-
- void Update()
- {
- ray = new Ray2D(Input.mousePosition,Vector2.right);
-
- RaycastHit2D hit= Physics2D.Raycast(ray.origin, ray.direction);
-
- if (hit.collider!=null)//判断碰撞体是否存在
- {
- Debug.Log("1");
- if (hit.transform.tag=="Player")//依照tag查找对象
- {
- Destroy(hit.transform.gameObject);//删除目标对象
- }
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。