Unity——3空间与运动

本文详细介绍了在Unity中实现抛物线运动和太阳系模拟的过程,包括位置和旋转的处理,以及如何通过脚本实现星体的公转和自转。此外,还涉及到了场景美化,如星体的大小、颜色和贴图设置,以及对月球的额外模拟。文章最后提到了简化版游戏中的角色和动作,展示了如何设计玩家行为规则。
摘要由CSDN通过智能技术生成

一、简答题

  1. 游戏运动的本质

    本质是游戏对象跟随时间与空间的变化。一般可以分为position和rotation(位置和角度)的变化。

  2. 实现抛物线运动
    (1)、position:把抛物线运动分解为水平的叠加运动,与竖直方向的落体运动
    即创建两个方向的运动进行叠加

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

public class pp1 : MonoBehaviour
{

    public float speed = 1;
    // Use this for initialization
    void Start()
    {
        Debug.Log("start!");
    }

    // Update is called once per frame
    void Update()
    {

        this.transform.position += Vector3.down * Time.deltaTime * (speed / 10);
        this.transform.position += Vector3.right * Time.deltaTime * 5;
        speed++;
    }
}

(2)、vector3: 创建一个vector3的变量,仍然是分为水平方向和竖直方向的运动。与position几乎 无区别

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

public class pp2 : MonoBehaviour
{

    public float speed = 1;
    // Use this for initialization
    void Start()
    {
        Debug.Log("start!");
    }

    // Update is called once per frame
    void Update()
    {

        Vector3 change = new Vector3(Time.deltaTime * 5, -Time.deltaTime * (speed / 10), 0);
        ;
        this.transform.position += change;
        speed++;
    }
}


3、实现太阳系模拟
第一步先建立八个球体,分别从sun到neptune

在这里插入图片描述

想让其视觉更加整齐,便先设定他们的位置都在(x,0,0)处,距离等距离进行增加;大小先暂时一样,后面美化时再进行修改。

接下来便要对其运动进行模拟,由于是简化版的太阳系模拟,便将所有的星体运动视为自身的自转加上围绕太阳公转的圆周运动。

首先,对于公转进行脚本的编写。
简而言之,就是选中一个目标原点,围绕其进行圆周运动。但是由于题目要求,各个星体不可以在同一法平面上,便需要使各个圆周所绕的轴不一样,这里可以使用random进行随机模拟,代码如下。

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

public class movesun : MonoBehaviour
{
    public Transform origin;
    public float speed = 20;
    float ry, rx;
    // Use this for initialization
    void Start()
    {
        rx = Random.Range(10, 60);
        ry = Random.Range(10, 60);
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 axis = new Vector3(rx, ry, 0);
        this.transform.RotateAround(origin.position, axis, speed * Time.deltaTime);
    }
}


然后将脚本拖入各个星体中,均选定sun作为原点进行旋转,然后对其速度进行快慢的区分;由于公转速度是各个星体与太阳的距离决定的,也就是所谓的“近快远慢”,速度就从mercury到neptune依次递减。

在这里插入图片描述

公转完成后,便进行自转的脚本编写。

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

public class rotateself : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        this.transform.RotateAround(this.transform.position, Vector3.up, 2);
    }
}

自转相对简单,由于不追求极致完美,这里就没有改动各个星球自转的速度,便默认都为同一速度。

至此,八大行星的基本模拟便已经完成。但还是有许多可以进行优化的。

首先是月球,再次建立一个位于地球旁边的小球体,设置其自转,以及绕地球的公转。

在这里插入图片描述

其次是对于各个星体的美化上色,首先进行查阅,得知体积的排序

在这里插入图片描述

接着对其进行壁纸的张贴

在这里插入图片描述

从网上得到如上的各个星系的贴图。

然后对各个星体的发光情况进行处理

这里尝试了各种类型,觉得unlit/transparent 这种效果最好,便采用之

在这里插入图片描述

二、牧师与魔鬼
·列出游戏中提及的事物(Objects)
魔鬼,牧师,船,河、岸
·用表格列出玩家动作表(规则表),注意,动作越少越好

动作结果
点牧师和魔鬼移动
点船过河

代码见github

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值