【Unity3D小功能】Unity3D中实现轮船在水面上移动效果

news2024/11/15 4:16:27

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址
  • 我的个人博客

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

标题是啥我写啥,大家好,今天给大家带来的是《Unity3D中实现轮船在水面上移动效果》。

前言没啥好写的,直接看效果图吧:
在这里插入图片描述

二、实现

2-1、制作水面

需要先现在资源包:https://download.csdn.net/download/q764424567/87751907

在这里插入图片描述
打开资源包里面的Prefabs文件夹,将AQUAS Waterplane预制体拖入到场景中:
在这里插入图片描述

2-2、导入轮船

点开资源包中的Models文件夹,找到超大型远航货轮集装箱轮船fbx模型,拖入到场景中:
在这里插入图片描述
设置旋转、位置、缩放:
在这里插入图片描述

2-3、搭建UI

UI用了4个RawImage,摆在四个角即可:
在这里插入图片描述
将主摄像机照射轮船主视角,然后复制出来4个相机分别照射不同的角度:
在这里插入图片描述
新建4个RenderTexture:
在这里插入图片描述
将RenderTexture拖入摄像机的TargetTexture卡槽中,然后再拖入到RawImage的Texture卡槽中:
在这里插入图片描述
就可以实现将摄像机的图像渲染给UI了:
在这里插入图片描述

2-4、实现代码

新建脚本ShipMove.cs,双击打开代码,编辑代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShipMove : MonoBehaviour
{
    void Update()
    {
        Move();     //移动
        Shake();    //摇摆
    }

    float Speed = 5.0f; //移动速度
    float RotateSpeed = 5;   //旋转速度
    void Move()
    {
        float move_x = Input.GetAxis("Horizontal");
        float move_y = Input.GetAxis("Vertical");

        if (move_y >= 0.5f)
        {
            transform.Translate(0, 0, Speed * Time.deltaTime);
        }
        else if (move_y <= -0.5f)
        {
            transform.Translate(0, 0, -Speed * Time.deltaTime);
        }

        // 船的转向  
        if (move_y > 0.5f)
        {
            if (move_x > 0.5f)
            {
                transform.Rotate(0, RotateSpeed * Time.deltaTime, 0);
            }
            else if (move_x < -0.5f)
            {
                transform.Rotate(0, -RotateSpeed * Time.deltaTime, 0);
            }
        }
    }


    // 绕Z轴的摇摆的速度
    float z_ShakeSpeed = 3.0f;
    // 绕X轴的摇摆的速度
    float x_ShakeSpeed = 1.0f;
    void Shake()
    {
        // 绕Z轴摇晃  
        if (transform.eulerAngles.z >= 4 && transform.eulerAngles.z <= 180)
        {
            z_ShakeSpeed = -z_ShakeSpeed;
        }
        else if (transform.eulerAngles.z <= (360 - 4) && transform.eulerAngles.z >= 180)
        {
            z_ShakeSpeed = -z_ShakeSpeed;
        }

        // 绕X轴摇晃  
        if (transform.eulerAngles.x >= 4 && transform.eulerAngles.x <= 180)
        {
            x_ShakeSpeed = -x_ShakeSpeed;
        }
        else if (transform.eulerAngles.x >= 180 && transform.eulerAngles.x <= (360 - 4))
        {
            x_ShakeSpeed = -x_ShakeSpeed;
        }
        transform.Rotate(0, 0, z_ShakeSpeed * Time.deltaTime);
    }
}

将这个脚本添加到轮船上,轮船就能移动了:
在这里插入图片描述

但是,摄像机还在原地,需要添加一个摄像机跟随的脚本

新建脚本ShipMove.cs,双击打开代码,编辑代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMove : MonoBehaviour
{
    public GameObject Target;
    public float smooth = 2f;
    Vector3 distance;

    void Start()
    {
        distance = transform.position - Target.transform.position;
    }

    private void FixedUpdate()
    {
        transform.position = Vector3.Lerp(Target.transform.position + distance, transform.position, smooth);
    }
}

将这个脚本附给摄像机的父节点:
在这里插入图片描述
设置Target和Smooth的值。

2-5、运行效果

运行脚本,效果如下视频所示:

【Unity3D小功能】Unity3D实现轮船在水面上移动效

2-6、源码分享

https://download.csdn.net/download/q764424567/87751907

三、后记

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏方向简介
Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt帮我写的一个小程序气泡框代码

