游戏对象运动的本质是什么?
游戏对象运动的本质是游戏对象Position、Rotate、Scale属性数值的变化
请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法...)
- 使用Vector3
public int xSpeed = 1;
public int ySpeed = 1;
public int T = 1;
void Update()
{
transform.position += Vector3.right * Time.deltaTime * xSpeed;
transform.position += Vector3.down * Time.deltaTime * ySpeed * Time.deltaTime * T;
T++;
}
-
使用Transform.Translate
和方法1比较类似
public int xSpeed = 1; public int ySpeed = 1; public int T = 1; void Update() { transform.Translate(Vector3.right * Time.deltaTime * xSpeed + Vector3.down * Time.deltaTime * ySpeed * Time.deltaTime * T); T++; }
-
直接修改transform
利用x方向和y方向变化值的关系
public int speed = 2; void Update() { transform.position += new Vector3(Time.deltaTime * speed, -Time.deltaTime * speed * (2 * transform.position.x + Time.deltaTime * speed), 0); }
写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。
公转代码:
public GameObject center;
public int speed;
public int xAngle;
public int yAngle;
// Start is called before the first frame update
void Start()
{
speed = (int)Random.Range(20, 80);
xAngle = (int)Random.Range(0, 20);
yAngle = (int)Random.Range(0, 20);
}
// Update is called once per frame
void Update()
{
Vector3 angle = Vector3.up * xAngle + Vector3.forward * yAngle;
transform.RotateAround(center.transform.position, angle, speed * Time.deltaTime);
}
自转代码:
public class RotationSelf : MonoBehaviour {
public float speed = 2; //自转速度
// Update is called once per frame
void Update () {
this.transform.RotateAround(this.transform.position, Vector3.up, speed);
}
}
demo:
2、编程实践
列出游戏中提及的事物(Objects)
牧师(Priest)、恶魔(Devil)、河岸(Side)、河流(River)、船(Boat)-
用表格列出玩家动作表(规则表),注意,动作越少越好
玩家动作 游戏状态 结果 点击牧师/恶魔 牧师/恶魔在船上 牧师/恶魔移动到船处在的岸上 点击牧师/恶魔 牧师/恶魔在岸上,船在这一侧的岸边且船上有空位 牧师/恶魔上船 点击船 船上有人 船移动到对岸 任意一岸的恶魔大于牧师且牧师数量不为0 游戏失败 右侧岸上有三个牧师 游戏胜利
代码仓库与演示视频:
https://gitee.com/lin-fengyang/3-d-game-programming-code.git