查看: 6752|回复: 51

[脚本] 如何在Unity3d中拖拽任意的对象

[复制链接]

28

主题

31

听众

285

积分

小学生

Rank: 2

升级   28.33%

发表于 2015-11-16 16:23 |显示全部楼层
共享资源可获取更多积分,所有资源仅供参考学习研究!
目的 : 在没有使用刚体组件的情况下, 我们能简单的通过 鼠标位置 得到目标对象,其实我们利用的原理很简单,就是用射线来与物体做相交检测!下面开始
第一步: 在3D项目中设置场景. 一个空对象命名为: DragAndDrop ,和创建一些其他的游戏对象 如 sphere, cube 等
– 感觉如下l;
第二步: C# 脚本命名为 “GameobjectDragAndDrop”.
第三步: 添加方法:
GameObject ReturnClickedObject(out RaycastHit hit)
{
GameObject target = null;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray.origin, ray.direction * 10, out hit))
{
target = hit.collider.gameObject;
}
return target;
}
第四步: 在Update 方法中
void Update()
{
if (Input.GetMouseButtonDown(0))
{
RaycastHit hitInfo;
target = ReturnClickedObject(out hitInfo);
if (target != null)
{
isMouseDrag = true;
Debug.Log("target position :" + target.transform.position);
//Convert world position to screen position.
screenPosition = Camera.main.WorldToScreenPoint(target.transform.position);
offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z));
}
}
if (Input.GetMouseButtonUp(0))
{
isMouseDrag = false;
}
if (isMouseDrag)
{
//track mouse position.
Vector3 currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
//convert screen position to world position with offset changes.
Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace) + offset;
//It will update target gameobject's current postion.
target.transform.position = currentPosition;
}
}
第五步: 运行程序,然后拖拽对象就OK了啊,好了本篇unity3d教程到此结束,下篇我们再会!

添加如下声明:补充

    GameObject target;
    private bool isMouseDrag;
    private Vector3 screenPosition;
    private Vector3 offset;  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

楼主热帖

0

主题

12

听众

6

积分

问题学生

Rank: 1

升级   3%

发表于 2016-7-15 20:56 |显示全部楼层

感谢楼主的无私分享!
回复

使用道具 举报

0

主题

31

听众

32

积分

问题学生

Rank: 1

升级   16%

发表于 2016-7-17 22:37 |显示全部楼层
这我看看情况啊
回复

使用道具 举报

0

主题

29

听众

21

积分

问题学生

Rank: 1

升级   10.5%

发表于 2016-7-22 16:37 |显示全部楼层

感谢楼主的无私分享!
回复

使用道具 举报

0

主题

30

听众

35

积分

问题学生

Rank: 1

升级   17.5%

发表于 2016-8-1 19:42 |显示全部楼层

不错 不错 不错
回复

使用道具 举报

0

主题

12

听众

9

积分

问题学生

Rank: 1

升级   4.5%

发表于 2016-8-4 22:25 |显示全部楼层
挺好的.来多几个demo叫好了
回复

使用道具 举报

0

主题

30

听众

536

积分

大学生

Rank: 3Rank: 3

升级   2.4%

发表于 2016-10-7 20:47 |显示全部楼层

感谢楼主的无私分享!
回复

使用道具 举报

0

主题

30

听众

37

积分

问题学生

Rank: 1

升级   18.5%

发表于 2016-10-27 10:14 |显示全部楼层

不错 不错 不错
回复

使用道具 举报

0

主题

12

听众

9

积分

问题学生

Rank: 1

升级   4.5%

发表于 2016-11-2 09:41 |显示全部楼层

不错 不错 不错
回复

使用道具 举报

0

主题

29

听众

99

积分

问题学生

Rank: 1

升级   49.5%

发表于 2016-12-30 10:24 |显示全部楼层

不错 不错 不错
回复

使用道具 举报

温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 粤ICP备20003399号 )

GMT+8, 2020-9-22 00:38 , Processed in 0.119714 second(s), 43 queries .