unity3D用滑鼠和射線控制物體移動
unity3D用滑鼠和射線控制物體移動
晉中職業技術學院 智祥明
建立4個Cube,分別命名為Cube0、Cube1、Cube2、Cube3,擺成一排。前面放一個小球,命名為Sphere。用滑鼠單擊Cube時,讓Cube移到小球位置。當單擊Cube0時,Cube0移到Sphere位置;當單擊Cube1時,Cube1移到Sphere位置,Cube0移回原來位置;以此類推。
建立指令碼,命名為Move.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour {
private Transform sphere;
public LayerMask mylayer;
private bool move;
// Use this for initialization
void Start () {
sphere = GameObject.Find("Sphere").GetComponent<Transform>();
}
// Update is called once per frame
void Update () {
Ray ray = Camera.main .ScreenPointToRay (Input .mousePosition );
RaycastHit rayhit;
if (Input.GetMouseButton(0) && Physics.Raycast(ray, out rayhit, 500f, mylayer))
move = !move;
if(move)
gameObject.transform.position = Vector3.MoveTowards(transform.position, sphere.position, 0.2f);
}
}
將Move指令碼分別掛在Cube0、Cube1、Cube2、Cube3上,相當於建立了4個Move的例項物件。射線從攝像機發出,射到點選的螢幕位置。碰到Cube的Collider上。要分別進行互動,就要把Cube0、Cube1、Cube2、Cube3分別放到不同的層Layer上,所以要建立4個Layter層。以上指令碼實現了單擊Cube時,4個物件都會移到Sphere位置。
要想讓一個物體向Sphere移動時,其他物體回到原來位置。我們可以建立一個單例物件的指令碼,命名為Only。單例物件就是一個公共的區域,我們宣告4個Vecoter3位置,記錄4個Cube的原始位置。宣告一個Collider的變數,用於存放射線碰到的Collider。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Only : MonoBehaviour {
public static Only instance;
public Vector3[] cube_orign;
public Collider click_Collider;
void Awake()
{
instance = this;
cube_orign = new Vector3[4];
for (int i = 0; i < 4; i++)
{
cube_orign[i] = GameObject.Find("Cube" + i).GetComponent<Transform>().position;
}
}
}
把我們移動指令碼Move修改如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
private Transform sphere;
public LayerMask mylayer;
private int i;
private Vector3 orign;
RaycastHit rayhit;
// Use this for initialization
void Start()
{
sphere = GameObject.Find("Sphere").GetComponent<Transform>();
i = int.Parse(gameObject.name.Substring(4));
orign = Only.instance.cube_orign[i];
}
private void print(Func<string> toString)
{
throw new NotImplementedException();
}
// Update is called once per frame
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButton(0) && Physics.Raycast(ray, out rayhit, 500f, mylayer))
{
Only .instance . click_Collider = rayhit.collider;
}
if (Only.instance.click_Collider == gameObject.GetComponent<Collider>())
{
gameObject.transform.position = Vector3.MoveTowards(transform.position, sphere.position, 0.2f);
}
if (Only .instance .click_Collider != gameObject.GetComponent<Collider>())
gameObject.transform.position = Vector3.MoveTowards(transform.position, orign , 0.2f);
}
}
相關文章
- Layabox 3D遊戲開發學習筆記—射線檢測,滑鼠控制物體運動3D遊戲開發筆記
- 【V-REP自學筆記(八)】控制youBot抓取和移動物體筆記
- 【Oculus Interaction SDK】(七)使用射線進行互動(物體 & UI)UI
- unity3d縮放物體Unity3D
- Unity3D 透明物體ShaderUnity3D
- 智慧城市的物聯網和移動應用
- OPCV 移動物體檢測
- WPF中webview2滑鼠移動窗體WebView
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- unity3d嵌入到iOS工程(3d物體和iOS控制元件顯示在同一個view上)Unity3DiOS控制元件View
- unity3D 兩點拋物線模擬炮彈Unity3D
- 如何在CSS中對映的滑鼠位置,並實現通過滑鼠移動控制頁面元素效果CSS
- unity 實現滑鼠控制角色移動和角色頭部的血條顯示Unity
- 讓物體動起來,Unity的幾種移動方式Unity
- 滑鼠移動 登陸框跟隨
- Adjust :2019年移動購物應用報告
- 怎樣用一個滑鼠和鍵盤控制兩臺電腦
- 滑鼠控制軟體有可能和虛擬機器軟體產生衝突虛擬機
- MacStroke 2.0.5 macOS滑鼠手勢控制軟體Mac
- 用Python的PyAutoGUI庫控制滑鼠滾輪PythonGUI
- App Annie:2021年移動購物應用報告APP
- 2d橫版自由射擊遊戲中的角色頭和武器跟隨滑鼠移動而旋轉是如何實現的?遊戲
- Win10滑鼠移動速度太快如何調整_win10調整滑鼠移動速度的步驟Win10
- 【canvas】箭頭跟隨滑鼠移動的動畫原理Canvas動畫
- three.js 利用滑鼠移動攝像機JS
- JavaScript跟隨滑鼠移動的圖片效果JavaScript
- 《無限法則》開發經驗分享:射擊遊戲的物理引擎應用和移動模擬遊戲
- 移動CRM軟體有什麼用?
- AudienceProject:2020年移動應用和社交媒體使用洞察報告Project
- pyautogui模組,PC自動化指令碼,控制滑鼠GUI指令碼
- 用Python繪製移動均線【含原始碼】Python原始碼
- [高效Mac] 多顯示器快速切換滑鼠焦點和移動視窗Mac
- 移動app安全測試工具好物分享,移動app安全測試報告費用標準APP測試報告
- CSS 實現 : 滑鼠移動上去顯示 div,移開隱藏 divCSS
- win10在桌面移動滑鼠遲鈍如何解決_win10桌面滑鼠移動不流暢處理方法Win10
- 1971 移動路線
- 滑鼠移動到button顏色改變的實現
- AUTOCAD——射線命令