シューテングゲームを作っています。playereがenemymissileを受けた時に、点滅する処理・後退する処理をつけようとしていますが、 「静的でないフィールド、メソッド、またはプロパティ 'OnDamage.damageMove()' で、オブジェクト参照が必要です」
というメッセージが出てきており、困っています。アドバイスをいただけると嬉しいです。
***以下playerにつけているスクリプト****
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerManager : MonoBehaviour
{
public Transform firePoint;
public GameObject bulletPrefab;
AudioSource audioSource;
public AudioClip shotSE;
public FixedJoystick joystick;
public int score; public void Start() { audioSource = GetComponent<AudioSource>(); }
public void Update()
{
Move(); }
public void Move()
{
float x = joystick.Horizontal;
float y = joystick.Vertical;
Vector3 nextPosition = transform.position + new Vector3(x, y, 0) * Time.deltaTime * 4f;
//x( 2.3 -2.3)y( 4 -4)
nextPosition = new Vector3(
Mathf.Clamp(nextPosition.x,-2.3f,2.3f),
Mathf.Clamp(nextPosition.y, -4f, 4f),
nextPosition.z
) ; transform.position = nextPosition; } public void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("EnemyMissile") == true) { gameObject.SendMessage("onDamage"); **__ OnDamage.damageMove();__**⇦ここにエラー文が出ます } }
}
****以下ダメージ内容を書いたスクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OnDamage : MonoBehaviour
{
public bool on_damage = false; //ダメージフラグ
private SpriteRenderer renderer;
// Start is called before the first frame update void Start() { //点滅処理の為に呼び出しておく renderer = gameObject.GetComponent<SpriteRenderer>(); } // Update is called once per frame void Update() { if (on_damage) { float level = Mathf.Abs(Mathf.Sin(Time.time * 10)); renderer.color = new Color(1f, 1f, 1f, level); } } // ダメージを受けた際の動き public void damageMove() { // ダメージフラグON on_damage = true; // プレイヤーの位置を後ろに飛ばす float s = 100f * Time.deltaTime; transform.Translate(Vector3.up * s); // プレイヤーのlocalScaleでどちらを向いているのかを判定 if (transform.localScale.x >= 0) { transform.Translate(Vector3.left * s); } else { transform.Translate(Vector3.right * s); } // コルーチン開始 StartCoroutine("WaitForIt"); } IEnumerator WaitForIt() { // 1秒間処理を止める yield return new WaitForSeconds(1); // 1秒後ダメージフラグをfalseにして点滅を戻す on_damage = false; renderer.color = new Color(1f, 1f, 1f, 1f); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。