转载的请注明出处:http://write.blog.csdn.net/postedit/52211415
目标:鼠标点击一个位置,物体(飞机)匀速的移动到指定位置,停止移动
涉及到:一个坐标系统转换,一个函数Vector2.MoveTowards
步骤:1,用画图工具顺便画个背景和一个飞机作为资源使用
2,什么是世界坐标,看上图飞机的位置position,x=-2.34,y=-1.12,这个就是他世界坐标,也就是说现在这副背景图的中心点的世界坐标是(0,0)
3,那么什么是屏幕坐标的,我们把鼠标点一下,点在背景的中心点一下,然后Input.mousePosition,将得到屏幕坐标,他是多少呢,他是(511/2,383/2),所以这个不是我们需要的坐标,我们需要的得到(0,0),所以需要将屏幕坐标转换成世界坐标。Camera.main.ScreenToWorldPoint(Input.mousePosition);这个函数可以直接转换了。
4,那么思路就清晰了,建立两个变量public float moveSpeed;
public Vector2 newPos;//用来存放鼠标点击后并且转换后的坐标
5,
newPos =transform.position;//一开始赋值,text我是用来查看数据的,跟本文无关
6,
if(Input.GetMouseButtonDown(0))
{
newPos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
//当鼠标左键点击之后,鼠标点击的坐标,进行转换并赋值给newPos
}
transform.position = Vector2.MoveTowards(transform.position,newPos,moveSpeed);
//物体移动,moveSpeed这个移动的速度可以自己改
结束。
//以下是全部代码,有些是多余的//
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class feijjj : MonoBehaviour {
Texttext;
floatforceX;
floatforceY;
public floatmoveSpeed;
publicVector2 newPos;
void Start() {
newPos = transform.position;
text=GameObject.Find("Canvas/shubiaozuobiao").GetComponent();
text.text="bbbbbbb";
}
// Update iscalled once per frame
void Update() {
if(Input.GetMouseButtonDown(0))
{
forceX=Camera.main.ScreenToWorldPoint(Input.mousePosition).x;
forceY=Camera.main.ScreenToWorldPoint(Input.mousePosition).y;
text.text="坐标"+"x:"+forceX+" y:"+forceY;
newPos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
//transform.position = Vector2.Lerp(transform.position,newPos,moveSpeed);
transform.position = Vector2.MoveTowards(transform.position,newPos,moveSpeed);
}
}
转载请注明原文地址: https://ju.6miu.com/read-1302965.html