관리 메뉴

도드넷

도드의 유니티 API#4 - 유니티 C# 기본중 기본문법 정리 본문

창고/나만의 게임 제작

도드의 유니티 API#4 - 유니티 C# 기본중 기본문법 정리

도드! 2016. 9. 1. 12:29
반응형





도드의 유니티 API#4


- 유니티 C# 기본중 기본문법 정리 스크립트를 만들때 사용되는 기본방법과 기본도구 정리하는 느낌으로 써봄.


1. 유니티 변수 선언하는 방법


public float current_hp = 10.0f;

    public float max_hp = 10.0f;

    public float phy_resist = 0.1f;

 

    public GameObject attacker = null;

 

    Vector3 newposition;

 

    float death_count = 0;

    float N1_60 = 1.0f / 60.0f;

 

    float death_time = 5;

 

    Color newco = new Color(0, 0, 0, 0);

    Color newco2 = new Color(0, 0, 0, 0);

   

    Vector3 newvec = new Vector3(0, 0, 0);

 

    public Text dmgcount_textgui;

    public Text newgui;

 

    public float received_dmg = 0;

 

    public GameObject myhpbar;

    public GameObject prefab_dmgdisplay;

    public GameObject prefab_blood;

    public GameObject[] dmgguiOB;

    public float dmgfix_y;


개인적으로 유니티 c# 스크립팅에서 가장 많이 쓰는 변수 3개만 뽑으라면... GameObject, float, bool <<- 3대장


퍼블릭 변수를 쓰면 좋은점 = 인스펙터에서 실시간으로 확인할수있고 다른 스크립트와 통신이 가능해진다.




2. 유니티 C# 배열 선언


using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class Example : MonoBehaviour

{

 

    private List<GameObject> GOs;

 

    void OnTriggerEnter(Collider Other)

    {

        GOs.Add(Other.gameObject);

    }

    void Somefunction()

    {

        for (int i = 0; i < GOs.Count; i++)

        {

               /* DoSomething with */ = GOs[i];

        }

    }

}


리스트 메소드 사용하면 좋은점이 추가와 빼기가 매우 쉬움.

그냥 리스트이름.Add 혹은 .Remove 해주면 됨. remove도 어디에 들어있는지 신경안씀 그 오브젝트를 지정하면 알아서 리스트에서 없애버림.


또는


public Text[] dialog_text;

public Text[] conv_text;



3. 자식 요소 찾기 (이름으로)


goShell = transform.FindChild("Tank_Shell").gameObject;


또는 getCompnentInChildren<타입>().... 으로 타입 으로도 찾을 수 있음.


dialog_text = Dialogs[i].GetComponentsInChildren<Text>();

GetComponentInChildren<RangeDectect>().Detected_Units.Remove(Target);


getCompnentsInChildren 는 복수로 하위의 모든 컴포넌트를 색출해서 단체로 반환하는데

저장될 변수역시 배열형태여야 함.



4. 부모 요소 찾기


gameObject.transform.parent.gameObject.tag == "Player"



5. 외부 오브젝트 찾기


SM = GameObject.Find("SceneManager");


or


퍼블릭으로 놓고 인스펙터에서 칸만들고 하이어라키에서 직접 끌어서 놓기도 가능.


Vector2 clickPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

Collider2D mycol = Physics2D.OverlapPoint(clickPoint);

mycol.gameObject.tag ...

       

혹은 collider 쪽 데이터에서에서 충돌한 오브젝트를 가져오는 방법도 고려가능.


핵심은 내 스크립트에 외부 오브젝트를 어떤 방식으로 설명, 전달, 알려, 레퍼런씽 해주느냐임.



6. 외부 스크립트에 접근해서 외부 변수와 통신하는 방법


Selected_Character.GetComponent<Puppet_Control>().ORDER = "Attack_Target";

Selected_Character.GetComponent<Puppet_Control>().Target = mycol.gameObject;


일단 외부 오브젝트를 5번방법같이 레퍼런씽해서 오브젝트 변수에 저장한후, 유니티 역사상 가장 유용하고 개사기

스크립트인GetComponent로 해당 스크립트를 불러온후 해당 변수 이름을 써주면 변수를 읽거나 수정할 수 있게됨.


양식은 대충


게임오브젝트.겟컴포넌트<스크립트이름>().변수이름 = 새값



7. 유니티 충돌검사 & 구역안에 들어갔는지 충돌 감지


void OnTriggerEnter2D(Collider2D thiscollider)

{

}

 

void OnTriggerExit2D(Collider2D thiscollider)

{

}


만들어진 게임엔진을 사용했을때 가장 좋은점이 바로 이 빌어먹을 충돌구현이 이미 완벽하게 잘되어있다는 점.

위의 함수는 오브젝트에 부착된 트리고형 콜라이더에 무엇이 들어가고 나갔을때 반응하게 됨.


스타나 워크 유즈맵에서 자주쓰는 "로케이션에 들어가면"을 구현할수있게 해줌.


얘도 매우 스마트한데 Collider2D 라는 콜라이더 데이터를 반환해서 어떤 물체가 충돌했는지 알려주므로 tag를 검사해서 플레이어 소속인지 적 소속인지등을 세부적으로 관리할수도 있음.









반응형
Comments