1

我正在使用 Unity3D 创建一个基于购物的游戏。在我的游戏中,我让我的物品沿着传送带移动,然后他们必须用鼠标将其拾起并扔进购物车。到目前为止,我可以让鼠标拾取物品,但我将如何让它们将其扔向特定的方向。我还需要做到这一点,以使鼠标无法将对象拖动到游戏所在房间的边界之外。

我到目前为止的代码是:

#pragma strict

var screenPoint:Vector3;
var offset:Vector3;

private var oldMouse:Vector3;
private var mouseSpeed:Vector3;

function Start(){
    oldMouse = Vector3.zero;
}

function Update(){
 mouseSpeed = oldMouse - Input.mousePosition;
 oldMouse = Input.mousePosition;
}

function 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));
}


function OnMouseDrag()
{
    var curScreenPoint:Vector3 = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
    var curPosition:Vector3 = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}

function OnMouseUp(){
rigidbody.AddForce(mouseSpeed*Time.deltaTime, ForceMode.Force);
}

詹姆士

4

2 回答 2

3

我在你捕捉鼠标位置和速度计算的地方四处走动,让事情正常进行。我还添加了一个速度变量并将其乘以 -1 以使事情朝着正确的方向发展。

`#pragma strict

var screenPoint:Vector3;
var offset:Vector3;

private var oldMouse:Vector3;
private var mouseSpeed:Vector3;
var speed = new int();

function Start(){
//oldMouse = Vector3.zero;
}

function Update(){
 //mouseSpeed = oldMouse - Input.mousePosition;
 //oldMouse = Input.mousePosition;
}

function OnMouseDown()
{
    oldMouse = Input.mousePosition;
    screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}


function OnMouseDrag()
{
    var curScreenPoint:Vector3 = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
    var curPosition:Vector3 = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}

function OnMouseUp(){
mouseSpeed = oldMouse - Input.mousePosition;
rigidbody.AddForce(mouseSpeed * speed * -1, ForceMode.Force);
//rigidbody.AddForce(mouseSpeed*Time.deltaTime, ForceMode.Force);
}
于 2014-06-22T03:24:22.087 回答
1

尝试使用刚体.MovePosition()设置位置。这应该检测与世界的碰撞。

我还没有测试你的代码,但我认为在 OnMouseUp() 中设置刚体的速度可能更合适,而不是添加力。

请记住,这两个都应该在 FixedUpdate() 中执行,因此也许您应该在事件方法中设置标志。

于 2012-07-02T23:38:19.807 回答