【Unity 3D学习】鼠标点击控制人物移动到目标位置

一、第一种情况,不带自动寻路功能。

	Vector3 targetPoint = Vector3.zero;     //鼠标点击的位置
	CharacterController controller;

	void Start () {

		targetPoint = transform.position;
		controller = GetComponent<CharacterController>();
	}

	void Update () {

		if (Input.GetMouseButton (0)) {

			Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
			RaycastHit hit; 

			if (Physics.Raycast(ray, out hit)) {  

				//判断点击的是否地形  
				if (!hit.collider.name.Equals("Plane")) {  
					return;  
				}  
				//点击位置坐标   
				targetPoint = hit.point;  
				//转向  
				transform.LookAt(new Vector3(targetPoint.x, transform.position.y, targetPoint.z));  
			}  
		}

		float distance = Vector3.Distance(targetPoint,transform.position);//计算目标位置到当前位置
		if(distance > 0.3f) {

			controller.SimpleMove(transform.forward * 5f);//角色移动
		} 
	}
二、第二种情况,加上自动寻路技术。
	Vector3 targetPoint = Vector3.zero;     //鼠标点击的位置
	NavMeshAgent agent;  

	bool flag = false;       //控制到达目的地后输出一次提示 

	void Start () {
		
		targetPoint = transform.position;
		agent = GetComponent<NavMeshAgent>();  
	}

	void Update () {

		if (Input.GetMouseButton (0)) {

			flag = false;

			Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
			RaycastHit hit; 

			if (Physics.Raycast(ray, out hit)) {  

				//判断点击的是否地形  
				if (!hit.collider.name.Equals("Plane")) {  
					return;  
				}  
				//点击位置坐标   
				targetPoint = hit.point;  
				//转向  
				transform.LookAt(new Vector3(targetPoint.x, transform.position.y, targetPoint.z));

				//设置寻路的目标点  
				agent.SetDestination(targetPoint);
				agent.speed = 4f; 
			}  
		}

		if (agent.remainingDistance == 0 && !flag) {  

			flag = true;
			print ("到达了");
		}
	}

三、记录一些遇到的问题。

1、使用第一种方式的时候,需要去掉组件“Nav Mesh Agent”,否则鼠标点击了但是物体不移动,原因待查明。

2、每为一个物体加上组件“Nav Mesh Agent”的时候,都需要重新对地形烘焙一次,否则会出现编译错误,“SetDestination can only be called on an active agent that has been placed on a navmesh”。



  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值