반응형

Unity ugui로 스킬쿨타임 간단 구현 하겟습니다.









1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
bool isCharging = false;
    float nowDelayTime = 0;
    public void Chk_SkillcoolTime()
    {
        User_Abillity abil = UserdataManager.Instance.user.user_Abillity;
        text_skillLv.text = string.Format("Skill\nLv.{0}", abil.SkillLv);
 
        if (!isCharging)
            StartCoroutine(ChargeSkill(abil));
        else
            nowDelayTime = 0;
    }
 
    IEnumerator ChargeSkill(User_Abillity _abil)
    {
        
        
 
        while (_abil.SkillLv <= 2)
        {
            isCharging = true;
            nowDelayTime += Time.deltaTime;
 
            if (nowDelayTime >= _abil.SkillChargeCoolTime)
            {
                nowDelayTime = 0;
                _abil.SkillLv++;
 
                if (_abil.SkillLv == 3)
                    isCharging = false;
 
                text_skillLv.text = string.Format("Skill\nLv.{0}", _abil.SkillLv);
 
            }
            else
            {
                image_skillCooltime.fillAmount = nowDelayTime / _abil.SkillChargeCoolTime;
            }
 
            yield return null;
        }
    }
 
cs


반응형
반응형

안녕하세요,


버그/문의 이메일 기능 하실때 메일넣기 기능 이에요


제목 ,바디 내용 아래와 같이 적고 Application.OpenUrl() 하시면 제목과 바디내용이 적힌 이메일을 보내는 인터넷창이 뜰거에요 


디바이스 에서는 웹사이트에 맞게 (네이버, 지메일 등등) 작성되서 해당 앱에 보이시게 될거에요


void sendMail 

    string mailto = "asdsad@asdsad.com"; 
    string subject = EscapeURL("제목이에요"); 
    string body = EscapeURL("바디 내용"); 
  
    Application.OpenURL("mailto:" + mailto + "?subject=" + subject + "&body=" + body); 

 string EscapeURL(string url) 

    return WWW.EscapeURL(url).Replace("+", "%20"); 
}



이상입니다.

반응형
반응형


안녕하세요~


3D 캐릭터 모델 가지고 에니메이션 중에 상체 움직이기 (본 움직이기)를 하고 싶은경우가 있는데요 

저같은경우 FPS 개발중에서 총을 하늘이나 바닥으로 향할떄 상체가 위쪽이나 아래쪽으로 향하게 혹은 
허리를 굽혀지게 하고 싶었는데요 


아래와 사진과 같이 캐릭터 모델 FBX 파일을 눌시면 아바타를 찾을수 있습니다. 아바타를 눌러보시면 configure Avatar 를 찾을수 있어요 
(단, 캐릭터 모델이 Humonoid 이어야 합니다.)










아래 사진과같이 제가 선택한 본이름을 확인할수 있는데요 

휴머노이드의 Upper Chest 해당하는 부분이 Bip01 Spine2 라는걸 알수가 있네요 




이렇게 에니메이션중 움직일 본이름을 확인한 후


스크립트로 가셔서 제어하시면 됩니다. 



아래 스크립트 한번볼게요~~~







void Start()

{

animator = GetComponent<Animator>();

if (animator)

playerChestTr = animator.GetBoneTransform(HumanBodyBones.UpperChest); // 해당 본의 transform 가져오기

}


public void LateUpdate()

{

Operation_boneRotation();

}



Vector3 ChestOffset = new Vector3(0, -40, -100);

Vector3 ChestDir = new Vector3();

void Operation_boneRotation()

{

//카메라가 보고있는 방향

ChestDir = mainCameraTr.position + mainCameraTr.forward * 50f;

playerChestTr.LookAt(ChestDir); //상체를 카메라 보는방향으로 보기

playerChestTr.rotation = playerChestTr.rotation * Quaternion.Euler(ChestOffset); // 상체가 꺽여 잇어 상체로테이션을 보정하기 

}






위 코드를 보시면 Animator 컴포넌트로부터 해당 본부분의 transform를 가져올수가 있습니다.

 =>playerChestTr = animator.GetBoneTransform(HumanBodyBones.UpperChest);


그리고 Update를 통해서 카메라 보는방향 (저같은경우 FPS 게임이라 카메라 보는방향으로 움직여야해서  카메라방향으로 상체를 움직이도록 햇습니다)

으로 상체를 움직이도록 햇습니다.


여기서 중요한게 LateUpdate() 로 하셔야 적용이되고 본이 움직인다는것을 알아주세요!



playerChestTr.LookAt(ChestDir); 는 상제 transform 이 카메라가 보는 방향으로 하게 한것입니다 .


playerChestTr.rotation = playerChestTr.rotation * Quaternion.Euler(ChestOffset); 는 보정 해주는 코드인데요,


