1.1.游戏对象运动的本质是什么?
游戏对象运动的本质是游戏对象坐标位置,方向的变换。
1.2.三种方法实现物体的抛物线运动
实现基本抛物线的原理为:
水平方向上\(x=v_{0}t\)
竖直方向上\(y=at^{2}\)
1.2.1.用Position实现
实现的代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveOne : MonoBehaviour {
private float speed = 0.25f;
private float acceleration = 0.20f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
this.transform.position += Vector3.right * speed * Time.time;
this.transform.position += Vector3.up * acceleration * Time.time * Time.time;
}
}
效果图如下所示:
1.2.2.用Translate实现
实现代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveOne : MonoBehaviour {
private float speed = 0.25f;
private float acceleration = 0.20f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Translate (transform.right * speed * Time.fixedTime, Space.World);
transform.Translate (transform.up * acceleration * Time.fixedTime * Time.fixedTime, Space.World);
}
}
该代码的效果和1.2.1的效果图是一样的,只是实现的方法不一样。
1.2.3.用Vector3.Moveforward实现
首先创建两个对象,Target1和Target2,两个对象的位置放置在很远的地方,然后让物体朝着两个目标个体移动,即可得到抛物线的运动轨迹。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveOne : MonoBehaviour {
private float speed = 2.0f;
public Transform target1;
public Transform target2;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.position = Vector3.MoveTowards (transform.position, target1.position, Time.time);
transform.position = Vector3.MoveTowards (transform.position, target2.position, speed * Time.time * Time.time);
}
}
该代码的实现效果和1.2.1的效果一样
1.3.实现一个完整的太阳系
第三个步骤是通过实现一个太阳系来熟悉游戏对象运动的操作
首先我们先制作好样式,就是八大行星的壁纸贴图等等,相关的素材可以在网上找到,直接将其贴到相应创造出来的球体即可以
然后我们开始写公转和自转的脚本,因为八大行星都是绕太阳公转,而月球是绕地球公转的,所有八大行星都以太阳为中心点旋转,而月球则以地球为中心点旋转。
实现公转的代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Revolution : MonoBehaviour {
public Transform point;
public float speed;
private float ry,rz;
void Start () {
ry = Random.Range (0, 360);
rz = Random.Range (0, 360);
}
void Update () {
Vector3 axis = new Vector3(0,ry,rz);
this.transform.RotateAround(point.position,axis,speed * Time.deltaTime);
}
}
为了保证各大行星绕地球公转不在同一个法平面内,在开始程序的时候应该要随机产生一个向量,使得该行星能够绕这个轴公转
解决了公转的问题后,就要解决行星的自转问题了,行星的自转的脚本代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotation : MonoBehaviour {
private float speed = 0.5f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
this.transform.RotateAround (this.transform.position, Vector3.up, speed);
}
}
之后我们就基本能够制作出太阳系的轮廓了,为了能够增加效果,我们给行星运动的时候加上一些轨迹
Add Component => Trail Renderer
在这个框内调好Element 0的样式,Width宽度,Color颜色后就能够在行星运动的时候显示轨迹了
完成这步以后我们要给这个空间加上一个背景,加上背景的话,我们可以先创造一个立方体,然后把立方体的样式设置为我们的背景图案,然后把它的y和z属性设置得很大,而x属性设置得比较小,就能创造出一个背景来了
然后我们就能得到大致的效果图
2.牧师与恶魔
游戏中提及的事物:牧师,恶魔,船,河流
游戏的规则表如下所示: