自学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-=1back | 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 条评论) “” |