카메라 보는방향으로 LookAt 하게 되더라도 월래 본의 로컬 좌표때문에 허리가 거의 꺽이다시피 상체가 구부러지게 되더라구요 

상체를 세우고 로컬좌표를 다시 맞추기위해 ChestOffset을 추가해서 보정 한겁니다.


이상입니다.



반응형
반응형

 캐릭터 가 적 오브젝트를 부드럽게 바라보는 방법입니다.




void Update()

{

FollowTarget();

}




void FollowTarget()

{

if (targetEnInfo != null)

{

Vector3 dir = targetEnInfo.transform.position - this.transform.position;

this.transform.rotation = Quaternion.Lerp(this.transform.rotation, Quaternion.LookRotation(dir), Time.deltaTime * speed);

}

}




targetEnInfo  은 적 오브젝트 입니다.


수학적으로 벡터 간의 차는 방향을 나타내는 개념을 이용해 보는 방향을 얻어내고 보간을 이용한것입니다.


Vector3 dir = targetEnInfo.transform.position - this.transform.position 는 적위치 - 현재 내위치 의미이며 현재 내위치에서 적위치의 방향을 나타냅니다.


Quaternion.LookRotation(dir) 은 dir 방향에 따른 쿼터니언 축회전을 하게 해줍니다. 



바라보는 속도를 높이고 싶으면 speed 값을 높이시면 됩니다.




이상입니다.

반응형
반응형

Unity  Hierarchy 에서 camera 생성시 기본적으로 아래와같이 camera /  GUI Layer / Flare Layer / Audio Listener  컴포넌트가 붙어 잇는걸 볼수가 있습니다.






 GUI Layer / Flare Layer / Audio Listener 가 궁금해서 알아보았습니다.



1. Flare Layer

우선 flare 가 무엇인지 찾아보았는데요 .

아래 사진과 같이 유성같이 퍼져나오는 빛을 의미합니다.


그래서 Flare Layer 는 아래와같은 빛의 표현을 하겠느냐라는 의미입니다.


게임 개발시 파티클을 추가하게 되면 카메라에 Flare layer 넣어주는게 좋겟죠 ??







2. GUI Layer


GUI Layer 컴포넌트는 유니티에 GUI 기능으로 나온 ui들을 카메라에 표현하겟냐는 컴포넌트입니다.


만약 카메라에 GUI Layer를 안넣는다면 GUI를 보실수 없습니다. GUI는 예로 아래와 같습니다.









3. Audio Listener


사운드 구현시 필요한 컴포넌트인데, 대부분 게임이 카메라기준으로 캐릭터및 오브젝트로 활용이 되어지다 보니 Camera 생성시 기본적으로 

 Audio Listener 컴포넌트가 붙는걸로 생각이 듭니다.


Audio Listener는 사람의 귀라고 생각하시며 되고, Audio Source 는 소리를 내는놈이라고 생각 하시면 됩니다. 사운드 구현시 Audio Listener와 Audio Source가 필요로 합니다.

Audio Listener은 한씬에 단 한개밖에 존재하지 못하며,  Audio Source 는 여러개가 존재해도 괜찮습니다.







이상입니다.

반응형
반응형


안녕하세요~

유니티 프로젝트 작업중 막히는 부분이 있었습니다.

유니티 UGUI 기능중 inputfield 기능에서 해당 input 클릭후 입력을 하게 되면
commponent 의 on chanaged value 에 등록한 매서드가 호출하게 되곤 합니다.

하지만 input 진입시 판단할 로직이 들어간다면 위와 같이 해서는 안되더라구요

input 진입시 판단할 로직 이후에 맞다면 입력할수 있겟끔 만들어 봤습니다

public class myTemp
{
    public InputField inputfield;
    public Button button_action;

    public bool isReady = false;

     //On change Value 에 넣을 매서드

    public void ChangeText(Text txt)
    {
            txt.text = inputfield.text;
    }



    //버튼에 붙일 매서드
     public void ResponseButton_click()
    {

        if(isReady)
       { 
               if (inputfield.isFocused == false)
             {
                     EventSystem.current.SetSelectedGameObject(inputfield.gameObject, null);
                    inputfield.OnPointerClick(new PointerEventData(EventSystem.current));
              }

      }
    }

}




어떠한 버튼을 누르고 판단 (isReady) 을 한 후에  판단이 맞으면 eventsystem으로 오브젝트를 설정하여 코드상으로
input에 진입하게 되는 코드입니다.

if (inputfield.isFocused == false)에 진입하게 된다면 유니티상 input 필드에 커서가 보일것입니다.

이후 입력된 값은 ChangeText매서드에서 처리가 될것입니다.


이상입니다.


반응형

+ Recent posts