1. 程式人生 > >unity按下滑鼠拖動3D物體指令碼

unity按下滑鼠拖動3D物體指令碼

public class ObjectDragger : MonoBehaviour 
{
 
	private Vector3 screenPoint;
	private Vector3 offset;

	bool dragged = false;

	private Vector3 newPosition;//賦值給物體的座標位置
	private Rigidbody body;

	void Awake(){
        //獲取自身重力
		body = gameObject.GetComponent<Rigidbody>();
        //獲取自身初始座標
		newPosition = transform.position;
	}
	 
	 void OnMouseDown()
	 {
        //按下滑鼠時獲取自身當前座標的螢幕座標
	     screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
        //按下滑鼠時記錄物體的世界座標,和滑鼠世界座標的向量偏移
        offset = gameObject.transform.position - 
            Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
	 }
	 
	 void OnMouseDrag()
	 {
        //按下拖動滑鼠時
		dragged = true;
        Debug.Log("按下拖動滑鼠時");
	 }

	 void FixedUpdate(){
		if (dragged){

			dragged = false;
            //當前滑鼠的螢幕座標
			Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
            //保持物體與滑鼠的位置偏移量
            newPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;

			if (body != null)
				body.velocity = (newPosition - transform.position) / Time.deltaTime;
            Debug.Log(body.velocity);
		}
	 }

	 void LateUpdate(){
        //移動程式碼
		transform.position = newPosition;
	 }
 
 }

相關推薦

unity滑鼠3D物體指令碼

public class ObjectDragger : MonoBehaviour { private Vector3 screenPoint; private Vector3 offset; bool dragged = false; private V

unity中 UGUI的接口事件的實現

pointer 攝像機 sys parent generic npoi del 返回 ren using UnityEngine; using System.Collections.Generic; using DG.Tweening; using UnityEn

Unity基礎篇:Unity使用滑鼠2D和3D物體

 /*     首先說一下,Input.mousePosition是滑鼠所在畫素平面內的座標,需要根據自己的需求轉變成世界座標。         Description 描述         The

unity 滑鼠 物體旋轉 點選變色 移動

public Camera camera; Ray ray; RaycastHit hitInfo; Vector3 offset; GameObject obj;//獲取點選到的物體 public GameObject tr

Unity滑鼠自由檢視3D物體之控制攝相機Camera

這種方式是通過控制相機的旋轉,位置來檢視物體。 下面的程式碼是通過修改官方的MouseOrbit程式碼產生,加了縮放功能,以及縮放,旋轉,位移的緩動,讓它不再那麼生硬。 需要將下面的程式碼放到相機上面。 using UnityEngine; using System.Col

Unity UI物體

using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class Tool : Mo

Unity2D中使用滑鼠物體移動

昨天用unity開發了一個微信的飛機大戰,效果圖如下。期間遇到了很多問題都一一解決了,印象最深的問題就是如何用滑鼠拖動飛機的移動。今天我就把我的方法拿出來分享。 我的方法是在飛機物體中寫一個指令碼。在Update中先檢測滑鼠是否按下。 程式碼是這樣的: private

鼠標的實現物體的上下左右移動

sta button locale transform min atime enter ans 實現 private GameObject center; private float rotateSpeed = 40f; private float rot

HTTP協議時間軸播放FLV的實現(偽流媒體)

prot pac -m method bytes encoding 編寫 時間軸 delay HTTP協議下實現FLV的播放其實並不復雜,當初實現的原理是使用了flowPlayer插件實現的,效果還不錯。但仍有兩大問題影響著客戶的訪問情緒: 1.預加載時頁面卡死,似乎沒有

C# WPF實現滑鼠的程式碼片

C# WPF實現滑鼠拖動的程式碼片 ///可表示實時拖動 void xxx_PreviewMouseLeftButtonUp(System.Object sender, System.Windows.Input.MouseButtonEventArgs e) { IsMous

QT練手專案二:滑鼠視窗

     對於一個沒有邊框的視窗,滑鼠是無法將它拖動的,於是我們就需要自己重寫滑鼠的點選、移動和釋放事件來跟蹤滑鼠,從而 達到使用滑鼠拖動視窗,這裡我們就簡單的使用一個mainwindow來演示。這個小專案程式碼非常少,適合用來入門QT。 &nb

原生js實現table列寬的滑鼠事件

var tTD; //用來儲存當前更改寬度的Table Cell,避免快速移動滑鼠的問題 var table = document.getElementById("tableId"); //table的id名稱 for (j = 0; j < table.rows[0].cells.le

Qt 繪製可以用滑鼠的線段

一、環境 VS2013 + QT5.7.0 二、效果 1.可以建立任意多條線段; 2.滑鼠在靠近到線段時產生吸附效果; 3.可以拖動任意一條線段的任意部位(線段的兩個端點或者整條線段)。 效果圖: 三、說明 1.建立線段的定義: 線段具有

C#窗體屬性FormBordeStyle設定為none後,通過程式碼實現窗體滑鼠功能

備註:使用的是visual studio2013版本 1、新建C#窗體應用程式,初始化的程式預設FormBordeStyle屬性為Sizable,修改屬性FormBordeStyle為none (1)修改前 (2)修改後 2、F5除錯程式後,此時窗體沒有邊框、

QML之滑鼠ListView中某項的位置

現有一種需求,就是用滑鼠拖動某項,動態去改變某一項在ListView中顯示的順序位置,經過研究及實踐實戰,實現方式的核心程式碼如下: import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Window 2

unity畫線之對映到3D物體

1.畫線方式有很多 包括OpenGL,shader ,linerender,也可以直接動態更改貼圖的畫素點顏色 這裡是用的GL,如果不是太懂gl的可以參考unity 官方API,其實我也不是太懂~~~~ using UnityEngine; using System.Collection

C#Winform實現無邊框窗體滑鼠

在有時候我們為了實現軟體的美觀,我們需要把窗體的邊框隱藏,但是問題也會隨之而來,在屬性中設定了FormBorderStyle應該為None,邊框便可以隱藏,但是我們在使用軟體時卻無法拖動窗體,

WPF無邊框視窗滑鼠縮放大小

通常,我們會 通過AllowsTransparency=”True”、 WindowStyle=”None” 這兩個屬性將wpf視窗的邊框去掉,由於邊框沒了,我們就不能通過滑鼠指標懸停在某一邊上拖動改變視窗的大小,此時若要能調整視窗大小,官方倒也提供了個屬性:R

c# 實現用滑鼠沒有標題欄的視窗(窗體的任何部分都可實現效果)

上面形式的窗體,實現窗體的任何部分都可實現拖動 首先需要引入非託管程式碼,直接呼叫windows api         public const int WM_NCLBUTTONDOWN = 0xA1;         public const int HT_CAPT

Swift禁用UIWebView和WKWebView的效果

使用UIWebView或WKWebView載入網頁時,如果頁面處於最頂端時,使用者用手指往下拖動,會露出灰色空背景。同樣頁面在最底部的時候,繼續向上拖動,下方也會露出空背景。 要禁止這個拖動效果,可進行如下設定: 1 theWebView.scroll