Javascript “如何拥有游戏对象”;snap";到位了吗?
我用多个零件制作了一台机器的模型。我希望在拖动鼠标左键时,能够将部件“捕捉”到位。就像下面的视频: 以下是我的代码: JSJavascript “如何拥有游戏对象”;snap";到位了吗?,javascript,c#,unity3d,Javascript,C#,Unity3d,我用多个零件制作了一台机器的模型。我希望在拖动鼠标左键时,能够将部件“捕捉”到位。就像下面的视频: 以下是我的代码: JS 在过去,我用两种方式实现了这种功能。第一种方法是存储对象的原始变换,并提供当矢量3.distance在足够近的范围内时捕捉到原始位置(状态)的选项。第二种方法是利用映射的捕捉边(基本上是空的游戏对象),每个捕捉边都映射到相邻对象的捕捉边上。在角落处使用标记对象(即“空对象”,只是一个统一的普通游戏对象)。这是我在这个网站上看到的为数不多的智能评论之一,nice one E
在过去,我用两种方式实现了这种功能。第一种方法是存储对象的原始变换,并提供当矢量3.distance在足够近的范围内时捕捉到原始位置(状态)的选项。第二种方法是利用映射的捕捉边(基本上是空的游戏对象),每个捕捉边都映射到相邻对象的捕捉边上。在角落处使用标记对象(即“空对象”,只是一个统一的普通游戏对象)。这是我在这个网站上看到的为数不多的智能评论之一,nice one EJSD。过去我用两种方式实现了这种功能。第一种方法是存储对象的原始变换,并提供当矢量3.distance在足够近的范围内时捕捉到原始位置(状态)的选项。第二种方法是利用映射的捕捉边(基本上是空的游戏对象),每个捕捉边都映射到相邻对象的捕捉边上。在角落处使用标记对象(即“空对象”,只是一个统一的普通游戏对象)。这是我在这个网站上看到的为数不多的几个有智慧的评论之一。
#pragma strict
var partnerName = "Hub";
var closeVPDist = 0.05;
var moveSpeed = 40.0;
var rotateSpeed = 90.0;
var closeColor = Color(1,0,0);
private var dist = Mathf.Infinity;
private var normalColor : Color;
private var partnerGO : GameObject;
function Start() {
normalColor = renderer.material.color;
partnerGO = GameObject.Find(partnerName);
}
function OnMouseDrag() {
var partnerPos = Camera.main.WorldToViewportPoint(partnerGO.transform.position);
var myPos = Camera.main.WorldToViewportPoint(transform.position);
dist = Vector2.Distance(partnerPos, myPos);
renderer.material.color = (dist < closeVPDist) ? closeColor : normalColor;
}
function OnMouseUp() {
if (dist < closeVPDist) {
transform.parent = partnerGO.transform;
InstallPart();
}
}
function InstallPart() {
while (transform.localPosition != Vector3.zero || transform.localRotation != Quaternion.identity) {
transform.localPosition = Vector3.MoveTowards(transform.localPosition, Vector3.zero, Time.deltaTime * moveSpeed);
transform.localRotation = Quaternion.RotateTowards(transform.localRotation, Quaternion.identity, Time.deltaTime * rotateSpeed);
yield;
}
}
private Vector3 screenPoint;
private Vector3 offset;
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(){
Vector3 cursorPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
transform.position = cursorPosition;
}