ここから本文です

下記のサイトを参考にUnityのアクションゲームを作っています。

tom********さん

2018/2/2200:50:02

下記のサイトを参考にUnityのアクションゲームを作っています。

http://hiyotama.hatenablog.com/entry/2015/06/18/090000
『ゲームオブジェクトは、1つのレイヤーにしかできません。
レイヤーは、範囲内にある必要があります [0... 31]』...と
ダメージ判定の処理で上記のようなエラーが発生します。
どこで間違えているのでしょうか?
誰か教えてください。

以下、スクリプト(C#)です。かなり長いですすみません。
______________________________________
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
//Playerの能力値
public float speed;
public float jumppower;
public LayerMask groundlayer;
//弾の設定
public GameObject bullet;
public Rigidbody2D rigidbody2d;
private Animator animator;
//着地判定
private bool isGrounded;
//他スクリプトを参照
public Major major;
public Life life;
//
GameObject MainCamera;
public bool able = true;
// Use this for initialization
void Start () {
animator = GetComponent<Animator> ();
MainCamera = GameObject.Find ("Main Camera");
}

// Update is called once per frame
void Update () {
//LinecastでPlayerの足元に地面があるか確認
isGrounded = Physics2D.Linecast (transform.position + transform.up * 1, transform.position - transform.up * 0.05f, groundlayer);

if (able) {
//着地しているときならジャンプ可能
if (Input.GetKeyDown (KeyCode.X)) {
if (isGrounded) {
animator.SetBool ("Dash", false);
animator.SetTrigger ("Jump");
isGrounded = false;
rigidbody2d.AddForce (Vector2.up * jumppower);
}
}
}
//上下への移動速度を取得
float Y = rigidbody2d.velocity.y;
//移動速度が大きければ上昇
bool isJumping = Y > 0.1f ? true:false;
//移動速度が小さければ下降
bool isFalling = Y < -0.1f ? true:false;
//結果をAnimatorに反映
animator.SetBool("isJumping",isJumping);
animator.SetBool("isFalling",isFalling);

if (able) {
//弾を撃つ設定
if (Input.GetKeyDown (KeyCode.Space)) {
animator.SetTrigger ("Shot");
Instantiate (bullet, transform.position + new Vector3 (0f, 0.8f, 0f), transform.rotation);
}
//設定した境界よりplayer.yがしたならゲームオーバー
if (gameObject.transform.position.y < MainCamera.transform.position.y - 8) {
life.GameOver ();
}
}
}

// Update is called once per frame
void FixedUpdate () {
if (able) {
//移動の数値
float X = Input.GetAxis ("Horizontal");
//キャラの向きを変える
if (X > 0) {
// 移動する向きを決定する
transform.eulerAngles = new Vector2 (0, 0);
// 移動する向きとスピードを代入する
///このコードで初めて移動する
GetComponent<Rigidbody2D> ().velocity = new Vector2 (X * speed, rigidbody2d.velocity.y);
animator.SetBool ("Dash", true);
} else if (X < 0) {
// 移動する向きを決定する
transform.eulerAngles = new Vector2 (0, 180);
// 移動する向きとスピードを代入する
///このコードで初めて移動する
GetComponent<Rigidbody2D> ().velocity = new Vector2 (X * speed, rigidbody2d.velocity.y);
animator.SetBool ("Dash", true);
} else {
animator.SetBool ("Dash", false);
}
}
}

//Put into motion stay in
void OnCollisionEnter2D(Collision2D collision2d){
//Enemyとぶつかった時にコルーチン発動
if (collision2d.gameObject.tag == "Enemy") {
Debug.Log ("Touch");
StartCoroutine ("Damage");
}
}

//Carry on this as the lead
void OnTriggerStay2D(Collider2D collider2d){
if (collider2d.tag == "Finish") {
if (Input.GetKeyDown (KeyCode.Z)) {
Debug.Log ("Check2");
major.Delete ();
}
}
}

IEnumerator Damage(){
//LayerをPlayerDamageに変更
gameObject.layer = LayerMask.NameToLayer ("PlayerDamage");
//
int count = 10;
while (count > 0) {
//透明にする
GetComponent<Renderer> ().material.color = new Color (1,1,1,0);
//0.05秒待つ
yield return new WaitForSeconds(0.05f);
//元に戻す
GetComponent<Renderer> ().material.color = new Color (1,1,1,1);
//0.05秒待つ
yield return new WaitForSeconds(0.05f);
count--;
}
//LayerをPlayerに戻す
gameObject.layer = LayerMask.NameToLayer ("Player");
}

}

閲覧数:
50
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

dea********さん

2018/2/2214:38:18

gameObject.layer = LayerMask.NameToLayer ("PlayerDamage");
gameObject.layer = LayerMask.NameToLayer ("Player");

恐らくこのどちらかですね。
Unity上部メニューのEdit > Project Settings > Tags & Layars
のLayersを開いて「PlayerDamage」と「Player」が存在しているか確認してください。
(無かったら追加してください)

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/2/23 21:40:49

よく見たら、「Player Damage」が「Playerdamage」になっていました。
見落としていたみたいです。

回答ありがとうございます!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる