自作イラストを使って配管工おじさんをする。
物凄く言葉が足りませんが、自作イラストを使って2D横スクロールの基本動作となる
横移動とジャンプ
これを作っていきたいと思います。
今回使うもの。
スライムの自作イラスト。
(ご自由にお使いください。ただし、著作権の放棄をしているわけでは有りません。例を上げれば、LINEスタンプにしたりとか、犯罪に使うとかをしないでくださいって感じです。)
(ご自由にお使いください。ただし、著作権の放棄をしているわけでは有りません。例を上げれば、LINEスタンプにしたりとか、犯罪に使うとかをしないでくださいって感じです。)
目次
1.動作紹介
2.GameObjectの構成紹介
3.スクリプト紹介(そのままコピー出来る物有り)
以上の様に進めていきたいと思います。
1.動作紹介
動作紹介という名の動画の宣伝だったりしますが、実際こんな感じで動くってのが見て貰えます。
若干、横移動時にカクツキというか地面に引っかかっている様に見えますが、仕様です。
いずれ時間があったら直すかも。(多分直さない)
ぶっちゃけ2Dについては、まだ3つくらいしか作りかけが無いのでほぼ初心者です。
あくまで、今回はスクリプトの紹介程度に思って頂ければ幸いです。
2.GameObjectの構成紹介
まずは、プレイヤー構成の紹介から。
一応取込も紹介しておきますね。
まず、上にあるスライムをAseets内に入れます。
取り込んだ画像を選択し、Texuture TypeをSprite(2D and UI)に変更します。
ステージ内に、Createから2D→Spriteを配置します。
その中のSprite RendererのSpriteで先程取り込んだスライムの画像を選択します。
そして、スライムの大きさに合わせてPhysics2DからCircleCollider2Dを取りつけます。
これがプレイヤーの当たり判定になります。
続いてプレイヤーに重力を付けます。
Physics2DからRigidbody2Dを取り付けます。これに関しては触らなくてもいいかと。
場合によっては弄る事も有りますが、今回はスルーします。
場合によっては弄る事も有りますが、今回はスルーします。
基本的にステージ上で動かすものには、Collider(当たり判定)とRigidbody(重力とか)の二つは大体付けます。
そして最後に、今回ジャンプをするためのスクリプトをプレイヤー付けます。
内容は後述になります。
まずは一番上のTagに「jimen」を作成して付けます。
ぶっちゃけ自分で分かるもので有れば、何でもいいんですけどね。
後でジャンプのスクリプトに使うので、英字で作っていればなんでも良いですよ。
こちらは固定された物になるので、Rigidbody2Dは必要ありません。
今回のスクリプトでは、[OnCollisionEnter]というのを使うのですが、これはTagとColliderが有れば使えます。
※3Dで同じような動作をする場合は少し変わりますが、それはまたいずれ動画とブログで書きます。
3.スクリプトの紹介(一番下にスクリプトを載せています)
そしてこのジャンプ判定スクリプトをプレイヤーに付け、プレイヤーが地面のTag[jimen]に触れた時、先程のスクリプトの変数を0に戻します。
今回のスクリプトは、一度ジャンプしたらという物ですが、二段ジャンプも出来ます。
こんな感じでifの条件をx<=1とすると、xが0と1の場合にジャンプの処理が行われるので、二段ジャンプになります。
といってもそのまま使うと、少し変な動きになりましたが。
出来なくは無いです。
ジャンプ量を変えるには、new Vector(0.0f,7.5f);の7.5の部分を変えたら変わります。
さて、ここまで2D横スクロール用の移動とジャンプを見てきましたが、いかがでしたか?
分からない事が有ればコメントやTwitterの方に連絡して貰えれば、分かる範囲でお答えしたいと思います。
それでは、最後までお読み頂きありがとうございました。
また次のブログもよろしくお願い致します!
スクリプト紹介
Player.cs (OnClickは1回ジャンプ、OnClick2は二段ジャンプ用です。)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class Player : MonoBehaviour {
public static int x;
public GameObject Player1;
void Start () {
}
// Update is called once per frame
public void Update () {
Debug.Log (x);
float h = CrossPlatformInputManager.GetAxis ("Horizontal");
Player1.transform.position += new Vector3 (0.05f * h, 0.0f, 0.0f);
if (h >= 0.1) {
Player1.transform.rotation = Quaternion.Euler (0.0f, 0.0f, 0.0f);
}
if (h <= -0.1) {
Player1.transform.rotation = Quaternion.Euler (0.0f, 180.0f, 0.0f);
}
}
public void OnClick(){
if (x == 0) {
Rigidbody2D rb = Player1.GetComponent<Rigidbody2D> ();
Vector2 force = new Vector2 (0.0f, 7.5f);
rb.AddForce (force, ForceMode2D.Impulse);
x = 1;
}
}
public void OnClick2(){
if (x <= 1) {
Rigidbody2D rb = Player1.GetComponent<Rigidbody2D> ();
Vector2 force = new Vector2 (0.0f, 7.5f);
rb.AddForce (force, ForceMode2D.Impulse);
x += 1;
}
}
}
Jumphantei.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class jumphantei : MonoBehaviour {
public void OnCollisionEnter2D (Collision2D hit){
if (hit.gameObject.tag == "jimen") {
Player.x = 0;
}
}
}
今回のスクリプトでは、[OnCollisionEnter]というのを使うのですが、これはTagとColliderが有れば使えます。
※3Dで同じような動作をする場合は少し変わりますが、それはまたいずれ動画とブログで書きます。
3.スクリプトの紹介(一番下にスクリプトを載せています)
まずはプレイヤー操作スクリプトです。
プレイヤースクリプトは、シーン内に単体のGameObjectとして配置しておきます。
void Update内で左右の入力を読み取り、それに合わせてプレイヤーの左右の移動とプレイヤーの向きを変えています。
new Vector3 (0.05f,0.0f,0.0f);の0.05がx方向の移動量になるので、これを変えれば動くスピードも変わります。
そして下のvoid OnClickはジャンプボタンに設定する内容になってます。
変数が0のときジャンプができ、ジャンプの力がかかった後、1に変更にします。
0に戻す処理はジャンプ判定スクリプトにて行います。
そしてこのジャンプ判定スクリプトをプレイヤーに付け、プレイヤーが地面のTag[jimen]に触れた時、先程のスクリプトの変数を0に戻します。
今回のスクリプトは、一度ジャンプしたらという物ですが、二段ジャンプも出来ます。
こんな感じでifの条件をx<=1とすると、xが0と1の場合にジャンプの処理が行われるので、二段ジャンプになります。
といってもそのまま使うと、少し変な動きになりましたが。
出来なくは無いです。
ジャンプ量を変えるには、new Vector(0.0f,7.5f);の7.5の部分を変えたら変わります。
さて、ここまで2D横スクロール用の移動とジャンプを見てきましたが、いかがでしたか?
分からない事が有ればコメントやTwitterの方に連絡して貰えれば、分かる範囲でお答えしたいと思います。
それでは、最後までお読み頂きありがとうございました。
また次のブログもよろしくお願い致します!
スクリプト紹介
Player.cs (OnClickは1回ジャンプ、OnClick2は二段ジャンプ用です。)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class Player : MonoBehaviour {
public static int x;
public GameObject Player1;
void Start () {
}
// Update is called once per frame
public void Update () {
Debug.Log (x);
float h = CrossPlatformInputManager.GetAxis ("Horizontal");
Player1.transform.position += new Vector3 (0.05f * h, 0.0f, 0.0f);
if (h >= 0.1) {
Player1.transform.rotation = Quaternion.Euler (0.0f, 0.0f, 0.0f);
}
if (h <= -0.1) {
Player1.transform.rotation = Quaternion.Euler (0.0f, 180.0f, 0.0f);
}
}
public void OnClick(){
if (x == 0) {
Rigidbody2D rb = Player1.GetComponent<Rigidbody2D> ();
Vector2 force = new Vector2 (0.0f, 7.5f);
rb.AddForce (force, ForceMode2D.Impulse);
x = 1;
}
}
public void OnClick2(){
if (x <= 1) {
Rigidbody2D rb = Player1.GetComponent<Rigidbody2D> ();
Vector2 force = new Vector2 (0.0f, 7.5f);
rb.AddForce (force, ForceMode2D.Impulse);
x += 1;
}
}
}
Jumphantei.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class jumphantei : MonoBehaviour {
public void OnCollisionEnter2D (Collision2D hit){
if (hit.gameObject.tag == "jimen") {
Player.x = 0;
}
}
}
0 件のコメント:
コメントを投稿