效果图 这是一个气泡框 .bubble { position: relative; padding: 10px; border-radius: 8px; background-color: #ddd; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } .triangle { position: absolute; width: 0; height: 0; top: -10px; left: 50%; margin-left: -10px; bor…

vue集成animate.css

vue集成animate.css 一 <transition> 标签的用法二 关于animate.css三 vue集成animate.css使用 一 <transition> 标签的用法 使用<transition></transition>标签包裹要加动画的元素。 标签中添加属性name&#xff0c;表示执行动画的名字&#xff0c;不…

python 网络接口测试(post)

代码&#xff1a; import requests url https://xxx.com/xxx # 注意这里必须以json字符串构造数据 data { "username": "showdoc", "password": "xxx" } headers {content-type: application/json} # 与 get 请求一样…

STC15W104 定时器实现灯的闪烁(定时器原理讲解)

一&#xff1a;STC15W104单片机有几个定时器 STC15W104单片机共有2个定时器&#xff0c;分别为定时器0、定时器2。 二&#xff1a;定时器的作用 定时器是单片机中的一种常用外设&#xff0c;用于在一定时间间隔内产生中断。 定时器通常用于计时、测量时间间隔、生成PWM信号等应…

【MybatisPlus】高级版可视化、可配置 自动生成代码

今天看别人使用了一个更加智能的生成代码工具&#xff0c;可视化、可配置策略&#xff0c;非常方便&#xff0c;配置一次&#xff0c;在哪都可以使用&#xff0c;也不会跟项目藕合下面简单说一下使用方式。 1、介绍mybatis-plus-generator-ui 主要是封装了mybatis-plus-gener…

【深度学习】计算机视觉(13)——模型评价及结果记录

1 Tensorboard怎么解读&#xff1f; 因为意识到tensorboard的使用远不止画个图放个图片那么简单&#xff0c;所以这里总结一些关键知识的笔记。由于时间问题&#xff0c;我先学习目前使用最多的功能&#xff0c;大部分源码都包含summary的具体使用&#xff0c;基本不需要自己修…

【AWS入门】将EC2的系统日志推送到CloudWatch

创建一个 EC2 实例&#xff0c;不附加任何 IAM profile. ※这里注意不要用23年最新版本的镜像&#xff0c;该镜像不支持awslogs 选择旧版镜像可成功安装awslogs 开始创建一个 IAM profile 创建角色&#xff0c;服务选择 EC2, policy 选择 CloudWatchAgentServerPolicy. 切换回…

GPT 学术优化 (ChatGPT Academic)搭建过程(含ChatGLM cuda INT4量化环境和newbing cookie)

文章目录 1、GPT Academic2、chatGPT3、chatGLM4、newbing 1、GPT Academic 项目地址&#xff1a;地址 安装部分 git clone https://github.com/binary-husky/chatgpt_academic.git cd chatgpt_academicconda create -n gptac_venv python3.11 conda activate gptac_venv pyt…

ASEMI代理ADM3202ARUZ-REEL7原装ADI车规级ADM3202ARUZ-REEL7

编辑&#xff1a;ll ASEMI代理ADM3202ARUZ-REEL7原装ADI车规级ADM3202ARUZ-REEL7 型号&#xff1a;ADM3202ARUZ-REEL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;TSSOP-16 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;16 工作温度: …

助力数字轻工发展,企企通亮相第十三届中国轻工业信息化大会

新一代数字技术蓬勃发展&#xff0c;数字经济和实体经济加速融合&#xff0c;数字化不仅仅是生产和管理方式的转变&#xff0c;更是一场创新的革命&#xff0c;只有通过持续创新、不断优化产品内容和服务&#xff0c;才能真正满足客户的需求。 近日&#xff0c;第十三届中国轻工…

想要跳槽涨薪 那你准备拿下 Framework 了吗?

2023这个阶段Android 还行&#xff0c;只是初级开发没有之前那么吃香了&#xff0c;初级市场饱和&#xff0c;但是中高级岗位人才还是比较稀缺。 我们Android程序员与其他程序员一样&#xff0c;每过一年焦虑便加深一点&#xff0c;在近几年越来越差的大环境下更是如此。许多程…

C++好难(2):类和对象(上篇)

okay&#xff0c;从这里开始&#xff0c;就进入c比较难的部分了~啊啊啊&#xff01;&#xff01;&#xff01; (﹃ԅ) 坚持坚持啦 ~ ᵎ(•̀㉨•́)و ̑̑ 【本章目标】 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实…

情景剧本杀闯关系统

情景剧本杀闯关软件的开发需求通常包括以下几个方面&#xff1a; 剧本设计&#xff1a;开发者需要根据用户需求和市场调研&#xff0c;设计不同主题和难度等级的剧本内容&#xff0c;以及游戏过程中的任务、角色和道具等。 游戏引擎开发&#xff1a;为了实现游戏过程中…

TensoRT量化第四课:PTQ与QAT

目录 PTQ与QAT前言1. TensorRT量化2. PTQ3. QAT4. QAT实战4.1 环境配置4.2 pytorch_quantization简单示例4.3 自动插入QDQ节点 总结 PTQ与QAT 前言 手写AI推出的全新TensorRT模型量化课程&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程为第四课&am…

Netty基础(一)

1.概述 1.1.原生NIO存在的问题 1>.NIO的类库和API繁杂,使用麻烦: 需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等; 2>.需要具备其他的额外技能: 要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能…

【数据结构与算法】图——邻接表与邻接矩阵

文章目录 一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 三、总结 一、图的基本概念 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G&#xff08;V,E&#…

【服务器数据恢复】多块磁盘离线导致RAID5崩溃的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某品牌StorageWorks存储设备&#xff0c;8块磁盘组建一组raid5磁盘阵列。存储中2块磁盘掉线导致阵列崩溃&#xff0c;经过检查发现掉线的2块磁盘均存在物理故障。 服务器数据恢复过程&#xff1a; 1、硬件工程师对掉线的两块磁盘进行…

性能测试-压力测试如何快速上手?8年资深测试总结整理,永不背锅...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一般我们在刚介入…

mulesoft MCIA 破釜沉舟备考 2023.05.04.30(易错题)

mulesoft MCIA 破釜沉舟备考 2023.05.04.30(易错题) 1. According to MuleSoft, which major benefit does a Center for Enablement (C4E) provide for an enterprise and its lines of business?2. An organization is choosing between API-led connectivity and other i…

ASEMI代理ADM3251EARWZ-REEL原装ADI车规级ADM3251EARWZ-REEL

编辑&#xff1a;ll ASEMI代理ADM3251EARWZ-REEL原装ADI车规级ADM3251EARWZ-REEL 型号&#xff1a;ADM3251EARWZ-REEL 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;SOIC-20-300mil 批号&#xff1a;2023 引脚数量&#xff1a;20 工作温度&#xff1a;-40C~85C 安装类型…