Unity3D课程学习笔记(二)

 

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.牧师与恶魔

游戏中提及的事物:牧师,恶魔,船,河流

游戏的规则表如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值