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

本文关键字:缩放 对象 之间 创建 鼠标 | 更新日期: 2023-09-27 17:53:21

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

当我在屏幕上移动鼠标时,预制件做了一个LookAt(),所以立方体不断地看着鼠标所在的地形。我不能得到的工作很正确的是,当我拖动鼠标的立方体应该沿着Z Axis,它做,但它在它被创建的地方的中间缩放。

所以我添加了这个:

currentObj.transform.position = new Vector3(trs.position.x, trs.position.y, startPosition.z - distance);

它以一种奇怪的方式移动,我无法解释,但这是不正确的。我想要的是立方体有一个面,它被创建,另一个面在鼠标的位置(沿Z Axis缩放)。

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

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 Axis缩放呢?

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

你试过使用Ray吗?

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