从鼠标点击位置转换

pri*_*ecs 2 unity-game-engine mouseclick-event unityscript

尝试了这百万种方式,总是得到转换错误.我只是在一个平面上点击,希望点击鼠标位置以进入变换变量,以便我的角色走向那一点.我var target: Transform;用来定义角色移动的位置.如何从世界空间中的点击中提取该类型的变量,该点击将与平面(或任何东西)相交?

var WalkingSpeed = .05;

// The target marker.
var target: Transform;

// Speed in units per sec.
var speed: float;

static var mousePos : Vector3;

function Update() {
    // get distance between objects current position and the target position
    var distance = Vector3.Distance (target.transform.position, transform.position);

    if(distance > 0) {
        // we are still not at the target, do walking animation
        animation["walk"].speed = 1;    // set speed of animation
        animation.CrossFade("walk");    // actually play the animation
    } else {
        animation["idle"].speed = 1;    // set speed of animation
        animation.CrossFade("idle");    // actually play the animation
    }
    //Debug.Log(distance);

    // The step size is equal to speed times frame time.
    var step = speed * Time.deltaTime;

    // Move our position a step closer to the target.
    transform.position = Vector3.MoveTowards(transform.position, target.position, step);

    // Also rotate towards the point
    var targetDir = target.position - transform.position;
    var newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0);
    // Move our position a step closer to the target.
    transform.rotation = Quaternion.LookRotation(newDir);

    Debug.DrawRay(transform.position, newDir, Color.red);   // draw something showing direction (for debug)

    // on click, set new target position
    if (Input.GetMouseButton(0)) {
        var posVec = Input.mousePosition;
        posVec.z = transform.position.z - Camera.main.transform.position.z;
        target = Camera.main.ScreenToWorldPoint(posVec);

    }
}
Run Code Online (Sandbox Code Playgroud)

特别是抛出这一个不能将vector3转换为变换

Fun*_*onR 6

有两种方法可以做到这一点,这取决于您使用的相机类型.将任一脚本附加到要移动的对象上即可完成.确保你把它放入Update().

正字法

if(Input.GetMouseButton(0))
{
    var posVec = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    posVec.z = transform.position.z;

    transform.position = Vector3.MoveTowards(transform.position, posVec, speed * Time.deltaTime);
}
Run Code Online (Sandbox Code Playgroud)

透视

 if (Input.GetMouseButton(0)) 
 {
     var posVec = Input.mousePosition;
     posVec.z = transform.position.z - Camera.main.transform.position.z;
     posVec = Camera.main.ScreenToWorldPoint(posVec);

     transform.position = Vector3.MoveTowards(transform.position, posVec, speed * Time.deltaTime);
 }
Run Code Online (Sandbox Code Playgroud)

我还想指出那transform.position是一个Vector3.

我可以告诉你的脚本已经附加到你要移动的GameObject上.因此,你甚至不需要target.

transform.position = Vector3.MoveTowards(transform.position, posVec, speed * Time.deltaTime);
Run Code Online (Sandbox Code Playgroud)

会正常工作.


视频证明代码有效.