c# - 如何在 Unity3d 中改变宇宙飞船的方向和旋转
问题描述
几个小时前我问了一个问题,但我认为这个问题并没有清楚地向你说明我想要什么。所以我再次发布了一些图片。请仔细看图片。带有旋转和位置的宇宙飞船图像
所以我的问题是这样的。[问题1]:当我按下左箭头按钮时,船的旋转和方向应该像图中所示的圆圈(3)一样改变,当我释放左箭头按钮时,它应该回到它的旋转状态,如图所示( 1)。
[问题2]:当我按下右箭头按钮时,船的旋转和方向应该像图中显示的圆圈(2)一样改变,当我松开右箭头按钮时,它应该回到它的旋转状态,如图所示(1 )。
transform.position += transform.forward * Time.deltaTime * 10f;
if(Input.GetKey(KeyCode.LeftArrow))
{
//code
}
if(Input.GetKey(KeyCode.RightArrow))
{
//code
}
请帮助我,我卡在那里:(
解决方案
你查看过 Unity 提供的太空射击教程吗? https://unity3d.com/learn/tutorials/projects/space-shooter-tutorial/moving-player?playlist=17147
它是在旧版本的 Unity(Unity 版本 4)中编码的,但他们会检查以确保它与新版本兼容(截至今天的 Unity 版本 5.1)。如果链接更改,我已经复制了他们在视频中使用的代码。
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour
{
public float speed;
public float tilt;
public Boundary boundary;
void FixedUpdate ()
{
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed;
rigidbody.position = new Vector3
(
Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
);
rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt);
}
}
这rigidBody.rotation
将用于您提供的图片中所示的倾斜/坡度,但目前不会改变船的正向旋转。按左右箭头键会影响刚体速度并导致倾斜,一旦松开将恢复到中心船位置。
推荐阅读
- ruby-on-rails - Heroku 在迁移期间挂起并出现奇怪的 pg_advisory_unlock
- json - SyntaxError:JSON.parse 中位置 1 的 JSON 中的意外标记 <
) - php - Symfony __construct 用法
- coldfusion - Coldfusion 2016 使用 cfscript mail() 时如何包含模板?
- c# - 如何使此 MenuItem 中的复选标记尊重整体前景色?
- android - 在活动之间传递数据到 asyncTask 和从 asyncTask 到活动
- r - R:是否可以将布尔数据合并到部分重复行的多个选择列中?
- angular - NgRx Marbles 效果测试返回奇怪的错误
- verilog - Verilog 多计数器
- html - 如何在一组容器中调整不同大小的图像 | CSS