Unity实现简易太阳系

这篇具有很好参考价值的文章主要介绍了Unity实现简易太阳系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发环境:Unity 2022.3.5f1c1 + Visual Studio 2022
太阳系相关星体:太阳、八大行星、月球
模拟星系:太阳系、地月系
功能:支持行星以太阳为中心,任意轴进行公转,此处演示同一平面。
a1-a8为公转轴,可以任意修改,InitStarPosition()将会修正星体初始位置;MoveAroundSun脚本挂在SolarSystemGroup对象上(空对象)。
动态演示效果

静态展示图片
Unity实现简易太阳系,Unity,unity,游戏引擎

核心代码文章来源地址https://www.toymoban.com/news/detail-728128.html

using UnityEngine;

public class MoveAroundSun : MonoBehaviour
{
    // 星体
    public Transform Sun;
    public Transform Mercury;
    public Transform Venus;
    public Transform Earth;
    public Transform Moon;
    public Transform Mars;
    public Transform Jupiter;
    public Transform Saturn;
    public Transform Uranus;
    public Transform Neptune;

    // 公转轴:Mercury至Neptune八大行星
    Vector3 a1 = new Vector3(0, 1, 0);
    Vector3 a2 = new Vector3(0, 1, 0);
    Vector3 a3 = new Vector3(0, 1, 0);
    Vector3 a4 = new Vector3(0, 1, 0);
    Vector3 a5 = new Vector3(0, 1, 0);
    Vector3 a6 = new Vector3(0, 1, 0);
    Vector3 a7 = new Vector3(0, 1, 0);
    Vector3 a8 = new Vector3(0, 1, 0);

    /// <summary>
    /// 初始化行星位置,使Star位于以Center为中心,rotateAxis为公转轴的法平面上
    /// </summary>
    /// <param name="center">公转中心</param>
    /// <param name="star">公转行星</param>
    /// <param name="rotateAxis">公转轴</param>
    void InitStarPosition(Vector3 center, Transform star, Vector3 rotateAxis)
    {
        // 中心点指向行星的方向向量
        Vector3 centerToStar = star.position - center;
        // 通过方向向量和公转轴向量的叉乘,得到这两个向量所在平面的法向量
        Vector3 normal = Vector3.Cross(rotateAxis, centerToStar);
        // 计算方向向量和公转轴向量的角度
        float angle = Vector3.Angle(rotateAxis, centerToStar);
        // 计算方向向量转动到法向量的角度(转动到法平面上的角度)
        float rotateAngle = Mathf.Abs(90 - angle);
        // 以太阳为中心,法向量为转轴来转动角度
        star.RotateAround(center, normal, rotateAngle);
    }

    // Start is called before the first frame update
    void Start()
    {
        // 为了让任意位置的星体都可以绕任意轴旋转,需要在初始时刻定位星体位置(只挂载一个脚本,所以有重复代码)
        InitStarPosition(Sun.position, Mercury, a1);
        InitStarPosition(Sun.position, Venus, a2);
        InitStarPosition(Sun.position, Earth, a3);
        InitStarPosition(Sun.position, Mars, a4);
        InitStarPosition(Sun.position, Jupiter, a5);
        InitStarPosition(Sun.position, Saturn, a6);
        InitStarPosition(Sun.position, Uranus, a7);
        InitStarPosition(Sun.position, Neptune, a8);
        InitStarPosition(Earth.position, Moon, Earth.transform.up);
    }
    // Update is called once per frame
    void Update()
    {
        Mercury.RotateAround(Sun.position, a1, 20 * Time.deltaTime);
        Mercury.Rotate(Vector3.up * 50 * Time.deltaTime);

        Venus.RotateAround(Sun.position, a2, 10 * Time.deltaTime);
        Venus.Rotate(Vector3.up * 30 * Time.deltaTime);

        Earth.RotateAround(Sun.position, a3, 10 * Time.deltaTime);
        Earth.Rotate(Vector3.up * 30 * Time.deltaTime);
        Moon.transform.RotateAround(Earth.position, Vector3.up, 359 * Time.deltaTime);

        Mars.RotateAround(Sun.position, a4, 8 * Time.deltaTime);
        Mars.Rotate(Vector3.up * 30 * Time.deltaTime);

        Jupiter.RotateAround(Sun.position, a5, 7 * Time.deltaTime);
        Jupiter.Rotate(Vector3.up * 30 * Time.deltaTime);

        Saturn.RotateAround(Sun.position, a6, 6 * Time.deltaTime);
        Saturn.Rotate(Vector3.up * 30 * Time.deltaTime);

        Uranus.RotateAround(Sun.position, a7, 5 * Time.deltaTime);
        Uranus.Rotate(Vector3.up * 30 * Time.deltaTime);

        Neptune.RotateAround(Sun.position, a8, 4 * Time.deltaTime);
        Neptune.Rotate(Vector3.up * 30 * Time.deltaTime);
    }
}

到了这里,关于Unity实现简易太阳系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WxGL应用实例:绘制高精度的3D太阳系模型

    天何所沓?十二焉分?日月安属?列星安陈?—— 屈原 远古时期的人类就对神秘幽邃的星空充满了好奇与敬畏。仰望星空,宇宙浩瀚。比宇宙更壮阔的,是人类对宇宙的不懈追问和沉淀在基因中的探索精神。 本文尝试用WxGL来回答“日月安属、列星安陈”这个古老的问题。太

    2023年04月21日
    浏览(51)
  • 基于 HTML5 + WebGL 的太阳系 3D 展示系统

    前言 近年来随着引力波的发现、黑洞照片的拍摄、火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如《三体》、《流浪地球》、《星际穿越》等的传播普及,宇宙空间中那些原本遥不可及的事物离我们越来越近,人们对未知文明的关注和对宇宙空间的好奇达

    2024年02月20日
    浏览(39)
  • 【计算机图形学】【实验报告】太阳系绘制、B样条曲线绘制(附代码)

    实 验 报 告 一、实验目的 掌握三维图形的显示原理和方法,掌握三维观察的原理和方法; 掌握OpenGL中矩阵堆栈函数的使用,会使用堆栈函数进行复杂场景的组装。 掌握OpenGL中三维观察变换常用的函数的使用方法,了解三维模型的贴图方法; 掌握自由曲线的生成方法,熟练

    2024年02月10日
    浏览(44)
  • 【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

    📢博客主页:肩匣与橘 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 肩匣与橘 编写,首发于 CSDN 🙉 📢生活依旧是美好而又温柔的,你也是✨  基于Unity3D引擎的冒险游戏的设计与实现 📢前言 摘要 Abstract 1 绪论 1.1 选题背景 1.2 研究目的及意义 2 开发工具

    2024年02月05日
    浏览(66)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(79)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(78)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(66)
  • Unity vs Godot :哪个游戏引擎更适合你?

    游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有各自的优势,没有绝对的好坏之分。Godot开源免费,上手简单,更适合2D和小型游戏

    2024年01月23日
    浏览(98)
  • 30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月11日
    浏览(74)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(124)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包