`
alpha3171
  • 浏览: 6975 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

[转]unity3d 鼠标2D控制

    博客分类:
  • U3D
 
阅读更多
/*

* 用到了unity3d非常好的协同机制实现这一点,OnMouseDown事件表示鼠标已作了射线判断得到了对象。

* 拖拽时保持z轴不变,因为屏幕是xy二维的,空间是三维的。

* */

IEnumerator OnMouseDown ()

{




var camera = Camera.mainCamera;

if (camera) {

//转换对象到当前屏幕位置

Vector3 screenPosition = camera.WorldToScreenPoint (transform.position);


//鼠标屏幕坐标

Vector3 mScreenPosition=new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);

//获得鼠标和对象之间的偏移量,拖拽时相机应该保持不动

Vector3 offset = transform.position - camera.ScreenToWorldPoint( mScreenPosition);

print ("drag starting:"+transform.name);



//若鼠标左键一直按着则循环继续

while (Input.GetMouseButton (0)) {


//鼠标屏幕上新位置

mScreenPosition = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);



// 对象新坐标

transform.position=offset + camera.ScreenToWorldPoint (mScreenPosition);




//协同,等待下一帧继续

yield return new WaitForEndOfFrame ();

}



print ("drag compeleted");


}

}















/// <summary>

/// 跟随鼠标旋转物体,并判断手势滑动离开时的旋转方向顺时针还是逆时针,可作些模拟拖拽完成时减速度效果

/// </summary>

/// <returns>

/// A <see cref="IEnumerator"/>

/// </returns>

IEnumerator OnMouseDown ()

{


Camera camera = Camera.mainCamera;


if (camera) {

//一般指旋转物体的中心点或鼠标围绕某个旋转的中心

Vector3 relativePoint = camera.WorldToScreenPoint (transform.position);


//鼠标操作时只用x,y轴,计算时必须忽略z轴

relativePoint.z = 0;


//鼠标按下时的方向向量,作为拖拽起始参考向量

Vector3 relativeDirection = Input.mousePosition - relativePoint;



//手势滑动时旋转方向,1:顺时针,-1:逆时针

int flingDir = 1;


//最后倒数第二个方向的角度,用于比较最后旋转方向

float last2Angle =0;



print ("rotation starting:" + transform.name);


//对象原始角度

Vector3 originAngles = transform.eulerAngles;


Quaternion originRotation=transform.rotation;


//旋转总角度

float sumAngle = 0;


while (Input.GetMouseButton (0)) {


#region 当前旋转角度


Vector3 currentDirection = Input.mousePosition - relativePoint;

//0-180正角度,不适合拖拽旋转

//float currentAngle = Vector3.Angle (relativeDirection, currentDirection);

//有正负角度,可做鼠标跟随旋转角度

float currentSignAngle = SignAngle (relativeDirection, currentDirection);



#endregion


//离上次角度偏移量

float offsetAngle = currentSignAngle - last2Angle;


#region 判断方向


flingDir = currentSignAngle - last2Angle >= 0 ? 1 : -1;


#endregion


#region 总计正方向旋转角度


if (offsetAngle > 0) {

sumAngle += offsetAngle;

}


#endregion


last2Angle = currentSignAngle;

//print(offsetAngle+","+sumAngle);

print ("angle:" + currentSignAngle + ",fling:" + flingDir + ",sum:" + sumAngle);


//设置新的角度


transform.eulerAngles=originAngles+ originRotation*direction*currentSignAngle;


yield return new WaitForEndOfFrame ();


}


print ("rotation compeleted");



}


}



/// <summary>

/// Math.atan2(y2-y1,x2-x1)

/// </summary>

/// <param name="vector1">

/// A <see cref="Vector2"/>

/// </param>

/// <param name="vector2">

/// A <see cref="Vector2"/>

/// </param>

/// <returns>

/// A <see cref="System.Single"/>

/// </returns>

float SignAngle (Vector2 start, Vector2 end)

{

float num1 =  (end.x * start.y)-(start.x * end.y);

float num2 = (start.x * end.x) + (start.y * end.y);

return (Mathf.Atan2 (num1, num2) * Mathf.Rad2Deg);

}





分享到:
评论

相关推荐

    Unity3d 2D Character Controllers 官方资源

    在Unity3D游戏开发中,2D角色控制器是构建2D平台游戏的核心组件。"Unity3d 2D Character Controllers 官方资源"提供了一系列官方教程和资源,旨在帮助开发者创建具有完整交互功能的2D游戏角色。这个压缩包可能包含了...

    Unity3D鼠标点击地面特效Real-time Strategy FX v1.0

    "Unity3D鼠标点击地面特效Real-time Strategy FX v1.0"就是这样一个资源包,它提供了类似于《英雄联盟》中的鼠标点击地面时产生的视觉效果。 1. **特效系统**:Unity3D支持多种特效的创建,包括粒子系统、光照、...

    将3D坐标转成2D坐标的方法2

    在Unity中,可以使用`Input.mousePosition`来获取鼠标或触摸屏的位置,然后通过`Physics.Raycast()`或`Physics2D.Raycast()`函数来检测与之相交的3D物体。在Raycast设置中,你可以通过标签(tag)来区分不同的3D物体...

    Unity3D教程:鼠标点击转换成触摸1

    Unity3D 是一款强大的跨平台游戏开发引擎,广泛应用于创建2D和3D游戏、模拟器以及交互式体验。在本教程中,我们将探讨如何将鼠标的点击事件转换为触摸事件,以便在支持触摸输入的设备(如智能手机和平板电脑)上实现...

    unity3d 2d射击游戏例子

    Unity3D是一款强大的跨平台游戏开发工具,尤其在2D和3D游戏开发领域有着广泛的应用。本示例是关于创建一个2D射击游戏,特别适合初学者进行学习和实践。下面将详细介绍在这个项目中涉及的关键知识点。 1. **2D游戏...

    Unity3D教程:实现谷歌地球旋转效果2

    脚本是 Unity3D 中的程序代码,用于控制游戏对象的行为。在本教程中,我们将编写一个脚本来实现谷歌地球旋转效果。 二、谷歌地球旋转效果实现 ------------------------- ### 1. 初始化旋转矩阵 在 Awake 函数中...

    Unity3D游戏开发入门教程整理.pdf

    * Unity 3D 简介: Unity3D是跨平台、功能强大的游戏引擎,支持2D、3D游戏开发。 * 创建游戏工程与界面介绍: Unity3D 提供了友好的界面,读者可以快速创建游戏工程,了解基本操作。 * 添加灯光、材质:灯光和材质是...

    unity3d改变鼠标的样式 设置光标形状

    在Unity3D游戏开发中,改变鼠标的样式和设置光标形状是常见的需求,这有助于增强用户交互体验,尤其是在创建具有独特界面或者需要特定交互反馈的游戏时。在Unity中,可以使用内置的GUI系统或者Unity的图形渲染管线来...

    Unity3D 2D中偏离指定对象(鼠标)最近的对象

    在Unity3D 2D游戏开发中,常常需要找出与...总之,通过计算距离并遍历物体数组,我们可以找到Unity3D 2D场景中与指定对象(如鼠标位置)最近的物体。优化查找策略能进一步提升游戏性能,特别是在物体数量较大的情况下。

    Unity 判断鼠标悬浮在UI或3D物体上Demo

    Unity3D是一款强大的跨平台游戏开发引擎,广泛用于制作2D和3D游戏、应用程序以及虚拟现实内容。在这个"Unity 判断鼠标悬浮在UI或3D物体上Demo"项目中,开发者实现了一种功能,使得游戏或应用可以精确地识别鼠标光标...

    Unity3d UGUI以鼠标位置点为中心缩放图片项目源码

    Unity3d是一款强大的跨平台游戏开发引擎,广泛用于制作2D和3D游戏以及互动式内容。UGUI(Unity Graphic User Interface)是Unity3d内置的UI系统,它提供了丰富的界面元素和事件处理机制,使得开发者能够轻松创建复杂...

    unity3d 麻将

    Unity3D是一款强大的跨平台游戏开发引擎,广泛用于制作2D和3D的互动内容,包括游戏、模拟器以及各种视觉体验。在这个“unity3d 麻将”项目中,开发者利用Unity3D的技术来构建了一款麻将游戏,允许用户查看源代码,这...

    Unity实现鼠标点2D转3D进行旋转

    Unity实现鼠标点2D转3D进行旋转 Unity是一款功能强大且广泛应用于游戏开发的游戏引擎,对于实现鼠标点2D转3D进行旋转的需求,Unity提供了多种方法和技术来实现这一功能。本文主要介绍了使用Unity实现鼠标点2D转3D...

    Unity3D开发的斜45度射击游戏 源代码

    Unity3D支持多种输入方式,包括键盘、鼠标、触摸屏等。开发者可能使用Input类来获取玩家的输入,并通过脚本逻辑处理这些输入,例如,当玩家按下射击键时,创建一个射线cast,检测并与游戏中的目标进行碰撞。 此外,...

    unity3D 第三人称控制

    Unity3D是一款强大的跨平台游戏开发引擎,广泛用于制作2D、3D游戏以及互动式体验。在"unity3D 第三人称控制"的主题中,我们将深入探讨如何在Unity3D环境中实现第三人称角色的控制机制。这涉及到游戏设计的核心元素,...

    Udemy - Unity 3D游戏开发的3D引擎的基本原理

    Unity是一款广泛使用的跨平台游戏开发引擎,它支持创建2D与3D游戏,并且拥有丰富的功能集,能够满足从独立开发者到大型工作室的各种需求。以下是对标题和描述中提到的关键知识点的详细阐述。 ### Unity 3D引擎简介 ...

    unity3d画笔画线功能

    unity3d中实现基本的铅笔,直线,画圆,画矩形和输入文字的功能,以及保存文件,打开文件的功能。其中计算直线夹角和判断鼠标是否在线上使用了NN视频聊天组件的功能(免费哦,在Assets\Plugins目录下,聊天功能参考...

    Unity3D游戏开发

    Unity3D的核心是强大的图形渲染能力,以及简单易用的开发环境,让开发者可以快速制作出高质量的2D和3D游戏和应用。此外,Unity3D还提供了一整套完善的工具链,包括场景编辑器、物理引擎、动画系统、脚本接口等,使得...

    Unity3D画笔 涂鸦 签字

    Unity3D是一款强大的跨平台游戏开发引擎,广泛用于制作2D和3D游戏、互动体验以及虚拟现实应用。在这个特定的项目中,我们探讨的是如何在Unity3D中实现一个画笔工具,允许用户进行涂鸦和签字。这个功能对于许多应用...

    unity3d 2d游戏制作教程

    Unity3D是一款强大的跨平台游戏开发工具,尤其在2D和3D游戏制作领域有着广泛的应用。本教程“2DGameplayTutorialProject”旨在引导学习者掌握如何利用Unity3D来构建2D游戏。以下是对这个教程项目涉及的知识点的详细...

Global site tag (gtag.js) - Google Analytics