【问题标题】:Unity : Boat drowned slowly after movingunity : 船移动后慢慢淹死
【发布时间】:2020-07-31 16:38:04
【问题描述】:

这是我的船稍微移动后的照片。它在后面慢慢地淹死了:

这就是我的船的设置。我试图改变其中的值,但似乎没有产生任何效果:

船:

  • 网格渲染器
  • 刚体
  • 网格碰撞器
  • 浮动对象脚本
  • 船控制器脚本

湖:

  • 水上基本飞机
  • 网格渲染器
  • 水基础脚本

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);
        }
    }
}

【问题讨论】:

  • 您能否提供更多详细信息,说明是什么让船首先移动?它是纯粹基于物理的吗?你在使用脚本吗?它有动画吗?水有对撞机吗?船的父游戏对象上有哪些组件?
  • 我从资产中导入船。船:一。刚体 ii.浮动对象脚本 iii.船控制器脚本 iv。网状对撞机水:i。水基础脚本
  • 嗨,我看到您正在使用unityscript 标签,请注意,这是(如标签信息中所述)Unity 不推荐使用的脚本语言,而不是包含所有脚本的术语在统一。你的问题是关于 C# 的。如果您使用实际语言 UnityScript 处理遗留代码,请仅使用此标记。这使问题和标签保持一致:)
  • 好的。谢谢你通知我。将其删除。
  • 这里有两种不同的方法。 1. 冻结小船刚体旋转,使其完全不会倾倒。 2.在船脚本中不断检查船的旋转是否超过10度,如果超过,则向船添加一些扭矩(旋转力)使其向另一个方向倾斜。这也会给船一个不错的摇摆动作。编辑:第三种方法是为船设置动画。动画是相对于游戏对象的父级完成的,因此仅通过动画让子级保持直立不会对父级的运动产生任何影响。

标签: c# visual-studio unity3d


【解决方案1】:

尝试减少质量。因为漂浮所需的力与质量成正比。

【讨论】:

  • 它没有任何效果
  • 可以分享浮动脚本吗
  • 好的。已经将它添加到我的问题上。抱歉,我只是不知道如何在评论中添加,因为我是新来的。
  • 将刚体组件的阻力从0.1改为1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2021-04-07
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多