c# - unity : 船移动后慢慢淹死
问题描述
这就是我的船的设置。我试图改变其中的值,但似乎没有产生任何效果:
船 :
- 网格渲染器
- 刚体
- 网格对撞机
- 浮动对象脚本
- 船控制器脚本
湖 :
- 水上基本飞机
- 网格渲染器
- 水基本脚本
WaterBasic(湖)的编码:
using System;
using UnityEngine;
namespace UnityStandardAssets.Water
{
[ExecuteInEditMode]
public class WaterBasic : MonoBehaviour
{
void Update()
{
Renderer r = GetComponent<Renderer>();
if (!r)
{
return;
}
Material mat = r.sharedMaterial;
if (!mat)
{
return;
}
Vector4 waveSpeed = mat.GetVector("WaveSpeed");
float waveScale = mat.GetFloat("_WaveScale");
float t = Time.time / 20.0f;
Vector4 offset4 = waveSpeed * (t * waveScale);
Vector4 offsetClamped = new Vector4(Mathf.Repeat(offset4.x, 1.0f), Mathf.Repeat(offset4.y, 1.0f),
Mathf.Repeat(offset4.z, 1.0f), Mathf.Repeat(offset4.w, 1.0f));
mat.SetVector("_WaveOffset", offsetClamped);
}
}
}
这是 FloatObjectScript (Boat) 的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class FloatObjectScript : MonoBehaviour
{
public float waterLevel = 0.0f;
public float floatThreshold = 2.0f;
public float waterDensity = 0.125f;
public float downForce = 4.0f;
private float forceFactor;
private Vector3 floatForce;
void FixedUpdate()
{
forceFactor = 1.0f - ((transform.position.y - waterLevel) / floatThreshold);
if (forceFactor > 0.0f)
{
floatForce = -Physics.gravity * GetComponent<Rigidbody>().mass * (forceFactor - GetComponent<Rigidbody>().velocity.y * waterDensity);
floatForce += new Vector3(0.0f, -downForce * GetComponent<Rigidbody>().mass, 0.0f);
GetComponent<Rigidbody>().AddForceAtPosition(floatForce, transform.position);
}
}
}
解决方案
尝试减少质量。因为漂浮所需的力与质量成正比。
推荐阅读
- dart - Dart linting 排除分析器下的文件夹
- vue.js - 如何将标签/插槽添加到输入字段 Vue
- php - 如何解决此错误:ORA-01741:非法零长度标识符
- reactjs - 防止状态重置
- anaconda - 在 anaconda navigator 中启动软件包的问题
- debugging - 如何在 Blazor 中跟踪和调试路由(服务器端)
- vba - 如何在Access数据输入表单中仅查询当前记录/行的组合框?
- excel - 如何使 VLOOKUP() 与下一个更大的值匹配?
- git - git log --since 不包括第一次提交
- fortran - 第 i 个元素后 1d 数组的最大值