1.简答并用程序验证
(1) 游戏对象运动的本质是什么
游戏对象运动的本质是坐标的变换
(2)请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
- 可以直接对物体的position属性进行修改
private void Update()
{
this.transform.position += Vector3.right * Time.deltaTime * 6f;
this.transform.position += Vector3.up * Time.deltaTime * 8f;
}
- 也可以利用lerp方法进行操作
Vector3 Target = new Vector3(6,4,2);
void Update()
{
gameObject.transform.localPosition = Vector3.Lerp(transform.position, Target,Time.deltaTime);
}
这两种方法如果在不加重力的情况下,物体都是一直像斜上方运动的,要想让物体做先向上再向下的抛物线运动,则需要添加重力,当然参数不太好调,比较容易出现物体刚向上走一点就下落的情况
第三种方法是我在网上看到的一种很"高大上"的方法
public GameObject target;
public float speed = 10;
private float distanceToTarget;
private bool move = true;
void Start()
{
distanceToTarget = Vector3.Distance(this.transform.position, target.transform.position);
StartCoroutine(Shoot());
}
IEnumerator Shoot()
{
while (move)
{
Vector3 targetPos = target.transform.position;
this.transform.LookAt(targetPos);
float angle = Mathf.Min(1, Vector3.Distance(this.transform.position, targetPos) / distanceToTarget) * 45;
this.transform.rotation = this.transform.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0);
float currentDist = Vector3.Distance(this.transform.position, target.transform.position);
if (currentDist < 0.5f)
{
move = false;
}
this.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
yield return null;
}
}
这种方法大体思路是根据距离衰减以及旋转对应的角度(对角度的操作还用到了线性插值),然后向目标点进行移动,当然这里用到了许多比较复杂的数学知识
写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上
这里的太阳系只取其中的太阳以及八大行星(金星,水星,土星,木星,地球,天王星,海王星)
在这里把太阳当作父对象,其他八大行星作为太阳的子对象
当然,每个行星都要自转,其他八大行星绕太阳公转
自转
void Update()
{
this.transform.RotateAround(this.transform.position, Vector3.up, 2);
}
公转的话,因为要求转速不一样,所以通过取随机数来实现这一点
public Transform sun;
private float random_x, random_y;
private void Start()
{
random_x = Random.Range(1, 10);
random_y = Random.Range(10, 60);
}
void Update()
{
Vector3 axis = new Vector3(random_x, random_y, 0);
this.transform.RotateAround(sun.position, axis, 15 * Time.deltaTime);
}
2.编程实践
这次要做的游戏叫牧师与魔鬼
游戏简介如下:
牧师和魔鬼是一个益智游戏,在这个游戏中,你将帮助牧师和魔鬼在时间限制内过河。河的一边有3个牧师和3个魔鬼。他们都想到达这条河的对岸,但只有一条船,这条船每次只能载两个人。必须有一个人操纵船从一边到另一边。在Flash游戏中,你可以点击它们移动它们,然后点击“前进”按钮将船移到另一个方向。如果牧师在河的两边被魔鬼数数,他们就会被杀,游戏结束。你可以用多种方式尝试。让所有的牧师都活着
在这里需要把物体做成预制,然后在代码中将它们实例化
动作表
点击鼠标左键 | 牧师/魔鬼上船或者下船 |
---|---|
点击Go按钮 | 船出发 |