C# 在创建点和鼠标点之间缩放对象

C# 在创建点和鼠标点之间缩放对象,c#,unity3d,C#,Unity3d,我创建了一个脚本,当我点击地形时,它会在那个位置创建一个立方体预制体 当我在屏幕上移动鼠标时,预置会执行一个LookAt(),因此立方体会不断查看鼠标所在的地形。我不能很好地工作的是,当我拖动鼠标时,立方体应该沿Z轴缩放,但它在创建位置的中间缩放 所以我补充说: currentObj.transform.position = new Vector3(trs.position.x, trs.position.y, startPosition.z - distance); 这使它以一种奇怪的方式移

我创建了一个脚本,当我点击地形时,它会在那个位置创建一个立方体预制体

当我在屏幕上移动鼠标时,预置会执行一个
LookAt()
,因此立方体会不断查看鼠标所在的地形。我不能很好地工作的是,当我拖动鼠标时,立方体应该沿
Z轴缩放,但它在创建位置的中间缩放

所以我补充说:

currentObj.transform.position = new Vector3(trs.position.x, trs.position.y, startPosition.z - distance);
这使它以一种奇怪的方式移动,我无法解释,但它是不正确的。我希望立方体的一个面位于创建它的位置,另一个面位于鼠标的位置(沿
Z轴缩放)

if(start)
块是代码中的问题所在:

public class BridgeCtrl : MonoBehaviour {

    public GameObject bridge;

    GameObject currentObj;

    Vector3 mouseWorldPosition;
    Vector3 startPosition;

    bool mouseDown = false;
    bool started = false;
    bool bridgeBuilt = true;

    // Update is called once per frame
    void Update () {
        // Preview Bridge
        if(started){
            RaycastHit hit = GetWorldPosition();
            if(!hit.Equals(null)){
                currentObj.transform.LookAt(hit.point);
                Transform trs = currentObj.transform;
                float distance = Vector3.Distance(trs.position, hit.point);
                currentObj.transform.localScale = new Vector3(trs.localScale.x, trs.localScale.y, distance);
                currentObj.transform.position = new Vector3(trs.position.x, trs.position.y, startPosition.z - distance);
            }
        }

        // Start Bridge
        if(Input.GetMouseButtonDown(0) && !started){
            started = true;
            RaycastHit hit = GetWorldPosition();
            if(!hit.Equals(null)){
                startPosition = hit.point;
                currentObj = GameObject.Instantiate(bridge, startPosition, Quaternion.identity) as GameObject;
            }
        }
        // End Bridge
        else if(Input.GetMouseButtonDown(0) && started){
            started = false;
        }

        if(Input.GetKeyDown(KeyCode.Escape) && started){
            if(!currentObj.Equals(null)){
                GameObject.Destroy(currentObj);
                started = false;
            }
        }
    }

    RaycastHit GetWorldPosition(){
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Physics.Raycast(ray, out hit);
        return hit;
    }
}

那么,我如何才能得到它,使其在对象的创建点和鼠标指针之间沿Z轴缩放?

您尝试过使用光线吗

Ray ray = new Ray(startPosition, (startPosition - hit.point));
currentObj.transform.position = ray.GetPoint(distance/2);

你试过使用射线吗

Ray ray = new Ray(startPosition, (startPosition - hit.point));
currentObj.transform.position = ray.GetPoint(distance/2);

你是如此接近:)你只需要考虑立方体的宽度:)想象一下:你的立方体的比例是1,宽度是3,所以左边是位置0,中心是位置1.5,右边是位置3。现在将比例更改为10。您需要的是:左侧在位置0,中心在位置15,右侧在位置30。但是你的代码给你的中心在1.5-10的位置。我希望解释足够清楚——如果不清楚,我可以为你写下公式:)谢谢,等我有时间的时候再研究。我决定做一些不同的事情,效果更好。我重复一个项目,然后将其合并为一个项目。结果看起来真不错!你是如此接近:)你只需要考虑立方体的宽度:)想象一下:你的立方体的比例是1,宽度是3,所以左边是位置0,中心是位置1.5,右边是位置3。现在将比例更改为10。您需要的是:左侧在位置0,中心在位置15,右侧在位置30。但是你的代码给你的中心在1.5-10的位置。我希望解释足够清楚——如果不清楚,我可以为你写下公式:)谢谢,等我有时间的时候再研究。我决定做一些不同的事情,效果更好。我重复一个项目,然后将其合并为一个项目。结果看起来真不错!你是如此接近:)你只需要考虑立方体的宽度:)想象一下:你的立方体的比例是1,宽度是3,所以左边是位置0,中心是位置1.5,右边是位置3。现在将比例更改为10。您需要的是:左侧在位置0,中心在位置15,右侧在位置30。但是你的代码给你的中心在1.5-10的位置。我希望解释足够清楚——如果不清楚,我可以为你写下公式:)谢谢,等我有时间的时候再研究。我决定做一些不同的事情,效果更好。我重复一个项目,然后将其合并为一个项目。结果看起来真不错!