简单太阳系制作

这篇博客介绍了如何在Unity3d中制作简单的太阳系模型,重点讲述了Transform.localPosition的使用,解释了如何在太阳、地球和月亮之间设置相对位置,以及在太阳系整体移动时保持它们的相对关系不变。还探讨了单例模式在Unity3d中的应用,特别是在游戏对象管理和生命周期控制中的重要性。
摘要由CSDN通过智能技术生成

关于Transform.localXXX的运用

transform.localXXXX一般都是 相对于父对象的XXX,针对这点可以利用的情况很多。

就比如这次的课堂作业 太阳,地球,月亮的模型

太阳是地球的父对象
而地球是月亮的父对象

一开始我设置三者的位置时,只用了position,代码如下:

float SunR = 8f;
float EarR = 9f;
Earth.transform.position = new Vector3(0,0,SunR);
Moon.transform.position = new Vector3 (0, 0,EarR); 

因为太阳的半径为5,而地球的半径为 1;但是因为没有使用相对位置,所以只能把EarR的值设置为 9。同时还存在一个潜在的问题就是。当我需要移动“太阳系”的时候,需要每一个对象都重新设置位置

而使用localPosition,则不会有这样的问题:

float SunR = 5f; //相对于太阳是5,此时可以不考虑太阳的位置是不是(0,0,3f)
float EarR = 1f; //此时地球的半径可以设置为1,更方便理解代码
Earth.transform.localPosition = new Vector3 (0,0,SunR);
Moon.transform.localPosition = new Vector3 (0, 0,EarR);
//这表示,地球在相对于太阳的前面forward8个单位的位置,而月亮有在相对地球前面一个单位的位置

此时,再次移动太阳的位置,则地球和月亮还是可以和太阳的位置保持一致的


Transform小结

Transform首先是一个 组件
用来描述对象的3个特性:
Position位置,rotation角度,Scale比例

所有的对象都是有 Transform 的。

关于transform的方法和变量,可以查询这个网站

特别的:Transform 还可以用来查找,获取对象


半径内随机部署物体的子程序

代码和注释如下:

void ScatterObject(Vector3 p, float radius, int number, GameObject obj){
// p对应是目标位置,radius对应的是半径,number对应的是要生成的怪物数,而obj对应的是要生成的对象
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值