live2d碰撞_Unity Live2D 模型(与UI)拖拽功能 实现源码
環境(其實沒什么關系):
Unity 2019.4.0f1
CubismSdkForUnity-4-r.1
閱讀這篇文章可以讓你把模型丟到自己想丟的地方上
首先不用找官方給你整理好的拖拽腳本了,這種功能還是要自己去實現的!!
開始:
直接在模型根部掛一個實現拖拽功能的腳本
說到拖拽 自然就是通過鼠標輸入來改變物體的坐標
我們要拿到兩個值:
1.鼠標輸入
2.模型坐標(附屬物件坐標)
設計計算公式:
鼠標最初點到模型上的坐標和模型的中心目標會形成一個差值
如若不設置差值,物體的中心則跟隨鼠標輸入的坐標移動,這個是什么效果試試就懂了,總之不太好看
差值計算公式=物體中心坐標-鼠標輸入坐標
移動的目的地=鼠標輸入坐標+差值
世界坐標與屏幕坐標的轉換可以參考其他文檔
在此文檔就隨便添幾筆以帶過
附上代碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Drag : MonoBehaviour
{
//鼠標輸入
private Vector3 _Mouth;
//目標
private Vector3 _Target;
//差值
private Vector3 offect;
//當前 物件 位置
private Transform _Transform;
//附件UI
public UnityEngine.UI.Text _Text;
private Vector3 Text_offect;
public UnityEngine.UI.Image _Image;
private Vector3 Image_offect;
void Start()
{
_Transform = transform;
//固定值 這個自己調試
//Text_offect = new Vector3(140, 150, 0);
//Image_offect = new Vector3(110, 150, 0);
}
//協程
private IEnumerator OnMouseDown()
{
_Mouth = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _Transform.position.z + 10f);
//差值計算公式=物體中心坐標-鼠標輸入坐標
offect = _Transform.position - Camera.main.ScreenToWorldPoint(_Mouth);
Text_offect = _Text.transform.position - _Mouth;
Image_offect = _Image.transform.position - _Mouth;
while (Input.GetMouseButton(0))
{
_Mouth = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _Transform.position.z+10f);
//目標=差值+鼠標輸入
_Target = Camera.main.ScreenToWorldPoint(_Mouth) + offect;
_Transform.position = _Target;
//讓顯示的文字和文本框也跟著移動
_Text.transform.position = _Mouth + Text_offect;
_Image.transform.position =_Mouth + Image_offect;
//固定值對應公式
// _Text.transform.position = Camera.main.WorldToScreenPoint(_Target) + Text_offect;
// _Image.transform.position = Camera.main.WorldToScreenPoint(_Target) + Image_offect;
yield return new WaitForFixedUpdate();
}
}
}
這里也添加了UI物體的拖動,如不需要可以直接注釋掉
建議用固定值(這樣就不用自己絞盡腦汁地思考公式了!)
然后在模型上添加一個碰撞腳本(隨便哪個collider 2D) 鼠標方可在上面點擊 (不加就點不了)
關于世界坐標與屏幕坐標
一般用Camera.main中兩個方法
WorldToScreenPoint:世界轉屏幕 坐標點
ScreenToWorldPoint:屏幕轉世界 坐標點
傳入Vector3 對象
簡單區分:
游戲物件位于世界上
UI位于屏幕上
鼠標點擊計算的是屏幕坐標 要拖動游戲物體則必須轉換為世界坐標使用
然后試試就可以隨便操作了
提醒一下:如果你沒處理好LookAt 拖動模型的話就會……
回到目錄:傳送門
總結
以上是生活随笔為你收集整理的live2d碰撞_Unity Live2D 模型(与UI)拖拽功能 实现源码的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: CTF必备密码编码大全
- 下一篇: 【数据结构】天勤 例2-3 (单链表归并
