unity中如何改变位置?unity改变位置的三种方式

自学unity的过程中,玩家控制脚本应该是最简单的脚本了,只需要使用到input类获取到对应的键码执行transform的xyz的值的改变就可以了。

但是我发现事情并不简单,只是普通的transform.position.y = 1居然会报错!!!

问题和解决方法

transform.position = new Vector3(1,1,1);
// 直接赋值会报错
transform.position.x = 2;
// set也会无效 (实这个position只是调用了transform的get方法,得到了一个transform里的记录位置的Vector3私有成员的临时副本(类似上面例子的integer),然后再对这个Vector3的副本执行Set,所以不会更改到transform里真实的私有成员。)
transform.position.Set(2, transform.position.y, transform.position.z)

/*因为position是一个结构体,那么transform.position返回的是一个值类型。
所以我们的更改是更改在一个复制体身上,对transform.position.x并没有影响。编译器不会通过这种操作。
*/

// 方法1
Vector3 pos = transform.position;//pos并非引用。
pos.x = 2;
transform.position = pos;

// 方法2
transform.position = new Vector3(2, transform.position.y, transform.position.z);

// 方法3
transform.position(Vector3.down) // 相当于 y-=1

方法3的官方属性

  • 本质上就是一个 new Vector3 +=

back

Shorthand for writing Vector3(0, 0, -1).

down

Shorthand for writing Vector3(0, -1, 0).

forward

Shorthand for writing Vector3(0, 0, 1).

left

Shorthand for writing Vector3(-1, 0, 0).

negativeInfinity

Shorthand for writing Vector3(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity).

one

Shorthand for writing Vector3(1, 1, 1).

positiveInfinity

Shorthand for writing Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity).

right

Shorthand for writing Vector3(1, 0, 0).

up

Shorthand for writing Vector3(0, 1, 0).

zero

Shorthand for writing Vector3(0, 0, 0).

移动实现

   public void move()
    {
        // 移动 w
        if(Input.GetKeyDown(KeyCode.W) && transform.position.y != 1)
        {

            print("w");
            transform.position = new Vector3(transform.position.x, transform.position.y+1, transform.position.z);
        }
        // 移动 s
        if (Input.GetKeyDown(KeyCode.S) && transform.position.y != -1)
        {
            transform.position = new Vector3(transform.position.x, transform.position.y - 1, transform.position.z);
        }
        // 移动 a
        if (Input.GetKeyDown(KeyCode.A) && transform.position.x != -1)
        {
            transform.position = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z);
        }
        // 移动 d
        if (Input.GetKeyDown(KeyCode.D) && transform.position.x != 1)
        {
            transform.position = new Vector3(transform.position.x + 1, transform.position.y , transform.position.z);
        }
    }
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章