(1.ここで書かれただけでなく、移動する移動カメラシステムの動きがないキャラクタを含まない2. 3.パート私は非常に類似し、このモバイルビデオシステムブラックライトを刻印ステーションB「フー先生」魂です)
数字は、第1の入力及び出力モジュールを行い##
ゲーム内のキャラクタのために、それは実際に特定の方向の移動に対して一定方向の位置又は速度に向かって移動しています。
だから、どのようにこの方向に来ている、プレーヤーのために、それを操縦するあなたのキーで設定されています。
public string keyUp = "w";
public string keyDown = "s";
public string keyLeft = "a";
public string keyRight = "d";
私たちは、ゲームキーの方向に良いスタートを設定する必要があるので、その後、キーを取得した後、私たちは、キー信号が方向を表すために、値に押し込まれるようにする必要があります。次のようにそのため、我々は最初の2つのfloatの変数を定義します。
public float Dup;
public float Dright;
DUPは、正面の正方向(最大)の値であり、Drightが正の値(右方向)に対して右方向であり、我々は、更新機能でこれらの二つの変数の対応する値を与えます。
void Update()
{
Dup = (Input.GetKey(keyUp) ? 1.0f : 0) - (Input.GetKey(keyDown) ? 1.0f : 0);
Dright = (Input.GetKey(keyRight) ? 1.0f : 0) - (Input.GetKey(keyLeft) ? 1.0f : 0);
}
あなたが良いを設定するとこのように、ビットキーはゲームに押され、DUPとDrightが、その後、変更に-1または1一つのことを考えて、この値を見ることができます、それは簡単です-座標系。
はい、DUPとDright今提示した値は、私たちは、x軸にプレーヤーのための正しい方向座標系をy軸方向にプレイヤーの顔にプレイヤー座標の原点を構築できるようにすることができ、その後、私たちのアイデアが出てきました:キー信号がポイント座標系、座標系に変換されて入力するプレイヤーは、我々はすべてのことは、我々はプレイヤーが望んでいる方向を得ることができ、方向性を示すことができます知っているポイントです。
そして、この方向を取得した後座標系を、私たちは、このポイント前方に向けてゲーム内の文字を聞かせて、座標系のポイントを得ることができる場合、あなたはまだ移動することはできません、考えなければなりません!
はい、このように、私たちは役割を解決することができ、同時に二つの問題に向かって移動します。
しかし、今、私たちは今、DUPとDright値は変異の過程にあり、1または-1、我々は座標系の中で最もポイントを得るためだけ8、私たちの役割であることを抜け穴がありますステアリングと前方我々は値DUPとDrightに必要なので、私たちが望むものは明らかにされていない、特に重要になりますが、徐々に増加/減少になることができ、その後、ここでは「SmoothDamp」方式を導入する必要があります。
private float targetDup;
private float targetDright;
private float velocityDup;
private float velocityDright;
値の4組の、それぞれ、正面方向、目標値、順方向動作時に使用されるメモリ空間、右方向への操作メモリ空間の右方向を目標値を定義しました。
その後、私達はちょうど私たちが何をしたい、彼らは究極の目標なので、この変異値がtargetDupとtargetDrightそれ割り当てられている変異DUPとDright、コードを変更する必要はありません。
targetDup = (Input.GetKey(keyUp) ? 1.0f : 0) - (Input.GetKey(keyDown) ? 1.0f : 0);
targetDright = (Input.GetKey(keyRight) ? 1.0f : 0) - (Input.GetKey(keyLeft) ? 1.0f : 0);
DUPとDright私たちが扱う時:
Dup = Mathf.SmoothDamp(Dup, targetDup, ref velocityDup, 1.0f);
Dright = Mathf.SmoothDamp(Dright, targetDright, ref velocityDright, 1.0f);
SmoothDamp方法の4つのパラメータを使用して、それを説明する、最初のパラメータは、二番目のパラメータの値を調整することであるREFの第三の、最終的な目標(進行として理解現在速度)を調整します値はそれが(SmoothDamp方法もフロート変数に使用されている)ことができ、引数の同じタイプであることを確認し、我々は特定の知識を持っていない、パラメータが渡さ所有することになり、その操作でメモリ空間で、4番目のパラメータが全体の変化であります時間経過を使用しました。
これは、ゲームを実行した後(我々は我々の期待を満たし、入力およびDrightがアップ緩和を開始するキー信号の値としてDUPを見つけることができるようになります、と私たちは私たちに必要な結果を得るためにSmoothDamp最後の時間パラメータ法を調整することができます私が使用して終了)0.1Fました。
このように、入力および出力モジュールが完了している、我々は、モーションコントローラを書き始めることができます。(ここにコードを添付)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInput : MonoBehaviour
{
[Header("===== Key settings =====")]
public string keyUp = "w";
public string keyDown = "s";
public string keyLeft = "a";
public string keyRight = "d";
[Header("===== Output signals =====")]
public float Dup;
public float Dright;
[Header("===== Others =====")]
public bool inputEnabled = true;
private float targetDup;
private float targetDright;
private float velocityDup;
private float velocityDright;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
targetDup = ((Input.GetKey(keyUp) ? 1.0f : 0) - (Input.GetKey(keyDown) ? 1.0f : 0));
targetDright = (Input.GetKey(keyRight) ? 1.0f : 0) - (Input.GetKey(keyLeft) ? 1.0f : 0);
if (inputEnabled == false)
{
targetDup = 0;
targetDright = 0;
}
Dup = Mathf.SmoothDamp(Dup, targetDup, ref velocityDup, 0.1f);
Dright = Mathf.SmoothDamp(Dright, targetDright, ref velocityDright, 0.1f);
}
}
モバイルスイッチングシステムを補完####
あなたがプレーヤーを禁止して、移動したい場合は、一般的には、スクリプトのsetActiveオフに直接移動することですが、これは価値のスクリプト入力モジュールはまだ変更することができるので、その混沌の値を引き起こす可能性がリニューアルオープンケースです我々はshutdownメソッドを修正する必要がありますので、することはtargetDupとtargetDrightが、このソフトスイッチングをクリア使用することです:
public bool inputEnabled = true;
bool値が定義されている可動スイッチは、2つの方法があります。
一つはtargetDupとtargetDright式を変更することです:
targetDup = ((Input.GetKey(keyUp) ? 1.0f : 0) - (Input.GetKey(keyDown) ? 1.0f : 0)) * (inputEnabled ? 1.0f : 0);
targetDright = (Input.GetKey(keyRight) ? 1.0f : 0) - (Input.GetKey(keyLeft) ? 1.0f : 0)* (inputEnabled ? 1.0f : 0);
あなたはこの式が複雑すぎ式を考える場合、それらの値に変更すると、それはまた、直接使用することができます。
if (inputEnabled == false)
{
targetDup = 0;
targetDright = 0;
}