【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

第一次写,有点乱,主要就是记下一点主要步骤,深入的事接下来再修改。

posted @ 2015-08-11 10:01  小贤贤  阅读(355)  评论(0编辑  收藏  举报