Unity3d 刚体用鼠标拖放
我一直在尝试拖放刚体。我用过这个脚本。它用鼠标移动刚体,但不会放下刚体,它会继续移动Unity3d 刚体用鼠标拖放,unity3d,Unity3d,我一直在尝试拖放刚体。我用过这个脚本。它用鼠标移动刚体,但不会放下刚体,它会继续移动 public class move : MonoBehaviour { public Camera cam; private float maxWidth; // Use this for initialization void Start() { if (cam == null) { cam = Camera.main; } Vector3 upperCor
public class move : MonoBehaviour {
public Camera cam;
private float maxWidth;
// Use this for initialization
void Start()
{
if (cam == null)
{
cam = Camera.main;
}
Vector3 upperCorner = new Vector3(Screen.width, Screen.height, 0.0f);
Vector3 targetWidth = cam.ScreenToWorldPoint(upperCorner);
float hatWidth = renderer.bounds.extents.x;
maxWidth = targetWidth.x - hatWidth;
}
// Update is called once per frame
void FixedUpdate () {
Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);
rigidbody.MovePosition(targetPosition);
}
}
我想要一个类似的例子,这意味着它将拖动一个具有刚体的游戏对象,并将其放置到位
谢谢您需要使用开始拖动
拖拉,
用于末端拖动
简单代码是:
void FixedUpdate () {
// 0 means left mouse button.
if(Input.GetMouseButton(0)){ // Check left button is still down so change rigidbody position
Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);
rigidbody.MovePosition(targetPosition);
}else if(Input.GetMouseButtonDown(0)){
Vector3 startPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
}else if(Input.GetMouseButtonUp(0)){
cam.ScreenToWorldPoint(Input.mousePosition);
}
根据您的需要进行更新
void FixedUpdate () {
// 0 means left mouse button.
if(Input.GetMouseButton(0)){ // Check left button is still down so change rigidbody position
RaycastHit hit;
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray,out hit,100)){
if(hit.collider.gameObject.name=="TargetObjectName"){
Vector3 rawPosition = cam.ScreenToWorldPoint(Input.mousePosition);
//This is your solution
Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
float targetWidth = Mathf.Clamp(targetPosition.x, -maxWidth, maxWidth);
targetPosition = new Vector3(targetWidth, targetPosition.y, targetPosition.z);
// Maybe this is more usefull
Vector3 targetPosition = new Vector3(rawPosition.x, 0.0f, 0.0f);
rigidbody.MovePosition(targetPosition);
}
}
}else if(Input.GetMouseButtonDown(0)){
Vector3 startPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
}else if(Input.GetMouseButtonUp(0)){
Vector3 endPositionRaw = cam.ScreenToWorldPoint(Input.mousePosition);
}
PS:也许,代码中有语法错误,我没有检查。很好!您的代码符合我的目的,但我在场景中有一些Unity UI uGUI按钮。当我按下这些按钮时,刚体跳到按钮上。我怎样才能阻止这种跳跃?它完全是根据你的运动算法而变化的。如果你不想僵化到你的按钮位置,你需要改变你的运动算法。因为在本例中设置了Vector3 targetPosition=new Vector3rawPosition.x,0.0f,0.0f;因此,您的鼠标输入获取按钮的x位置,并将其值设置为刚体。如果您想进入按钮位置,但不喜欢远程传送。想要移动顺畅,您可以使用或感谢您的提示。我已经更改了Vector3 targetPosition=新的Vector3rawPosition.x,rawPosition.y,0.0f;因为它将在x轴和y轴上移动。代码就像刚体跟随鼠标位置一样工作,但我真正想要的是当鼠标刚好在刚体位置时,刚体将跟随鼠标。因此,算法将类似于如果鼠标位置在刚体上{刚体将跟随鼠标}你能帮忙吗?你需要使用。