unity3d自转代码c#_unity3d c#代码大全 - CSDN
精华内容
参与话题
  • Unity_太阳月亮地球的自转公转脚本

    千次阅读 2016-12-16 21:21:46
     * - 太阳自转  * - 地球自转、公转  * - 月亮自转、公转  * Used By:   * Author: YS.  * Date: 2016.12.  * Version: 1.0  * Description(Record):  *   ****

    /* Title:        ””
     * Function:
     *      太阳自转
     *   地球自转、公转
     *   月亮自转、公转
     * Used By:    
     * Author:    YS.
     * Date:        2016.12.
     * Version:    1.0
     * Description(Record):
     *    
     ************************/

    using UnityEngine;
    using System.Collections;

    public class SunEarthMoon : MonoBehaviour 
    {
        public Transform TrSun; // 定义太阳
    //    public GameObject GoSun;
        public Transform TrEarth;    // 定义地球
        public Transform TrMoon;    // 定义月球

        public float FlRotaSpeedSelf;  // 自转速度
        public float FlRotaSpeedCommEarth;  // 地球公转速度
        public float FlRotaSpeedCommMoon;   // 月球公转速度

        void Start () 
        {
                
        }//end_Start
        
        void Update () 
        {
            // 太阳自转
            // 脚本挂给谁,就让谁转
    //        this.gameObject.transform.Rotate ();
    //        transform.Rotate();
            // 挂脚本后,把哪个对象拖给TrSun就是谁
            TrSun.Rotate (Vector3.up * FlRotaSpeedSelf);
            // 因为组件名不一样,如果想用别的组件名,那么必须先 .”出来
    //        GoSun.transform.Rotate ();

            // 地球自转
            TrEarth.Rotate(Vector3.up * FlRotaSpeedSelf);
            // 地球公转
            TrEarth.RotateAround(TrSun.position,Vector3.up, FlRotaSpeedCommEarth);

            // 月球自转
            TrMoon.Rotate(Vector3.up * FlRotaSpeedSelf);
            // 月球公转
            TrMoon.RotateAround(TrEarth.position,Vector3.up,FlRotaSpeedCommMoon);

        }//end_Update
    }


    展开全文
  • Unity设置物体的自转和公转

    万次阅读 2016-08-30 14:27:19
    正好要做一个天空的场景,想添加上行星和恒星的自转和公转,代码如下 1.自转。 public float _RotationSpeed; //定义自转的速度 transform.Rotate(Vector3.down*_RotationSpeed,Space.World); //物体自转 ...

    正好要做一个天空的场景,想添加上行星和恒星的自转和公转,代码如下

    1.自转。

    public float _RotationSpeed; //定义自转的速度


    transform.Rotate(Vector3.down*_RotationSpeed,Space.World); //物体自转


    2.公转

        public GameObject Axis; //物体需要公转的参照物
        public float _RotationSpeed; //公转速度


     this.transform.RotateAround(Axis.transform.position, Vector3.up, _RotationSpeed);//将需要公转的参照物拖入,设置公转

    展开全文
  • Unity3D实现太阳系仿真

    万次阅读 热门讨论 2019-12-04 15:09:55
    Unity3D模拟太阳系仿真 模拟要求 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。 操作步骤 1.创建如下结构 sun 里包括8大行星, 并且设置...

    用Unity3D模拟太阳系仿真

    模拟要求

    写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。

    操作步骤

    1.创建如下结构 sun 里包括8大行星, 并且设置好距离和大小

    建立结构

    image

    建议用2D显示来直观设置距离

    在这里插入图片描述

    2.在网上找到相应贴图 添加到assets

    贴图网址
    网址失效 素材更新链接如下
    链接: https://pan.baidu.com/s/1w0xSMt_0HgBLbVhco9b6GA 提取码: ead5

    在这里插入图片描述
    而且把对应行星的贴图图片拖到对应的球体上(给白色小球上色)得到下面结果

    在这里插入图片描述

    3.创建c#脚本 使每个行星绕太阳转

    创建plantMove.cs文件 代码如下

    把此脚本拖到sun 物体即可,代码就是在sun 里面找到各个行星,并且设置运动

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class plantMove : MonoBehaviour
    {
    
        // Use this for initialization  
        void Start()
        {
       
        }
    
        // Update is called once per frame  
        void Update()
        {
    
            GameObject.Find("Sun").transform.Rotate(Vector3.up * Time.deltaTime * 5 );
    
            GameObject.Find("Mercury").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);
            //设置公转的方向和速度  方向轴为(0, 1, 0) 速度为 60
            GameObject.Find("Mercury").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 58);
            //设置自转 自转速度为10000/58   58是水星的自传周期  倒数就是时间  下同
    
            GameObject.Find("Venus").transform.RotateAround(Vector3.zero, new Vector3(0, 1, -0.1f), 55 * Time.deltaTime);
            GameObject.Find("Venus").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 243);
    
            GameObject.Find("Earth").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);
            GameObject.Find("Earth").transform.Rotate(Vector3.up * Time.deltaTime * 10000);
    
             GameObject.Find("Moon").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 5 * Time.deltaTime);
            GameObject.Find("Moon").transform.Rotate(Vector3.up * Time.deltaTime * 10000/27);
    
            GameObject.Find("Mars").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 45 * Time.deltaTime);
            GameObject.Find("Mars").transform.Rotate(Vector3.up * Time.deltaTime * 10000);
    
            GameObject.Find("Jupiter").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 2, 0), 35 * Time.deltaTime);
            GameObject.Find("Jupiter").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.3f);
    
            GameObject.Find("Saturn").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0.2f), 20 * Time.deltaTime);
            GameObject.Find("Saturn").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.4f);
    
            GameObject.Find("Uranus").transform.RotateAround(Vector3.zero, new Vector3(0, 2, 0.1f), 15 * Time.deltaTime);
            GameObject.Find("Uranus").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.6f);
    
            GameObject.Find("Neptune").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 1, -0.1f), 10 * Time.deltaTime);
            GameObject.Find("Neptune").transform.Rotate(Vector3.up * Time.deltaTime * 10000 / 0.7f);
    
        }
    }
    

    代码解释:

    我们通过GameObject.Find(“value”)来找到各个球体 然后通过调用RotateAround()设置公转,通过调用Rotate()方法设置自转

    4. 进一步思考

    运行下发现月球绕地球旋转不对劲, 其原因是地球的自转影响了月球的公转, 月球是相对一个自转的地球来的 月球公转叠加了地球自转。

    所以怎么去处理这个问题呢? 怎么让月球公转和地球自转不相关呢?

    这里有一个解决方案

    在原来的Sun里再加入一个对象名为EarthClone,而且大小和位置都和地球相同, 然后我对EarthClone设置和Earth一样的公转 但是不设置自转 把Moon放到EarthClone里让Moon相对与EarthClone公转 这样就能解决问题了

    文件结构:

    在这里插入图片描述
    加入和更改下列代码

     void Update()
        {
    
            GameObject.Find("Sun").transform.Rotate(Vector3.up * Time.deltaTime * 5 );
    
            GameObject.Find("Mercury").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);
            GameObject.Find("Mercury").transform.Rotate(Vector3.up * Time.deltaTime * 1 / 58);
    
            GameObject.Find("Venus").transform.RotateAround(Vector3.zero, new Vector3(0, 1, -0.1f), 55 * Time.deltaTime);
            GameObject.Find("Venus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 243);
    
            GameObject.Find("Earth").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);
            GameObject.Find("Earth").transform.Rotate(Vector3.up * Time.deltaTime * 10);
            //只设置公转 不设置自传
            GameObject.Find("EarthClone").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);
            //令Moon相对与不自转的EarthClone公转
            GameObject.Find("Moon").transform.RotateAround(GameObject.Find("EarthClone").transform.position, new Vector3(0, 1, 0), 250 * Time.deltaTime);
            GameObject.Find("Moon").transform.Rotate(Vector3.up * Time.deltaTime * 10/27);
    
            GameObject.Find("Mars").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 45 * Time.deltaTime);
            GameObject.Find("Mars").transform.Rotate(Vector3.up * Time.deltaTime * 10);
    
            GameObject.Find("Jupiter").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 2, 0), 35 * Time.deltaTime);
            GameObject.Find("Jupiter").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.3f);
    
            GameObject.Find("Saturn").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0.2f), 20 * Time.deltaTime);
            GameObject.Find("Saturn").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.4f);
    
            GameObject.Find("Uranus").transform.RotateAround(Vector3.zero, new Vector3(0, 2, 0.1f), 15 * Time.deltaTime);
            GameObject.Find("Uranus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.6f);
    
            GameObject.Find("Neptune").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 1, -0.1f), 10 * Time.deltaTime);
            GameObject.Find("Neptune").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.7f);
    
        }
    
    

    5.结果显示

    把cs脚本拖到Sun对象里 运行查看结果
    在这里插入图片描述

    展开全文
  • Unity3DC#脚本中常用API 首先,为了避免浪费一些同学的时间,我对本次博客的内容进行说明。(避免一些同学白花时间没有找到自己想看的东西) 本次博客的内容是 1、罗列出常用的几个类,以及他们常用的成员变量和...

    Unity3D中C#脚本中常用API

    首先,为了避免浪费一些同学的时间,我对本次博客的内容进行说明。(避免一些同学白花时间没有找到自己想看的东西)

    本次博客的内容是

    1、罗列出常用的几个类,以及他们常用的成员变量和常用方法。
    2、挑选出来它们其中的部分我认为比较重要的函数进行说明,并进行编程,并实现一个找柱子的小游戏。
    3、总结这几个类的各自功能偏向

    一、我们这次要介绍的是哪几个类

    Component、Transform、GameObject、Object、time

    二、常用类的变量与函数说明

    1. Component

        1> T GetComponent < T >();

          在挂有本脚本的物体上寻找一个组件T

        2> T[] GetComponents< T >();

          在挂有本脚本的物体上寻找所有组件T

        3> T GetComponentInChildren< T >();

          从自身开始查找组件T没有就从孩子身上找

        4> T[] GetComponentInChildren< T >(true or false);

          当参数为true时,查找并返回所有自身和孩子身上的组件T;当参数为false时,取本游戏对象及子物体的所有组件 除开非活跃的游戏对象。

        5> T GetComponentInParent< T >();

          从自身开始向上查找返回一个自身或父物体的组件。

        6> T[] GetComponentsInParent< T >();

          从自身开始获取自身和父物体中所有的组件T

    2.Transform

    变量:positio(物体的世界坐标系)、localPositon(物体相对于父物体的位置)、localScale(物体相对于父物体的缩放比例)、lossyScale(物体相对于模型的缩放比例)、parent(父物体的变换组件)、rotation(相对于世界坐标系物体的旋转角度)。

    函数

        1> Translate(Vector3)

           以自身坐标系为参照,向一个方向移动,加上一个参数Space.World以世界为参照移动

        2> SetParent(Transform,bool)

           如字面意思,设置物体的父物体,第二个参数为false表示当前物体的位置视为localPosition,否则视为worldPositon

        3> Transform Find(“子物体名称”)

           通过物体名称查找子物体(如要查找孙子辈的物体,“子物体名称/孙子辈物体名称”)

        4> Transform GetChild(int index)

           通过物体名称查找子物体(如要查找孙子辈的物体,“子物体名称/孙子辈物体名称”)

        5> RotateAround(Vector3 a,Vector3 b,float c)

           围绕着a点,以b为轴,旋转c度

        6> Rotate(Vector3 a,Space.World)

           如果加上Space.World参数,以世界坐标系为参照,绕着a轴自转;如果不加,以自身为参照,绕着a轴自转

        7> LookAt(Transform A)

           这个方法相当重要,让物体的Z轴周朝向目标A

    3.GameObject

    变量:activeSelf(物体激活状态)

    函数:

       SetActive(Bool)

          激活/停用游戏对象

       AddCompoment(new T)

          为游戏物体增加组件T

       Find(“物体名称”)

          在整个游戏中根据名称查找物体

       FindGameObjectsWithTag(“标签名”)

          在整个游戏中根据标签查找物体

    4.Object

    函数:

       Destory(Object gameObject,float time)

          在time秒后删除游戏对象gameObject。

       T Instantiate(new T)

          克隆一个物体

       T FindObjectOfType()

          为游戏中查找一个T类型的对象

       T[] FindObjectsOfType()

          为游戏中查找所有T类型的对象

    5.Time

    变量:time(游戏已经运行的时长),deltaTime(这一帧与上一帧之间的时间差)

    三、使用以上说明的部分函数进行编程实现一个找柱子的小游戏

    游戏功能说明:以俯视视角查看我们得场景,在场景中我们会放4~5个柱子和一个方块,这个方块会自转,然后当我们点击其中一个柱子时,方块会开始绕着点击的柱子旋转。

    1.首先我们创建一个这样的场景:

    在这里插入图片描述

    2.我们向方块绑定一个自转脚本,将这个脚本绑定在方块上:

    public class RotateCute : MonoBehaviour
    {
        public Vector3 point;   //方块公转围绕点,注意了这里设置权限为public否则你通过其他脚本是无法访问这个point成员变量的
        float speed;//每秒旋转的度数
    
        void Start()
        {
            point = new Vector3(0, 0, 0);
            speed = 30.0f;
        }
    
        void Update()
        {
            this.transform.RotateAround(point, new Vector3(0,1, 0), speed*Time.deltaTime);   //设置公转
            this.transform.Rotate(new Vector3(0,speed*Time.deltaTime,0),Space.World);//设置自转
        }
        void setPoint(Vector3 point)
        {
            this.point = point;
    
        }
        
    }
    

    当然你也可以通过在别的脚本中通过各种方式搜索到这个方块对象,然后对方块进行操作。

    3.为柱子绑定上鼠标点击,让方块围绕自己旋转的脚本

    public class Column : MonoBehaviour
    {
        int num = 1;
        void OnMouseDown()
        { 
            GameObject parent = this.transform.parent.gameObject;   //获取父物体对象
    
            for(int i=0;i< parent.transform.childCount;i++)
            {   //遍历孩子物体方法一
                
                Transform colum = parent.transform.GetChild(i);	//根据下标获取孩子节点
                colum.gameObject.GetComponent<Column>().num = 1;
            }
            this.num = 0;   //标记当前的物体
            foreach (Transform item in parent.transform)
            {   //遍历孩子物体方法二
                if (item.gameObject.GetComponent<Column>().num==0)
                {
                    GameObject cute=GameObject.Find("Cube");
                    cute.GetComponent<RotateCute>().point = item.transform.position;
                }
            }
        }
    }
    

    完成以上步骤运行结果如下:
    在这里插入图片描述好吧我知道有人会说,你这代码太复杂了,明明1到2行的代码就可以实现的功能要写这么长。没办法啦啊sir,为了尽可能的演示这次学习的函数啊。
    还有很多我列举的常用api没有演示。个人觉得没必要,我们只需要对这些api的类有一个总结就行了,这样当我们想到什么功能想要实现的时候只需要优先获取这些类,然后再去查一查帮助文档一般来说问题不大,毕竟代码本来就是拿来练的,不是拿来背的。

    四、这几个常用api类功能总结

    1.Component

    个人认为这个类是用来获取组件的,如下图:
    在这里插入图片描述

    2.Transform

    个人认为它的主要功能是用来改变物体的物理信息的,比如大小,位置,角度等等物理信息的。(这个物理可能是我个人的理解偏差,反正它可以用来修改这些信息)

    3.GameObject

    个人认为它是用来操作游戏对象的,比如禁用启用对象,并且可以添加、查找组件。

    4.Object

    这个类我暂时还想不出来合适的概括来形容他的功能。

    5.Time

    对提供游戏的时间信息

    五.总结

    通过本次学习我熟悉了以上我列举的UnityC#脚本的常用API,从今天开始我所学习的内容也终于可以通过运行的游戏画面来实现了。由于函数比较多,要想熟练使用单单凭一个博客是无法实现的,但是在这之后的学习中我会特意的回顾之前学习的内容,挑选其中我认为不是很熟悉的内容来实现程序的功能。
    啊~这样就我离我的目标(学习游戏人工智能的编程,争取通过自己的学习实现智能的游戏AI)又近了一步。

    展开全文
  • 打开Unity。 2.第二步 在场景中创建3个Sphere球体并分别命名为Moon, Sun和Earth。 在命名完之后调整3个球的大小和位置,并贴上贴图。将Moon作为Earth的子物体。 调整摄像机位置 3.第三步 创建两个C#脚本并分别...
  • 1.先创建名字为Sphere的3D object。(如图,是一个球状体。) 2.在Asset里面可以创建 material 给我们刚刚创建的小球增加材质(我们现在所学的material主要就用来给物体上色),如图material属性页有很多参数,但上色...
  • 空间与运动 简答题 1. 游戏对象运动的本质
  • 我们要做的就是月球、地球和太阳在自转的同时,月球绕地球旋转,地球绕太阳旋转的实例。 1. 首先创建三个球体,分别命名为Sun、Earth、Moon,调整它们在场景中的相对位置,并适当地更改它们的缩放比例,我们都知道...
  • Unity3D中的空间与运动

    2019-09-21 14:44:02
    文章目录1.简答并用程序验证 1.简答并用程序验证 - 游戏对象运动的本质是什么? 游戏对象的空间属性在同一个坐标系下随每一帧的变化。这里的空间属性是指transform中的position和rotation属性,即位置参数和旋转参数...
  • unity3d粒子系统之行星带

    千次阅读 2018-05-28 01:38:08
    Unity3d实战之粒子系统 选题要求 参考 http://i-remember.fr/en 这类网站,使用粒子流编程控制制作一些效果, 如“粒子光环” 实现效果 静态图 动态图 知识准备 粒子系统有许多大模块,比如最常用的...
  • unity2018 2. 运行截图 3. 功能 1. 场景漫游 提供第一视角模式和自由模式。第一视角使用unity自带的角色控制器包实现角色移动视角移动,自由模式实现鼠标拖拽,场景缩放。 2. 商品定位 通过输入商品信息,在三维...
  • 简答题 游戏对象运动的本质是什么? 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不...
  • Unity官方案例——Roll a ball

    千次阅读 2020-01-25 16:06:44
    现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正。 项目简介 首先玩家可以控制一个小球,去...
  • ------------------------------------------------ 关于例句的声明 ------------------------------------------------ 例句里的obj大都是实例对象,即绑定了实际GameObject的 public GameObject obj;...
  • Unity3D 小实验:太阳系模拟

    千次阅读 2018-04-04 08:44:53
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...太阳系大概是什么样子,大家都知道的,这里就不多说了。太阳系模拟,本来应该是按太阳系中太阳和行星的真实比例来实现的,后来,发现用真实比例,呈现出来的模拟...
  • 1.简答并用程序验证 游戏对象运动的本质是什么? 游戏对象运动的本质就是经过矩阵变换(平移、旋转、缩放)而引起的游戏对象空间属性的改变,空间属性包括Transform中的Position(位置参数)和Rotation(旋转参数)。...
  • 本文主要针对unity的游戏对象的移动做出介绍,并通过几个简易的代码实现抛物线运动,运用物体的旋转完成简单的太阳系模拟构造。最后,根据MVC模式实现牧师与恶魔小游戏。 1、简答并用程序验证 A. 游戏对象...
  • 1.新建项目 2.视图介绍 3.游戏截图 4.目录结构 ...scrips存放c#脚本 5.默认c#文件vs编写 edit>preference 6.ball 相关操作 using System.Collections; using System.Collections.Generic; u...
  • Unity3D】空间与运动

    2019-09-22 00:15:20
    1. 简答并用程序验证 (1) 游戏对象运动的本质是什么? 游戏对象运动的本质是游戏对象的position、rotation、scale等属性随着帧的改变而发生改变。 (2) 请用三种方法以上方法,实现物体的抛物线运动。...
1 2 3
收藏数 57
精华内容 22
关键字:

unity3d自转代码c#