一、简答题
-
游戏运动的本质
本质是游戏对象跟随时间与空间的变化。一般可以分为position和rotation(位置和角度)的变化。
-
实现抛物线运动
(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