在unity3d中如何制作鼠标点击一个物体,然后传送到我想要的坐标上,也就是点击按钮,传送到目的地。

 我来答
一箱子的怒
推荐于2016-02-21 · TA获得超过384个赞
知道小有建树答主
回答量:172
采纳率:0%
帮助的人:103万
展开全部
1.物体要有Collider
2.编写脚本,加入OnMouseEnter()事件,看看手册怎么用,然后在该事件写
if(Input.GetMouseButtonDown(0))
//传送到目标点
追问
能详细点说不????
追答
10分悬赏分,能有多详细?我思路给你讲了,难道编程的细节也要写出来?你要拿100分,我从头到尾给你写一个脚本,拖上去就可以用。如何?
听雨傻瓜
2012-12-17 · 超过13用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:25.5万
展开全部
void Update () {
if(Input.GetMouseButtonDown(0))
{
RayControl();
}
if(flagMove)
{
if(Vector3.Distance(transform.position,mousePos)>1)
{
transform.Translate(transform.worldToLocalMatrix* transform.forward * Time.deltaTime*5);//transform.forward是世界坐标,通过transform.worldToLocalMatrix转换矩阵转到本地坐标然后在本地坐标运动,没有必要必须在本地坐标系运动 但是必须注意要统一起来。

}
else
{
flagMove=false;
}
}
}
void RayControl()
{
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//向屏幕发射一条射线
if(Physics.Raycast(ray,out hit,200))射线长度为200 和地面的碰撞盒做检测

{
GameObject targetPos=GameObject.CreatePrimitive(PrimitiveType.Sphere);//实例化一个Sphere
targetPos.transform.localScale=new Vector3(0.5f,0.5f,0.5f);
mousePos=hit.point;//获取碰撞点坐标
mousePos.y=transform.position.y;
targetPos.transform.position=mousePos;//Sphere放到鼠标点击的地方
targetDir=mousePos-transform.position;//计算出朝向
Vector3 tempDir=Vector3.Cross(transform.forward,targetDir.normalized);//用叉乘判断两个向量是否同方向

float dotValue=Vector3.Dot(transform.forward,targetDir.normalized);//点乘计算两个向量的夹角,及角色和目标点的夹角
float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;if(tempDir.y<0)//这块 说明两个向量方向相反,这个判断用来确定假如两个之间夹角30度 到底是顺时 还是逆时针旋转。
{
angle=angle*(-1);
}
print(tempDir.y);
print("2:"+angle);
transform.RotateAround(transform.position,Vector3.up,angle);
flagMove=true;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式