12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 2673|回复: 19
打印 上一主题 下一主题

选择游戏物体

[复制链接]

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2011-9-23 14:23:38 |只看该作者 |正序浏览
using UnityEngine;

using System.Collections;

//鼠标拾取

public class MouseSelect : MonoBehaviour {

public Material mat;//矩形框的材质

public GameObject obj;//目标

public Vector3 temp;//存放目标物体转到屏幕坐标

public Vector3 obj_pos;//目标物体要到达的位置

public Rect r;//虚拟矩形

public Vector3 startVertex;//鼠标所绘矩形框的左上顶点坐标

public Vector3 mousePos;//鼠标位置坐标

public Vector3 mouse_start;//按下鼠标左键时鼠标的位置

private bool flag = false;//是否绘制

private Vector3 velocity = Vector3.zero;//平滑阻尼速度

void Start()

{

obj_pos = new Vector3(0,0,0);

}

void Update() {

mousePos = Input.mousePosition;//获取鼠标位置坐标

if (Input.GetMouseButtonDown(0))//按下鼠标左键

{

flag =true;//开启绘制

mouse_start = mousePos;

if(obj.renderer.material.color == Color.green )

obj_pos = mouse_start;

startVertex = new Vector3(mousePos.x / Screen.width, mousePos.y / Screen.height, 0);

}

if(Input.GetMouseButtonUp(0))//抬起鼠标左键

{

flag =false;//关闭绘制

r= new Rect(mouse_start.x , mousePos.y , mouse_start.y - mousePos.y, mousePos.x - mouse_start.x);//根据鼠标所绘矩形构造虚拟矩形

temp = Camera.main.WorldToScreenPoint(obj.transform.position);//将目标物体的位置坐标转换到屏幕坐标
if(r.Contains(new Vector2(temp.x,temp.y)))//判断目标物体是否在虚拟矩形框中

{

obj.renderer.material.color = Color.green;//若在虚拟矩行框中则变绿
}

}

if(obj.renderer.material.color == Color.green )//目标物体变绿后的处理

{

if(obj_pos != new Vector3(0,0,0))

obj.transform.position = Vector3.SmoothDamp(obj.transform.position , ScreenToWorld(new Vector3 (mouse_start.x,mouse_start.y,Camera.main.WorldToScreenPoint(obj.transform.position).z)),ref velocity,0.3f);
}
}

//绘制矩形

void OnPostRender() {//在相机完成场景渲染之后被调用

if(flag == true)

{

if (!mat) {

Debug.LogError("lease Assign a material on the inspector");

return;

}

GL.PushMatrix();//把投影视图矩阵和模型视图矩阵压入堆栈保存

mat.SetPass(0);//设置材质通道

GL.LoadOrtho();//正交投影变换

GL.Begin(GL.LINES);//开始绘制线

GL.Color(Color.red);//设置线的颜色

GL.Vertex(startVertex);//第一条线的第一个顶点

GL.Vertex(new Vector3(startVertex.x, mousePos.y / Screen.height, 0));//第二条线的第二个顶点
GL.Vertex(new Vector3(startVertex.x, mousePos.y / Screen.height, 0));//第二条线的第一个顶点

GL.Vertex(new Vector3(mousePos.x/Screen.width, mousePos.y / Screen.height, 0));//第二条线的第二个顶点
GL.Vertex(startVertex);//第三条线的第一个顶点

GL.Vertex(new Vector3(mousePos.x/Screen.width, startVertex.y, 0));//第三条线的第二个顶点
GL.Vertex(new Vector3(mousePos.x/Screen.width, startVertex.y, 0));//第四条线的第一个顶点

GL.Vertex(new Vector3(mousePos.x/Screen.width, mousePos.y / Screen.height, 0));//第四条线的第二个顶点
GL.End();//结束绘制

GL.PopMatrix();//把投影视图矩阵和模型视图矩阵弹出堆栈
}

}

//屏幕转世界

Vector3 ScreenToWorld(Vector3 v)

{

return Camera.main.ScreenToWorldPoint(v);
}

}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

20#
发表于 2013-3-6 23:20:22 |只看该作者
呵呵,真得不错哦!!
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

19#
发表于 2013-2-22 23:31:18 |只看该作者
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

18#
发表于 2012-12-1 23:27:26 |只看该作者
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

17#
发表于 2012-11-12 23:34:18 |只看该作者
百度的叫度娘,网易的叫易娘,新浪内部还在为是叫新娘还是浪娘而争论不休!……不管你们是企鹅的额娘,豆瓣的伴娘,还是华为的伪娘,都要记得,淘宝才是你们的亲娘啊!亲!!
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

16#
发表于 2012-10-12 23:20:04 |只看该作者
俺是新人,这厢有礼了!
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

15#
发表于 2012-10-11 23:27:52 |只看该作者
我就看看,我不说话
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

14#
发表于 2012-8-30 00:55:29 |只看该作者
已阵亡的 蝶 随 风 舞 说过  偶尔按一下 CTRL A 会发现 世界还有另一面
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

13#
发表于 2012-8-24 00:09:33 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

12#
发表于 2012-7-14 23:18:53 |只看该作者
不错 非常经典  实用
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-6-7 17:15 , Processed in 0.087499 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部