前提・実現したいこと
私はunityでC#を使ってプログラムを書いています。2Dです。
もし特定のオブジェクトが触れたときに、そのオブジェクトの座標を変更するコードを書きたいです。(ここではplayerがSquareに触れたときに、playerのx座標を「その時のplayerのx座標に-(マイナス)をかけた位置」に変更したいです。)
しかし、今のコードではエラーメッセージは出ないものの、実際に動かすと何も起こりません。(具体的にはそのまますり抜ける。)
どう改善すればいいでしょうか?
発生している問題・エラーメッセージ
なし
該当のソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class warp : MonoBehaviour
{
private float x;
private float y;
void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "player") { x = collision.transform.position.x; y = collision.transform.position.y; collision.transform.position = new Vector2(x * -1,y); } }
}
試したこと
[if (collision.gameObject.name == "player")]の部分なしで試してみましたが結果は同じく
なにも起こりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
移動処理自体は、提示されている処理でも動くかと思います。
なので、以下の修正と確認をお願いできますでしょうか。正確な回答のためにもお願いいたします。
1、質問文の「C言語を使ってプログラムを書いています」
ー>C#の誤りとなります。 質問を修正願います。
2、質問文の「[if (collision.gameObject.name == "player")]の部分なしで試してみましたが〜」
ー>そもそも衝突判定のロジックに入っていないのではないでしょうか?
2Dの場合は「void OnCollisionEnter2D(Collision2D collision)」の方のメソッドを利用したかと思います。以下の様な処理に変更して、ログが出力されるかご確認ください。
void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log("OnCollisionEnter2D -----");
}
返信ありがとうございます!ご指摘していただいたとおりに編集しました!
二つ目の指摘どおりにプログラムを書き換えて実行してみたところ、うまく座標が変更されました!
アドバイス、ありがとうございました。
あと、元のプログラムはそのまま残しておいて、変更後のプログラムは自己解決(tsuki01さんのおかげですが......)の欄に書いておきます!
コメントと、質問のクローズありがとうございました。
最終的に自己解決できた様で良かったです。
回答1件
あなたの回答
tips
プレビュー