序文
実際、Unity でゲームを作るのはそれほど難しいことではありません。学びたいのであれば、簡単なパルクール ゲームを作ることに興味を持つことをお勧めします。最初はUnityを学ぶ自信ややる気を失ってしまうので、まずは簡単なパルクールマップの作り方を学んでからUnityがいかに簡単かを知り、学習意欲も湧いてきますし、このように簡単にもなりますコードの書き方を覚えておくためです。
ポジティブ
材料を準備する
Unity(どのバージョンでも可)
パソコン(耐えられるものであれば)
まずプロジェクトを作成します。名前は自由です。「Simple Parkour Game」
という名前にします。今回はシンプルなパルクール ゲームを作りたいと思います。あとは実装するだけです。
主人公が動き、カメラが追いかけ、パルクールの場は自分で構築するこれらの最も重要な機能は、
プロジェクトを開き、左側の階層バーにキューブを作成します。
右クリック→3Dオブジェクト→立方体
好きな名前を付けることができますが、私は直接chushen_dot
という名前を付け、さらにいくつかの名前を付けました。キューブother_dot_numberという名前名前を付けるときは必ず英語を使用し、中国語は使用しないでください。そうしないと、エラーが報告されます。
ここで作成しました5その後、別のCube を作成し、zhong_dot
という名前を付けます。このブロックはエンドブロックとして使用されます
最後に、Cube を作成し、playerという名前を付けます。このブロックはプレーヤー ブロックとして使用されます
シーンの構築
自分の好みに従ってパルクール シーンを構築するか、私のように行うこともできます。
ブロックの色は、実際に作成するマテリアルの数によって異なります。
右クリック→ 「作成」→ 「マテリアル」
次に、自分の好みに応じて色を処理し、最後にこれらのマテリアルをシーン内の対応する四角形にドラッグします。
ここでのカメラは、三人称視点でplayerという名前のブロックに面している必要があることに注意してください。そうでない場合、コードが書き込まれ、実行中のエフェクトが実際の結果と一致します。
これを実現するには、移動ツールと回転ツールを使用できます。
ブロックに属性を割り当てる
player という名前のブロックは物理的に重力を持たせる必要があるため自然衰退属性があるので、自然に落ちるように Rigidbody コンポーネントを追加します。
検査官列を一番下にスライドさせます -> コンポーネントを追加 -> Rigidbodyを検索 - > Rigidbody を選択します。プレイヤーキューブRigidbody コンポーネントを追加しました
コードを書く
存在する資産フォルダー内にCamera_move.csとPlayer_move.csという名前のC#コード ファイルを作成します。
まずCarmera_move.csのコード ファイルを開きます
。ファイル名からわかるように、このコード ファイルには、ファイルに従うカメラのコードが含まれています。
public GameObject Target; //用来接收跟随摄像头跟随的方块
public float s = 2f; //速度
Vector3 distance; //用来处理坐标之类的数据
**void Start(){}** 関数に次のように記述します
distance = transform.position - Target.transform.position;
プレーヤー ブロックに対するカメラの位置を処理するために使用されます
。次に、元のブロックを削除します。
void Update(){
}
への変更
void LateUpdate(){
}
それに加えてください
transform.position = Vector3.Lerp(Target.transform.position + distance, transform.position, Time.deltaTime * s); //此代码可以计算出摄像机在移动时保证撒丝滑坐标
transform.LookAt(Target.transform.position); //摄像头面对玩家
LateUpdate 関数は、すべての Update 関数が実行された後に呼び出され、通常、カメラの次のロジックを処理するために使用されます。カメラの追従動作はゲームオブジェクトが移動した後に実行する必要があるため、LateUpdate 関数にカメラの追従ロジックを配置することで、カメラが常にゲームオブジェクトを追従できるようにすることができます。
すべてのコードを要約すると次のようになります
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Camera_move : MonoBehaviour
{
public GameObject Target;
public float s = 2f;
Vector3 distance;
// Start is called before the first frame update
void Start()
{
distance = transform.position - Target.transform.position;
}
// Update is called once per frame
void LateUpdate()
{
transform.position = Vector3.Lerp(Target.transform.position + distance, transform.position, Time.deltaTime * s);
transform.LookAt(Target.transform.position);
}
}
保存してコードを閉じ、Unityに戻ってコンパイルします。
書き込みを続けましょう。次に、 Player_move.cs
を開きます。
public float moveSpeed = 10f; //移动速度
public float turnSpeed = 100f; //旋转速度
public float jumpSpeed = 10f; //跳跃速度
消去
void Start(){
}
存在する
void Update(){
}
内側に追加
if (Input.GetKey(KeyCode.W)) //判断按下的按键是否是W
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S)) //判断按下的按键是否是S
{
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))//判断按下的按键是否是A
{
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))//判断按下的按键是否是D
{
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.Space))//判断按下的按键是否是空格
{
transform.Translate(Vector3.up * jumpSpeed * Time.deltaTime);
}
保存して Unity に戻り、プログラムを実行すると、次のことがわかります。
成功
結論
この記事では簡単なパルクール ゲームの作り方を紹介しましたが、この時点で誰かが尋ねるでしょう。
A: なぜゲームが終了しないのですか?
回答: 実は、導入したくないわけではなく、コードの書き方が本当に分からないだけなので、ゲームを終了させませんでした。
衝突してゲームを終了する方法を知っている人がいたら、コメント欄で教えてください。一緒に学びましょう!