조각의 뒤에 닿으면 붙어 있습니다.

5714 단어 Unity3D
호소입니다.
이번에는 제가 만든 오리지널 게임의 일부 기능을 소개합니다.
오리지널 게임의 내용은 서로가 조각을 연주하고 상대의 조각을 쓰러뜨리는 게임입니다.

조각을 연주하고 상대의 조각에 충돌하면 금이 들어간다.
연주한 조각이 상대의 조각에 닿으면 상대의 조각을 빼앗아 자신의 조각으로 버립니다.

구현 개요



연주한 말이 상대의 말의 뒤에 있었을 때만, 상대의 말을 탈취한다고 하는 기능입니다.
탈취된 조각은 조작을 할 수 없게 되어 탈취한 조각의 일부가 되어 버립니다.







이 후, 뚫은 검은 조각을 연주하면 녹색 조각도 붙어 가고 검은 조각의 일부가되어 기능합니다.
구현 절차는
①Trigger 설치
② 달라붙는 스크립트 작성
③ 붙은 후의 조각을 날리기 쉽게 하는 스크립트를 만든다
입니다.

그럼 해설을 해 나갑니다.

1. 조각의 뒤에 명중 판정을 한다



우선은 조각 뒤에 "Guard"를 만듭니다.
덧붙여서 검은 말 자신은 태그의 "Koma0"이라는 태그를 붙이고 있습니다.



Guard 설정은 다음과 같습니다.
Tag는 이번 "Guard0"으로 하고 있습니다.
외형을 투명하게 만들기 위해 [MeshRender]를 선택 취소합니다.
[BoxCollider]의 "IsTrigger"의 체크를 넣고 있습니다.



2. 다른 종류의 조각에 스크립팅





그런 다음 하얀 조각에 아래 스크립트를 붙입니다.

void OnTriggerEnter(Collider coli){                      //駒がGuard0に入った時の動作
        if (coli.gameObject.tag == "Guard0") {
            stickingflag = 2;                               //StickFlagを立てる
        }
    }

void OnCollisionEnter(Collision col) {                  //駒がGuard0に入った時の動作                                          
    if (col.gameObject.tag == "Koma0") {                //もし駒がGuard0に入った時にKoma0に衝突したら
        if (stickingflag == 2) {
            if (fixedJoint == null) {                       //駒をくっつける動作↓
                    gameObject.AddComponent<FixedJoint> ();
                    fixedJoint = GetComponent<FixedJoint> ();
                    fixedJoint.connectedBody = col.gameObject.GetComponent<Rigidbody> ();

                    fixedJoint.enableCollision = true;          //駒をくっつける動作↑

                    stick = col.gameObject;                     //乗っ取った駒を自分の子にする↓
                    col.gameObject.tag = "KomaStick";

                    col.transform.parent = this.transform;
                    stickingflag = 1;                           //乗っ取った駒を自分の子にする↑

                    Invoke ("Guardoff",0.5f);                   //①あとで解説
                    Debug.Log (1);                              //①あとで解説
                }
            }  
            else if (flagC == 2) {
                col.gameObject.SendMessage ("Damage");
            }
        }
    }

void OnTriggerStay(Collider coli){              
    if(flagC ==2){
        if (coli.gameObject.tag == "KomaStick") {
            if (coli.GetComponent<Rigidbody> ()) {
                Rigidbody rigid = (Rigidbody)this.GetComponent<Rigidbody> ();
                GameObject.DestroyImmediate (rigid);
            }
        }
    }
}

void OnTriggerExit(Collider coli){                          //駒がGuard0から出た時の動作
    if (coli.gameObject.tag == "Guard0") {
            stickingflag =1;                                    //StickFlagを下げる
    }
}

이것으로 조각이 붙습니다.
①은 같은 스크립트내의 "GuardOff"메소드를 0.5초 후에 실시한다는 의미입니다.
자세한 내용은 다음 장에 작성.

3. 달라붙은 조각이 날기 쉽도록 한다



코마끼리는 붙어 있었지만,
이대로라면, 달라붙은 조각을 날리면 흡수한 조각의 질량을 감지해 날기 어려워져 버립니다.
그래서 앞 장의 ①의 "GuardOff"메소드에서 다음과 같이 씁니다.
이전과 같은 스크립트에 다음을 씁니다.

"Guardoff"메서드
public void Guardoff(){
        stick.SendMessage ("Nonrigid");
        Debug.Log (3);
    }

Nonrigidbody는 뚫린 조각의 스크립트에 작성된 방법입니다.
"Nonrigidbody"메서드는 다음과 같이 작성됩니다.

"Nonrigidbody"메서드
public void Nonrigid(){
    Rigidbody rigid = (Rigidbody)this.GetComponent<Rigidbody>();
    GameObject.DestroyImmediate(fixedJoint);
    GameObject.DestroyImmediate(rigid);
    Destroy (guard.gameObject);
}

"Nonrigidbody"메소드로 행해지고 있는 것은
탈취한 조각의 리지드 바디를 벗고 있습니다.
Rigidbody를 제거하기 전에 'fixedJoint'를 제거한 것은
fixedJoint의 부품이 붙은 상태라면 Rigidbody를 분리할 수 없기 때문입니다.

또 "Guardoff"메소드를 ①에서 0.5초 후에 행하고 있는 것은
부딪친 순간의 물리 연산을 아직 붙이고 싶기 때문입니다.

이제 조각을 날려 버릴 수있었습니다.





* 참고로 한 사이트
"Unity의 Joint 기능을 사용하여 적에게 게임 오브젝트가 붙게 한다"
h tps : //가 완성하는 방법. 코 m / p 로g et m / 조인 테네 my

좋은 웹페이지 즐겨찾기