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遊戲開發筆記
- 通過射線讓物件移動物件
- 【Oculus Interaction SDK】(七)使用射線進行互動(物體 & UI)UI
- 【V-REP自學筆記(八)】控制youBot抓取和移動物體筆記
- [unity3d]如何實現遊戲物件跟隨滑鼠方向移動Unity3D遊戲物件
- 智慧城市的物聯網和移動應用
- [VB.net][WinForm]Panel控制元件移動\滑鼠拖動ORM控制元件
- OPCV 移動物體檢測
- unity3d縮放物體Unity3D
- 在執行時使用滑鼠移動控制元件和改變控制元件的大小 (轉)控制元件
- 利用熱鍵控制滑鼠移動的一個程式 (轉)
- WPF中webview2滑鼠移動窗體WebView
- Unity3D 透明物體ShaderUnity3D
- js滑鼠移動實現圖片立體滾動效果JS
- java實現控制元件的移動及使用滑鼠改變控制元件大小Java控制元件
- unity3D 兩點拋物線模擬炮彈Unity3D
- GridView滑鼠移動變色View
- unity3d 移動與旋轉 1Unity3D
- unity3d 移動與旋轉 2Unity3D
- 【小松教你手遊開發】【unity實用技能】控制renderQueue解決NGUI與Unity3D物體渲染順序問題UnityNGUI3D
- 讓物體動起來,Unity的幾種移動方式Unity
- 如何在CSS中對映的滑鼠位置,並實現通過滑鼠移動控制頁面元素效果CSS
- unity3d嵌入到iOS工程(3d物體和iOS控制元件顯示在同一個view上)Unity3DiOS控制元件View
- unity 實現滑鼠控制角色移動和角色頭部的血條顯示Unity
- Dhtml:瀏覽大圖時滑鼠感應控制層捲軸的移動 (轉)HTML
- js跟隨滑鼠移動的元素JS
- Canvas 畫圖 - 滑鼠移動圖形Canvas
- 提升購物體驗的4個移動化策略
- 滑鼠控制軟體有可能和虛擬機器軟體產生衝突虛擬機
- MacStroke 2.0.5 macOS滑鼠手勢控制軟體Mac
- CSS滑鼠移動圖片切換功能CSS
- Oracle資料庫新增和移動控制檔案Oracle資料庫
- 工業無線路由器助力移動物聯網新時代路由器
- 掘金 AMA - 聽 HenCoder 作者扔物線談移動開發前景移動開發
- Win10滑鼠移動速度太快如何調整_win10調整滑鼠移動速度的步驟Win10
- 移動CRM軟體有什麼用?
- 用Python的PyAutoGUI庫控制滑鼠滾輪PythonGUI
- 動態移動控制元件 (轉)控制元件