【Unity】第一天:Roll-a-ball tutorial
1. ENVIRONMENT AND PLAYER
今天是正式开始学习Unity的第一天,从官网上找了几个视频教程,从第一个学起,滚动小球。
首先新建一个工程,一切按照默认设置,接着新建一个场景,然后就是游戏对象了。小球滚动必须要有一块地板,我新建了一块平面,把他的属性重置一下,比例调整为x/z 2倍,默认平面是白色的,按照视频上,新建一个材质,更改它的颜色,去掉网格,这样小球就有地方站了。接下来,新建一个小球,更改为默认设置,把它上移0.5个位置,这样小球看起来就不会有一半埋在平面里面。
我们的目的是让小球在力的作用下能四处移动,设置小球为刚体,新建一个组件添加脚本,命名为PlayerController。我们的小球是在水平面上移动的,所以我们新建两个float变量moveHorizontal和moveVertical用来存放输入的位置。
float moveHorizontal = Input.GetAxis ("Horizontal"); float moveVertical = Input.GetAxis ("Vertical");
这时候我们要给小球添加一个力,找到AddForce(Vector3) ,Vector3就是来自三维方向的力,初始化一个movement,X,Z就是之前的两个float变量。
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
把AddForce参数变成movement,这时小球就可以移动,但是小球移动的很慢,我们需要给movement一个倍数,
public float speed;
在FixedUpdate中增加
rb.AddForce (movement * speed);
这样就可以在inspector中修改speed来调整速度。
2. CAMERA AND PLAY AREA
好了,小球可以移动了,如果我们想要镜头跟随小球,那怎么做呢。视频上第一次把camera作为小球的子对象,发现小球在运动时,镜头也跟着滚动,这显然不是我们想要的,我们希望camera和小球一样在一个平面内移动的,只需要改变position的位置。我们来新建脚本
private Vector3 offset; public GameObject player; // Use this for initialization void Start () { offset = transform.position - player.transform.position; } // Update is called once per frame void LateUpdate () { transform.position = player.transform.position + offset; }
和之前的speed一样,player也会出现在inspector中,然后把Player拖入即可。
接下来就是新建墙壁,墙壁就是几个cube,但是我的墙壁坐标和视频上不一样,也许是版本原因造成的。
3. COLLECTING, SCORING AND BUILDING THE GAME
我们的初衷是让小球移动并能收集方块,我们需要创建这些小对象,这时候视频用到了prefab,用prefab可以一次修改多个同样的游戏对象的属性。首先创建Pick Ups,一个个小方块,这并不难,但是想让他更酷,我们来让他旋转。给这些小方块新建脚本。
void Update () { transform.Rotate(new Vector3 (15, 30, 45) * Time.deltaTime); }
Time.deltaTime表示以秒计算,完成最后一帧的时间。必须要加,不然就转的太快太眼花了。
那么我们怎么搜集这些小东西呢,我们只需要在Player接触到Pick Ups时候让Pick Ups消失就好了,使用
void OnTriggerEnter(Collider other)
让他们被接触后消失
if (other.gameObject.CompareTag("Pick Up")) { other.gameObject.SetActive(false); }
是不是对CompareTag比较陌生,搜索一下可以看到他是包含在
// Immediate death trigger. //立即死亡触发器 // Destroys any colliders that enter the trigger, if they are tagged player. //如果它们标签是player,进入这个触发器将销毁任何碰撞。 function OnTriggerEnter (other : Collider) { if (other.CompareTag ("Player")) { Destroy (other.gameObject); } }
我们需要设置tag,addtag一下就好了。
接下来设置分数,和胜利时出现的you win!很简单,增加个UI.text,把count存到text中就好了。并且当触发一次时,就让count增加1。
4. Conclusion
第一次写,有点乱,主要就是记下一点主要步骤,深入的事接下来再修改。