请记住,我是一个完全的初学者。
我正在尝试制作太空射击游戏。我有一个面朝上的2D精灵和这段代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float speed = 5.0f;
private void Start()
{
transform.position = Vector3.zero;
}
private void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 eulerAngles = transform.rotation.eulerAngles;
//Debug.Log("transform.rotation angles x: " + eulerAngles.x + " y: " + eulerAngles.y + " z: " + eulerAngles.z);
transform.Translate(Vector3.right * speed * horizontalInput * Time.deltaTime, Space.World);
transform.Translate(Vector3.up * speed * verticalInput * Time.deltaTime, Space.World);
if (horizontalInput > 0)
{
transform.Rotate(new Vector3(0, 0, -1) * horizontalInput * Time.deltaTime * 300);
}
else if (horizontalInput < 0)
{
transform.Rotate(new Vector3(0, 0, -1) * horizontalInput * Time.deltaTime * 300);
}
if (eulerAngles.z > 45)
{
//transform.rotation = Quaternion.AngleAxis(45, Vector3.forward);
Debug.Log("45");
if (eulerAngles.z < -45)
{
//transform.rotation = Quaternion.AngleAxis(-45, Vector3.forward);
Debug.Log("-45");
}
现在,我希望日志说&#34; 45&#34;当Transform.rotation.z中的值达到45时,&#34; -45&#34;当它达到-45。我的真实意图(在代码中注释掉)是告诉精灵在45或-45度停止旋转。
当我按向左箭头直到它旋转到45时,它会起作用。但问题出在这里......当我按向右箭头,并且Transform.rotation.z的值变为负数时,日志会立即显示&#34; 45&#34;好像任何负数都不会超过45。
我注意到当我在Unity中旋转精灵时,Transform.rotation.z的值会进行一种循环,直到180然后变为负值直到0,反之亦然。
有人能告诉我我错过了什么吗?我是否会忽略其他更简单,更有效的方法来实现我所寻找的目标?
在此先感谢您的帮助,我真的很感激。我是新人,仍然在努力掌握许多概念。
答案 0 :(得分:2)
我刚刚解决了!我只需要设置一个范围在45到180之间的范围,而另一个方向设置在315和180之间。
if (eulerAngles.z > 45 && eulerAngles.z < 180)
{
transform.rotation = Quaternion.AngleAxis(-315, new Vector3(0, 0, 45));
Debug.Log("45");
}
if (eulerAngles.z < 315 && eulerAngles.z > 180)
{
transform.rotation = Quaternion.AngleAxis(-315, new Vector3(0, 0, -45));
Debug.Log("-45");
}
这使它完美地运作。当精灵(宇宙飞船)横向移动时,它会旋转到那一侧但停止以45度旋转。