前提・実現したいこと
unityでオブジェクトと衝突したらplayerをdestroyして、再度instatiateのですが、うまくいきません。
うまく別のスクリプトの関数を呼び出したいです。
発生している問題・エラーメッセージ
エラーメッセージ
Assets\Scripts\GameController.cs(15,21): error CS0120: An object reference is required for the non-static field, method, or property 'GameController.player'
該当のソースコード
C#
ソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { Rigidbody rb; public float speed; public float jumpspeed; private int jumpcount; void Start() { rb = GetComponent<Rigidbody>(); jumpcount = 0; } void Update() { float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(x, 0, z) * speed; rb.AddForce(movement); if(Input.GetKeyDown(KeyCode.Space) && jumpcount < 2) { jump(); } } void jump() { rb.velocity = Vector3.zero; rb.AddForce(Vector3.up * jumpspeed, ForceMode.Impulse); jumpcount++; } private void OnCollisionEnter(Collision collision) { if(collision.gameObject.CompareTag("Floor")) { jumpcount = 0; } if(collision.gameObject.CompareTag("SavePoint")) { Debug.Log("Saved"); } if(collision.gameObject.CompareTag("DeadBlock")) { Destroy(gameObject); GameController.Instanceplayer(); //ここで別の関数のinstantiateを含む関数を呼び出したい } } }
二個目のスクリプト
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameController : MonoBehaviour { public GameObject player; // Start is called before the first frame update void Start() { Instanceplayer(); } public static void Instanceplayer() { Instantiate(player); } }
試したこと
instatiateを実行する関数をstaticにした
補足情報(FW/ツールのバージョンなど)
バージョン2019.4.4f1
windows10
回答3件
あなたの回答
tips
プレビュー