unity3d 屏幕滚动_unity3d移动端滑动屏幕 - CSDN
  • 超级简单,但是注意,有坑! 首先创建一个脚本,把下面的代码复制进去就好啦,注意类名要和脚本名一样哦,自己改一下就好啦! using System.Collections; using System.Collections.Generic;...

    超级简单,但是注意,有坑!

    首先创建一个脚本,把下面的代码复制进去就好啦,注意类名要和脚本名一样哦,自己改一下就好啦!

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
     
    public class xz : MonoBehaviour
    {
        float speed = 0.1f;
        
        void Update()
        {
            if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
            {
                //得到手指在这一帧的移动距离
                Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
                //在X 轴上旋转物体
               // GameObject.Find("zhuan/Kazuko").transform.Rotate(0, touchDeltaPosition.x, 0);
                transform.Rotate(0, -touchDeltaPosition.x, 0);
    
            }
        }
    }
    

    然后再把这个脚本拖到你想让他旋转的物体上就OK!

    接下来就是坑了,弄完之后你在电脑上调试的时候你会发现转不动,这是正常的,打包成app安装在手机上就可以转动了!

    展开全文
  • ScrollView控件可以设定一个滚动显示区域。如果GUI控件超出其显示区域,视图下方或者右方将会出现滚动条。比如游戏中帮助信息或关于信息过长,就可以使用滚动条来查看相关信息。 滚动条由两部分组成,一个是 GUI....

    Scroll View控件可以设定一个滚动显示区域。如果GUI控件超出其显示区域,视图下方或者右方将会出现滚动条。比如游戏中帮助信息或关于信息过长,就可以使用滚动条来查看相关信息。

    滚动条由两部分组成,一个是 GUI.BeginScrollView,用于开始滚动视图,另一个是 GUI.EndScrollView,用于结束滚动视图。需要滚动显示的内容就夹在其间,具体使用方法示例如下:

    using UnityEngine;
    using System.Collections;
    
    public class Scrollbar控件 : MonoBehaviour {
    
    	//定义存储滚动条的位置变量 
    	Vector2 scrollPosition;
    
    
    	void start(){
    		scrollPosition [0] = 50;        //表示滚动视图水平滚动滑块位置
    		scrollPosition [1] = 50;        //表示滚动视图垂直滚动滑块位置
    	}
    
    
    	void OnGUI() {
    		//滚动条开始
    		scrollPosition = GUI.BeginScrollView(new Rect(0, 0, 200, 200),
    		                                     scrollPosition,new Rect(0, 0, Screen.width, Screen.height),true,true);
    
    		//滚动条中的内容
    		GUI.Button(new Rect(0, 0, 100, 20), "Top-left");
    		GUI.Button(new Rect(120, 0, 100, 20), "Top-right");
    		GUI.Button(new Rect(0, 180, 100, 20), "Bottom-left");
    		GUI.Button(new Rect(120, 180, 100, 20), "Bottom-right");
    		GUI.Label (new Rect(100,40,200,100),"测试滚动视图");
    
    		GUI.EndScrollView();        //结束滚动视图
    
            //显示滚动条滑块位置
    		GUI.Label (new Rect(300,40,100,100),scrollPosition.ToString());    
    	}
    }
    
     

    注意:GUI.BeginScrollView()方法与GUI.EndScrollView()方法必须成对出现,否则程序会抛出异常

     

    函数原型(JavaScript):

    1. public static function BeginScrollView(position:Rect, scrollPosition:Vector2, viewRect:Rect):Vector2;

    2. public static function BeginScrollView(position:Rect, scrollPosition:Vector2, viewRect:Rect, alwaysShowHorizontal:bool, alwaysShowVertical:bool, horizontalScrollbar:GUIStyle, verticalScrollbar:GUIStyle):Vector2;

    3. public static function EndScrollView():void;

    其中,position 为显示位置,scrollPosition 用于设置滚动条的起始位置,viewRect 用于设置滚动整体显示范围,EndScrollView 用于结束滚动视图内容。

    ScrollView 控件的参数如下表所示。
     

    参 数 功 能 参 数 功 能
    position 设置控件在屏幕上的位置及 大小 ScrollPosition 用来显示滚动位置
    viewRect 设置滚动整体显示范围 alwaysShowHorizontal 可选参数,总是显示水平 滚动条
    HorizontalScrollbar 设置用于水平滚动条的可选 GUI 样式 alwaysShow Vertical 可选参数,总是显示垂直 滚动条
    VerticalScrollbar 设置用于垂直滚动条的可选 GUI 样式    
    展开全文
  • unity 上下左右滑动屏幕

    千次阅读 2018-04-12 17:04:44
    using UnityEngine; using UnityEngine.UI; using System.Collections; using DG.Tweening; using System; using UnityEngine.EventSystems;...public class jarodInputController : MonoBehaviour/* , IDragHandler*.....
    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    using DG.Tweening;
    using System;
    using UnityEngine.EventSystems;
    
    public class jarodInputController : MonoBehaviour/* , IDragHandler*/
    {
       // public RectTransform yigong;
        private float fingerActionSensitivity = Screen.width * 0.05f; //手指动作的敏感度,这里设定为 二十分之一的屏幕宽度.
                                                                      //
        private float fingerBeginX;
        private float fingerBeginY;
        private float fingerCurrentX;
        private float fingerCurrentY;
        private float fingerSegmentX;
        private float fingerSegmentY;
        //
        private int fingerTouchState;
        //
        private int FINGER_STATE_NULL = 0;
        private int FINGER_STATE_TOUCH = 1;
        private int FINGER_STATE_ADD = 2;
        public Toggle shengcan;
        public Toggle shigong;
    
        public bool IsGongyi=false;
    
        public bool IsRight = false;
    
    
        public TestButton testButton;
        void Start()
        {
           
            fingerActionSensitivity = Screen.width * 0.05f;
    
            fingerBeginX = 0;
            fingerBeginY = 0;
            fingerCurrentX = 0;
            fingerCurrentY = 0;
            fingerSegmentX = 0;
            fingerSegmentY = 0;
    
            fingerTouchState = FINGER_STATE_NULL;
        }
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Mouse0))
            {
                if (fingerTouchState == FINGER_STATE_NULL)
                {
                    fingerTouchState = FINGER_STATE_TOUCH;
                    fingerBeginX = Input.mousePosition.x;
                    fingerBeginY = Input.mousePosition.y;
                }
            }
            if (fingerTouchState == FINGER_STATE_TOUCH)
            {
                fingerCurrentX = Input.mousePosition.x;
                fingerCurrentY = Input.mousePosition.y;
                fingerSegmentX = fingerCurrentX - fingerBeginX;
                fingerSegmentY = fingerCurrentY - fingerBeginY;
    
            }
    
    
            if (fingerTouchState == FINGER_STATE_TOUCH)
            {
                float fingerDistance = fingerSegmentX * fingerSegmentX + fingerSegmentY * fingerSegmentY;
    
                if (fingerDistance > (fingerActionSensitivity * fingerActionSensitivity))
                {
                    toAddFingerAction();
                }
            }
    
            if (Input.GetKeyUp(KeyCode.Mouse0))
            {
                fingerTouchState = FINGER_STATE_NULL;
            }
        }
    
        private void toAddFingerAction()
        {
    
            fingerTouchState = FINGER_STATE_ADD;
    
            if (Mathf.Abs(fingerSegmentX) > Mathf.Abs(fingerSegmentY))
            {
                fingerSegmentY = 0;
            }
            else
            {
                fingerSegmentX = 0;
            }
    
            if (fingerSegmentX == 0)
            {
                if (fingerSegmentY > 0)
                {
                    //Debug.Log("up");
                }
                else
                {
                    //Debug.Log("down");
                }
            }
            else if (fingerSegmentY == 0)
            {
                if (fingerSegmentX > 0)
                {
                   Debug.Log("right");
                     
                }
                else
                {
    
                  Debug.Log("left");
    
                }
            }
    
        }
    }

    展开全文
  • unity - 屏幕滑动操作方案

    万次阅读 2016-09-08 16:59:07
    目标:判断滑动屏幕方向,只调用一次滑动事件处理函数 因为功能简单易懂,代码也比较简单,不再详细说明,参考官方API:http://docs.unity3d.com/ScriptReference/EventType.html using UnityEngine; using System....

    目标:判断滑动屏幕方向,只调用一次滑动事件处理函数

    因为功能简单易懂,代码也比较简单,不再详细说明,参考官方API:http://docs.unity3d.com/ScriptReference/EventType.html

    using UnityEngine;
    using System.Collections;
    
    public class Player : MonoBehaviour {
    
    	enum slideVector { nullVector, left, right };
    
    	private Vector2 lastPos;//上一个位置
    
    	private Vector2 currentPos;//下一个位置
    
    	private slideVector currentVector = slideVector.nullVector;//当前滑动方向
    
    	private float timer;//时间计数器
    
    	public float offsetTime = 0.01f;//判断的时间间隔
    
    	// Use this for initialization
    	void Start () {
    		
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    	void OnGUI(){
    		if (Event.current.type == EventType.MouseDown) {//滑动开始
    			lastPos = Event.current.mousePosition;
    			currentPos = Event.current.mousePosition;
    			timer = 0;
    
    			//TODO click event
    			Debug.Log ("Click begin && Drag begin");
    		}
    
    		if (Event.current.type == EventType.MouseDrag) {//滑动过程
    			currentPos = Event.current.mousePosition;
    			timer += Time.deltaTime;
    			if (timer > offsetTime) {
    				if (currentPos.x < lastPos.x) {
    					if (currentVector == slideVector.left) {
    						return;
    					}
    					//TODO trun Left event
    
    					currentVector = slideVector.left;
    					Debug.Log ("Turn left");
    				} 
    				if (currentPos.x > lastPos.x) {
    					if (currentVector == slideVector.right) {
    						return;
    					}
    					//TODO trun right event
    
    					currentVector = slideVector.right;
    					Debug.Log ("Turn right");
    				}
    
    				lastPos = currentPos;
    				timer = 0;
    			}		
    		}
    
    		if (Event.current.type == EventType.MouseUp) {//滑动结束
    			currentVector = slideVector.nullVector;
    			Debug.Log ("Click over && Drag over");
    		}
    	}
    }
    

    上次时间不多只写了一种方案,现在补充一下。

    上方案可以实现目标功能,但是还有很多地方可以优化。

    如:1:增加有效距离防止错误判断。2:功能可不可以在OnGUI上写(因为这样的话对于检测掌控不方便)。3:多样化判断。

    为了解决以上问题,提出集中解决方法和优化方案。


    首先,滑动判定的原理其实大家都懂,检测移动距离判定。我们只需要能检测到鼠标按下、鼠标按住、鼠标松开的三个状态即可。

    一:使用Input.GetMouseButtonDown(0)

    这种方法应该是我们最熟悉的,不多说直接上代码:

    if (Input.GetMouseButtonDown (0)) {
    			lastPos = Input.mousePosition;
    			currentPos = Input.mousePosition;
    			timer = 0;
    		}
    		if (Input.GetMouseButton (0)) {
    			currentPos = Input.mousePosition;
    			timer += Time.deltaTime;
    			if (timer > offsetTime) {
    				if (currentPos.x < lastPos.x) {
    					if (currentVector == slideVector.left) {
    						return;
    					}
    					//TODO trun Left event
    					lastVector = slideVector.left;
    					currentVector = slideVector.left;
    					if (player != null) {
    						player.AttackLeft ();
    					}
    					//Debug.Log ("Turn left");
    				} 
    				if (currentPos.x > lastPos.x) {
    					if (currentVector == slideVector.right) {
    						return;
    					}
    					//TODO trun right event
    					lastVector = slideVector.right;
    					currentVector = slideVector.right;
    					if (player != null) {
    						player.AttackRight ();
    					}
    					//Debug.Log ("Turn right");
    				}
    
    				lastPos = currentPos;
    				timer = 0;
    			}
    		}
    		if (Input.GetMouseButtonUp (0)) {
    			if (lastVector != slideVector.nullVector && currentVector == slideVector.nullVector) {
    				if (lastVector == slideVector.left) {
    					//TODO trun Left event
    					//Debug.Log("click attack left++++++++++++");
    					player.AttackLeft();
    
    				} else {
    					//Debug.Log("click attack right++++++++++++");
    					player.AttackRight();
    				}
    			}
    			currentVector = slideVector.nullVector;
    		}


    
    这种方法很好理解,可以直接运行或修改,跟上面的比增加了有效距离的判定,想要增加其他滑动检测在基础上简单修改即可。
    

    说明:这种方法在Update中执行,开关检测需要用信号来实现。还有一种方式就是把检测放在协程里面,利用开关协程来开关检测。本方法是全屏的,不论是在控件上滑动还是在空白区域都生效。若不想在控件上生效,请自行做遮罩处理。


    其他方法:利用UGUI的Event系统,UGUIEvent系统提供包括点击、按下、按住、移动、松开等多种与用户交互事件,只需要实现他们的函数接口便能实现对应效果,而且种类很多,读者可以试一试。

    展开全文
  • unity3d 手机触屏 滑动控制方向

    千次阅读 2018-01-07 22:42:57
    ...private Vector2 touchOrigin = -Vector2.one; ... if (Input.touchCount > 0) { //Store the first touch detected. Touch myTouch = Input.touches[0]; //Check if
  • 2017-07-05 更新 添加了一个滑动距离 不然手指刚刚触碰上去就开始判断了滑动 我个人默认距离是80 滑动距离超过80的时候才开始执行方法
  • Unity3D制作触屏手机滑动动效果

    万次阅读 2013-11-06 16:58:40
    想要苹果或安卓那种手指滑动屏幕的效果。   这里是原文,使用的是scrollview来演示。 http://www.mindthecube.com/blog/2010/09/adding-iphone-touches-to-unitygui-scrollview   它是iphone的开发...
  • Unity3D手指滑动屏幕更改相机视角,相机跟随代码。安卓端的相机跟随代码。
  • unity3d相机拖拽移动脚本,结合easyTouch,不提供easyTouch插件,此脚本需easyTouch5支持,下载easyTouch后把脚本放到工程即可,然后按下面的图示例就可以了 相机组件层级设置.gif using UnityEngine; using ...
  • Unity3d实现Android滑动屏幕移动3D物体

    千次阅读 2016-09-18 16:51:36
    新建一个Cube,添加脚本:TestInput.csusing UnityEngine; using System.Collections;public class TestInput : MonoBehaviour { public float speed = 0.1F; void Update() { if (Input.touchCount > 0 && In
  • Unity滑动屏幕控制物体的旋转

    千次阅读 2016-06-13 13:46:24
    Unity滑动屏幕控制物体的旋转
  • Unity3D 屏幕点击特效

    2020-07-07 12:13:31
    前言 ...无论特效用的帧动画、粒子特效亦或是贴图都可以使用,根据项目稍微调整下就好了。如果想优化的话可以写个对象池,这里就不赘述了。 ...注意要将Layer设置为UI。 代码: Vector2 point;... public Transform parent;...
  • Unity3D】动态文本的滚动

    千次阅读 2017-08-16 20:08:55
    在《【Unity3D】公告栏与开始界面的布置》(点击打开链接)曾经做了一个不太好的示范,这种UGUI的滚动条布置虽然简单,但只适用于静态文本,对于动态文本的话,还需要一定的设置。如下的例子,是在一个框中,每个0.5...
  • unity3d 屏幕触摸检测事件

    千次阅读 2017-03-23 11:53:37
    屏幕上的触摸检测一般会检测点击,滑动,长按等 TouchPhase Enumeration  Describes phase of a finger touch. Values Began A finger touched the screen. Moved A ...
  • unity 滑动屏幕改变视角看物体

    千次阅读 2019-04-29 19:55:53
    滑动效果图: 做法: 把下面的Camera.cs脚本放在相机上,并给代码中的FollowObject拖拽被观察物体(旋转中心)即可 using UnityEngine; public class Camera : MonoBehaviour { public Transform ...
  • 1.实现Unity3d中触摸屏幕控制物体的移动 代码实现 using UnityEngine; using System.Collections; public class haha : MonoBehaviour {  public float speed = 0.01F;  void Update()  {  if (Input
  • unity3d 左右滑动

    2020-07-30 23:32:31
    实现一个功能,鼠标向右滑动时响应下一页事件,鼠标向左滑动时响应上一页事件
  • 在制作UI过程中,通常需要我们创建一个小窗口来显示很多内容,如游戏说明、捕鱼达人中鱼的种类、电影票的选择等等。 1.创建一个“Image”为窗口,命名“background”,添加“Scroll Rect”和“Mask”属性。...
  • unity3d之实现各种滑动效果

    千次阅读 2019-06-29 17:55:45
    拖进去会自动生成按钮,滑动速度可以随意调time,滑动效果用itween实现的,所以需要加上itween插件 效果如下:(图片是我最爱的马路小天使(¯﹃¯)) 附上代码 1 using UnityEngine; 2 using System....
  • unity3D 滑动居中选择效果

    千次阅读 2018-11-15 19:46:42
    1 Grid 和子物体锚点设置如下 2 脚本挂在Grid上面 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine....public class Te...
1 2 3 4 5 ... 20
收藏数 1,989
精华内容 795
关键字:

unity3d 屏幕滚动