概述
原理
按下WS键时,给船一个前后方向上的推力
按下AD键时,给船一个围绕Y轴旋转的扭矩
扭矩 Torque
扭矩力,是使物体发生转动的力。
玩家控制
如果进入驾驶状态,则禁用玩家控制脚本,并使用父子约束将玩家固定在船上。
如果退出驾驶状态,则恢复启用玩家控制脚本,销毁父子约束组件。
配置方法
将脚本挂载在船上,并指定玩家对象
还需要限制船的刚体在X、Z轴上的旋转
效果
代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Animations;
public class Motorboat : MonoBehaviour
{
public GameObject player;
public float thrustForce = 50000; //推力
public float torque = 5000; //扭矩
bool isOperated = false;
private Rigidbody rigidbody;
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.B) && isOperated == false)
{
isOperated = true;
player.GetComponent<PlayerControl>().enabled = false;
player.AddComponent<ParentConstraint>();
ConstraintSource constraintSource = new ConstraintSource(){
sourceTransform = transform,
weight = 1
};
player.GetComponent<ParentConstraint>().SetSources(new List<ConstraintSource>(){constraintSource});
player.GetComponent<ParentConstraint>().SetTranslationOffset(0, new Vector3(0, 0.3f, 0));
player.GetComponent<ParentConstraint>().constraintActive = true;
}
else if(Input.GetKeyDown(KeyCode.B) && isOperated == true)
{
isOperated = false;
player.GetComponent<PlayerControl>().enabled = true;
player.GetComponent<ParentConstraint>().SetSources(new List<ConstraintSource>());
player.GetComponent<ParentConstraint>().constraintActive = false;
Destroy(player.GetComponent<ParentConstraint>());
}
Move();
}
void Move()
{
if(!isOperated) return;
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
rigidbody.AddForce(transform.forward * v * thrustForce);
rigidbody.AddTorque(transform.up * h * torque);
}
}
附
Unity 水体浮力的实现
最后
以上就是真实巨人为你收集整理的Unity 船的控制的全部内容,希望文章能够帮你解决Unity 船的控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复