3【ゲーム作る】unity講座、キャラが衝突すると動きだす(3)

3【ゲーム作る】unity講座、キャラが衝突すると動きだす(3)

Aオブジェクトが右から左へ移動していて、静止しているBオブジェクトに動いているAオブジェクトが衝突(接触)するとBオブジェクトが動き出す

>>【ゲーム作る】unity、キャラが動く(1)
https://www.youtube.com/watch?v=vdk46zAcYh8&t=0s
の続きから

OnTriggerEnter2D 「トリガーにする」をチェックにするとオブジェクトがすり抜ける
OnCollisionEnter2D チェックしない状態でぶつかる

・説明
ゲーム開発のフレームワークであるunityをつかってゲームを作るのに必要な基本的なコマンドや機能を紹介
シンプルで簡単なスマートフォン向けの2Dゲームアプリの開発を目指す。
はじめは簡単な機能から学習して
徐々に機能や内容を膨らませてゲームの規模を大きくしていく

PC: iMac OSX
プログラム言語:C#(Visual Studio無料)
ゲーム用フレームワーク:Unity(2019.3.9f1、無料)

Unityダウンロード
https://unity3d.com/jp/get-unity/download

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class charmove : MonoBehaviour
{
    private const float hPos = 12.21f;
    public float speed = 5;
    public float fps = 60;//Screen.currentResolution.refreshRate;//60;
                          // Start is called before the first frame update

    public string butaObjName;//buta
    GameObject butaObj;
    private bool butaFlag;
    Rigidbody2D rbody;

    void Start()
    {
        Debug.Log("Resolution_Width:" + Screen.currentResolution.width +//解像度
            "Resolution_Height:" + Screen.currentResolution.height +
            "Refresh Rate:" + Screen.currentResolution.refreshRate);
        Debug.Log("Screen.width:" + Screen.width);//Screen.currentResolution.widthと解像度は異なる
        butaFlag = false;//最初はFALSE
        butaObj = GameObject.Find(butaObjName);

        rbody = GetComponent<Rigidbody2D>();
        rbody.gravityScale = 0;
        rbody.constraints = RigidbodyConstraints2D.FreezeRotation;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
/*すり抜ける
使用するときは、「トリガーにする」をチェックする。
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.name == butaObjName)
        {
            butaFlag = true;
            Debug.Log("hit");
        }
        else
        {
            Debug.Log("no hit");
        }
    }
*/
    //狼と豚の衝突判定
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.name == butaObjName)
        {
            butaFlag = true;
            Debug.Log("hit");
        }
        else
        {
            Debug.Log("no hit");
        }
    }

    private void FixedUpdate()
    {
        this.transform.Translate(   -(speed / fps)  , 0, 0);//左方向へ移動するときはマイナス,数が減っていく
     
        if (this.transform.position.x < -12.5f)//左端座標
        {
            Vector3 newPos = this.transform.position;
            newPos.x = hPos;//右はしへ
            this.transform.position = newPos;
        }
        if (butaFlag)//衝突判定でTRUEのときだけ
        {
            butaObj.transform.Translate(0, 3.0f / 60.0f, 0);
        }
    }
}

 

こちらの記事もどうぞ