如何旋转物体在Unity 2 d,然后在那个方向?



我是unity和c#的新手,但我现在正在制作一个小游戏,你是海里的水母。我想让你主要用方向键控制玩家朝向不同方向。下面的代码是我现在所拥有的,我认为它会工作,但它没有。我是否需要完全改变一些东西,或者这只是我的一个小错误?这是一个2 d游戏。

float  tpx = transform.position.x;
float  tpy = transform.position.y;

if (Input.GetKey("up")){
if (face_up){
transform.position = new Vector2 (tpx, tpy + speed/1000);
animation.SetBool("swim", true);
}
if (face_right){
transform.position = new Vector2 (tpx + speed/1000, tpy);
animation.SetBool("swim", true);
}
if (face_down){
transform.position = new Vector2 (tpx, tpy + speed/1000);
animation.SetBool("swim", true);
}
if (face_left){
transform.position = new Vector2 (tpx - speed/1000, tpy);
animation.SetBool("swim", true);
}
}
else{
animation.SetBool("swim", false); gameObject.transform.position = new Vector2 (transform.position.x, transform.position.y - speed/10000);
}

if (Input.GetKey("left")){
if (face_up){
transform.eulerAngles = Vector3.forward * 90;
face_up = false;
face_right = false;
face_down = false;
face_left = true;
}
if (face_right){
transform.eulerAngles = Vector3.forward * 0;
face_up = true;
face_right = false;
face_down = false;
face_left = false;
}
}
if (Input.GetKey("right")){
if (face_up){
transform.eulerAngles = Vector3.forward * -90;
face_up = false;
face_right = true;
face_down = false;
face_left = false;
}
if (face_left){
transform.eulerAngles = Vector3.forward * 0;
face_up = true;
face_right = false;
face_down = false;
face_left = false;
}
}

你的代码确实有很多缺陷。

首先你不应该通过直接改变精灵的位置来移动它。Unity中有不同的工具可以做到这一点,看看Translate功能。它将极大地帮助你,因为你不需要知道精灵的当前旋转(你似乎误解了什么是Vector3.forward)。还可以查看Time.deltaTime在此函数中的工作原理。

第二,当你旋转精灵时,你应该相对于它当前的旋转进行旋转,即添加或减去90度。看看Quaternion。欧拉

最后你不需要那么多布尔值。在编程时,你应该尽量避免重复,所以当你有很多相同的代码反复出现时,这是一个好迹象,表明你可以写得更好。

一个解决方案可能是沿着这条线。请记住,虽然我没有测试它,所以Vector3。和向量(0,0,90f)在四元数。欧拉可能是错误的,这取决于你如何定位你的游戏玩法:

if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.Translate(Vector3.up * Time.deltaTime);
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
transform.rotation *= Quaternion.Euler(0, 0, 90f);
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
transform.rotation *= Quaternion.Euler(0, 0, -90f);
}

相关内容

最新更新