网站建设方案书应急处置方案,网站空间的存放种类,上海牛巨微seo关键词优化,wordpress 301本文使用Rigidbody控制飞机#xff0c;基本不会穿模。 效果 飞行效果 这是一条优雅的广告 如果你也在开发飞机大战等类型的飞行游戏#xff0c;欢迎在主页搜索博文并参考。 搜索词#xff1a;Unity游戏(Assault空对地打击)开发。 脚本编写 首先是完整代码。 using System.Co… 本文使用Rigidbody控制飞机基本不会穿模。 效果 飞行效果 这是一条优雅的广告 如果你也在开发飞机大战等类型的飞行游戏欢迎在主页搜索博文并参考。 搜索词Unity游戏(Assault空对地打击)开发。 脚本编写 首先是完整代码。 using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FlightCtrl : MonoBehaviour
{private float rotationSpeed 5f;private float rollSpeed 1f;private float minSpeed 40f;private float maxSpeed 200f;private float moveSpeed 100f;private Rigidbody rb;private void Start(){rb GetComponentRigidbody();}private void FixedUpdate(){Move();Yaw();Pitch();Roll();}private void Move(){float move Input.GetAxis(Vertical);moveSpeed move;if (moveSpeed minSpeed)moveSpeed minSpeed;else if (moveSpeed maxSpeed)moveSpeed maxSpeed;rb.velocity transform.forward * moveSpeed;}private void Yaw(){if (Input.GetMouseButton(0)){float yaw Input.GetAxis(Mouse X);Vector3 newTorque new Vector3(0f, yaw * pitchSpeed, 0f);rb.AddRelativeTorque(newTorque);}}private void Pitch(){if (Input.GetMouseButton(1)){float pitch Input.GetAxis(Mouse Y);Vector3 newTorque new Vector3(pitch * pitchSpeed, 0f, 0f);rb.AddRelativeTorque(newTorque);}}private void Roll(){float roll Input.GetAxis(Horizontal); // A, D/上, 下(-1, 1)Vector3 newTorque new Vector3(0f, 0f, -roll * rollSpeed);rb.AddRelativeTorque(newTorque);}
} 分块解析 rotationSpeed后续有用请根据实际情况来调整数值控制偏航和俯仰的转向速度。 rollSpeed同理控制横滚的速度。 moveSpeed前进的速度初始为100f。 min/maxSpeed最低/高速。 rbRigidbody组件。 private float rotationSpeed 5f;
private float rollSpeed 1f;
private float minSpeed 40f;
private float maxSpeed 200f;private float moveSpeed 100f;
private Rigidbody rb; 用处获取Rigidbody组件用rb表示。 private void Start()
{rb GetComponentRigidbody();
} 更新时进行飞机的 前后移动、偏航、俯仰、横滚如果需要操作。 private void FixedUpdate()
{Move();Yaw();Pitch();Roll();
} move通常获取键盘的 W 和 S 键或者方向键的上下箭头W上(1)、S(下)(-1)。 加速或减速。 限制速度。 设置刚体速度方向为物体的前方速度为moveSpeed。 private void Move()
{float move Input.GetAxis(Vertical);moveSpeed move;if (moveSpeed minSpeed)moveSpeed minSpeed;else if (moveSpeed maxSpeed)moveSpeed maxSpeed;rb.velocity transform.forward * moveSpeed;
} 当左键按下时执行偏航操作左右转动。 获取鼠标的横向位置移动左右移动左-1右1 yaw * rotationSpeed直接用yaw力太大或太小需要乘一个数控制大小。 给刚体添加转向方向。 private void Yaw()
{if (Input.GetMouseButton(0)){float yaw Input.GetAxis(Mouse X);Vector3 newTorque new Vector3(0f, yaw * rotationSpeed, 0f);rb.AddRelativeTorque(newTorque);}
} 以此类推。 private void Pitch()
{if (Input.GetMouseButton(1)){float pitch Input.GetAxis(Mouse Y);Vector3 newTorque new Vector3(pitch * rotationSpeed, 0f, 0f);rb.AddRelativeTorque(newTorque);}
}private void Roll()
{float roll Input.GetAxis(Horizontal); // A, D/上, 下(-1, 1)Vector3 newTorque new Vector3(0f, 0f, -roll * rollSpeed);rb.AddRelativeTorque(newTorque);
}