1 爲角色添加代碼控制
爲Player添加一個New Script(我名命爲了PlayerController),就會發現在Assets文件夾下多出了一個C#文件。在Assets下面新建一個Script文件夾方便管理,並把C#文件放入到文件夾裏。
2 查看代碼控制涉及到input設置
控制角色暫時只涉及到左右移動和跳躍,需要先知道玩家是怎麼輸入,我們需要調用那些參數。
Edit->Project Settings->Input,然後看見我們要調用的參數Horizontal(水平的)和Jump(跳躍),以及它們的控制按鍵。
3 編寫控制角色代碼:左右移動 跳躍
爲一開始建立的C#文件進行代碼編寫,關於裏面deltaTime和update的選擇,文章最後會做解釋。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
//左右移動,跳躍
public float moveSpeed;//移動速度
public float jumpForce;//跳躍力
public Rigidbody2D rig;//剛體
// Use this for initialization
//初始化
void Start () {
rig = GetComponent<Rigidbody2D>();//獲取主角剛體組件
jumpForce = 575f;
moveSpeed = 500f;
}
//每帖調用一次更新
/*void Update () {
Move();
}*/
//固定的時間間隔執行,不受遊戲幀率的影響
void FixedUpdate()
{
Move();
}
//控制移動
void Move()
{
//當按下你設置的建則返回一個有加速度的值,從1或者-1 過渡到0
//得到正數對應正半軸,負數對應負半軸的方向
float moveMultiple = Input.GetAxis("Horizontal");
//當按下你設置好的鍵盤就會返回1和-1這兩個值
float faceDirection = Input.GetAxisRaw("Horizontal");
//角色左右移動
if (moveMultiple!=0)
{
//velocity表示速度,Vector表示向量
rig.velocity = new Vector2(moveMultiple * moveSpeed * Time.deltaTime, rig.velocity.y);//輸入x,y向量,數值*方向
}
//角色朝向修改
if(faceDirection!=0)
{
//Scale,代表縮放,Localscale代表的是當前物體相對於父物體的縮放,通過正負不修改大小來實現左右朝向修改
transform.localScale = new Vector2(faceDirection, 1);
}
//角色跳躍
if (Input.GetButtonDown("Jump"))
{
rig.velocity = new Vector2(rig.velocity.x, jumpForce * Time.deltaTime);
}
}
}
4 攝像機跟隨
按照和角色一樣的方法,爲Main Camera添加Script並編寫代碼。
讓攝像機的位置橫縱更新和角色同步就可以了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour {
public Transform player;//角色
// Use this for initialization
void Start () {
player = GameObject.Find("Player").GetComponent<Transform>();//獲取角色
}
// Update is called once per frame
void Update () {
transform.position = new Vector3(player.position.x, player.position.y, transform.position.z);
}
}
獲取GameObject還可以通過unity拖拽,設置爲public的變量可以在unity中可見,例如上面的player,然後直接拖拽。
5 三種update介紹
上面的代碼中,我捨棄的了原本的Update函數,使用了FixedUpdate,介紹一下三種update大概就可以知道我爲什麼選擇FixedUpdate。
Update:每一帖調用一次,跟機器的性能有關係,有的性能好的機器帖率高,有的低導致在不同機器上效果不同。
FixedUpdate:固定時間間隔執行一次,一般默認0.02秒執行一次,一秒五十次,默認帖數50帖。可以在Edit->ProjectSetting->time 找到Fixedtimestep修改默認時間間隔。比較適合在物理邏輯和外設操作的處理中使用,GameObject的物理表現的更平滑,更接近現實。
LateUpdate:在所有Update函數調用後被調用,使用例子:角色移動,攝像機後跟隨。
6 增量時間(deltaTime)介紹
Time.deltaTime是每幀運行的時間,假設Update是每秒執行N次,幀數爲N,則Time.deltaTime = 1/N。這樣我們需要每秒移動10米,保證了在不同性能的電腦裏面的移動效果都是1秒10米。如果是每一帖移動1米,那麼有些電腦的性能好,他一秒可以移動60米,有的電腦差一秒只能移動10米,保證了在在不同電腦上運行的效果一致。