Roll-A-Ball

参考文章:
http://www.jianshu.com/p/6e4b0435e30e


Roll-A-Ball_第1张图片
unity

Update,FixedUpdate,LateUpdate的区别

  • 处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)。 Update跟当前平台的帧数有关,而FixedUpdate是真实时间,所以处理物理逻辑的时候要把代码放在FixedUpdate而不是Update。Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体(可以认为是三角形的数量)。在性能好的机器上可能fps 30,差的可能小些。这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。因为Update的执行间隔不一样了。
  • LateUpdate是在所有Update函数调用后被调用。这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。

编写脚本

  • Player为玩家,设置为刚体RigidBody,为其编写的脚本如下:
//PlayerController.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

    public float speed;        //球的速度
   //public Text countText;  
   // private int count;


    // Use this for initialization
    void Start () {
        count = 0;
    }
    
    // Update is called once per frame
    void Update () {
        //Debug.Log("123456");
    }


    void setCountText()
    {
        countText.text = "Count : "+count;
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float movevertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, movevertical);
        GetComponent().AddForce(movement * speed * Time.deltaTime);
        setCountText();
    }
    
    //碰撞时触发,传参其他碰撞体
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "PickUp")
        {
            other.gameObject.SetActive(false);
            //count++;
        }
    }
}
  • Main Camera玩家视角,为其编写脚本,与Player球体同步,如下:
//CameraController.cs
using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {

    public GameObject player;
    private Vector3 offset;

    // Use this for initialization
    void Start () {
        offset = transform.position;   //得到初始时相机对于球体的偏移量
    }
    
    void LateUpdate()
    {
        transform.position = player.transform.position + offset;//球体位置加初始偏移量,相对位置不变
    }
 }
  • PickUp方块为物体,即当玩家球体与其相碰时显示,设置其自动旋转,脚本如下:
    还需要将PickUp的BoxCollider中的 is Trigger勾选,否则不会触发OnTriggerEnter方法。
//Rotator.cs
using UnityEngine;
using System.Collections;
public class Rotator : MonoBehaviour {
    // Use this for initialization
    void Start () {
    
    }
    // Update is called once per frame
    void Update () {   
        transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);
    }
}
  • 发布游戏,可以发布到多平台。

你可能感兴趣的:(Roll-A-Ball)