https://www.youtube.com/watch?v=d7dyDObTpBo&ab_channel=%EA%B3%A8%EB%93%9C%EB%A9%94%ED%83%88

 

+

 

   

 

 3D 모델링, 리깅, 애니 전부 블렌더에서 작업해야함

 

 

+

 

둥근 모델을 만들고 싶다면, 모델링 팁

 

ㅇ 스컵팅으로 처리

ㅇ 모서리 부분 베벨 적용

ㅇ 스무스 셰이더 적용

ㅇ 섭스 해서 면 나눠서 하이폴리로 만들기

 

 

 

+

 

 

하나의 모델. 하나의 아마추어

레이어 페어런트는 대략 이러한 구성으로 되어있음

 

 

 

애니메이션 만들땐 , Action Editor 를 사용해 

 

본의 회전과 이동을 이용함

키프레임 구간별 포즈 to 포즈 로 만듦

 

 

 

 

레이어 여러개 저런식으로 만듦

 

 

+

 

 

Blender -> Unity model export

블렌더에서 유니티로

3D 모델 및 리깅 및 애니메이션 이동법

블렌더에서 캐릭 리깅 모디파이어 적용 후
메쉬만 선택

블렌더 ㅡ file ㅡ export ㅡ FBX 클릭

 



Limit to Selected Objects 옵션 클릭
선택한 오브젝트만 넘기겠다는 뜻

apply transform 을 셀렉해야
유니티에서 눕혀지는 걸 방지함

 

Y가 위로 가야함

다른 옵션 안 건드리면 끝

 

+

 


모델에 텍스쳐가 있을 시, 텍스쳐 유니티로 옮기는 법


추출할 Textures 폴더와

파일명.fbx 두 파일을 동시에 같이 선택 후

유니티 assets 모여져 있는 아래쪽 칸에 드래그 함

유니티 안에서
불러온 모델에서▶키를 누르면 해당 모델의 텍스쳐를 볼 수 있음

텍스쳐 제대로 적용 안되면
유니티에서 material 생성해서 손 봐줘야 함
가져온 텍스쳐를 albido 로 드래그해서 적용


가져온 normal map 있다면 이것도 드래그 해서 적용

 

+

 

 

그 모델에게

 

Animator 컴포넌트 넣기

 

 

애니메이터 컨트롤러도 넣기

 

 

 

애니메이터 컴포넌트에 애니메이션 컨트롤러 지정하기,

 

 

idle은 베이스 레이어 초록색 Entry 에 넣기

 

 

+

 

애니메이션 컨트롤러 세부사항 수정하기

 

 

 

Clibs 가 블렌더 내에 있던 에니메이션 레이어임

 

armature|idle 을 idle 로 이름 정리 하기

 

 

아래 보면

Loop time 옵션으로 반복 지정 가능

 

 

반응형
Posted by 이름이 익명
:

 

유니티ㅡ 프로젝트 세팅 ㅡ 에디터 ㅡ 게임 오브젝트 네이밍 ㅡ 언더바로 설정

 

 

이래야 이름 다루기 편해짐

 

+

 

 

프로젝트 세팅 ㅡ input action 에선

기본으로 wasd 가 ↑←↓→  키와 동일하게 캐릭 움직이는 역할로 쓰이게 되어있음

 

 

 

+

 

 

프로젝트 세팅 ㅡ 타임라인 에서 보면

기본 게임 프레임은 60 프레임으로 되어있음

 

15, 120 , 144 이렇게 내가 원하는 프레임을 입력 가능함

 

+

 

 

 

+

 

 

오른쪽 위 아이콘, volume 아이콘 클릭해서 오브젝트 아이콘을 끌 수 있음

거슬리면 끔

 

+

 

quad plane
버텍스 4개 밖에 안되는 단순한 평면 사각형 버텍스 여러개인 평면 사각형
간단 2d 작업 여러 작업
영상 보여주기 vfx, 풀, 영상 등등

 

 

+

 

 

영상 video 를 게임에 응용하기

 

 

애펙에서 미리 만들어놓은 alpha 값있는 투명 loop video 를 주로 사용함

 

 

모델링 위에 텍스쳐 매핑 배경으로 쓰기 스킬 이펙트

 

 

 

 

+

 

 

Asset 에셋  
게임을 이루는 각종 요소들

 

+

 

https://assetstore.unity.com/ko-KR

 

Unity 에셋 스토어

게임 제작을 위한 베스트셀러 에셋을 만나 보세요. 다양한 2D/3D 모델, SDK, 템플릿, 툴로 구성된 유니티의 카탈로그를 활용하여 게임 개발의 속도를 높일 수 있습니다.

assetstore.unity.com

 

유니티 공식 어셋 스토어

 

 

 

3d 모델, 효과음, 배경음, 스킬 이펙트, RPG 장르 프리셋, 인벤토리 ui,

ai 행동, 폴더 아이콘, 인게임 붓칠 시스템 등등 여러가지가 있다

 

 

 

 

https://assetstore.unity.com/ko-KR?category=essentials%2Ftutorial-projects&free=true&orderBy=1

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

 

학습용 에셋도 있다

 

프리셋이 짜여져 있는 거임

 

+

 

 

 

내가 원하는 템플릿 에셋 다운받은 후

스크립트를 뜯어보며 공부도 가능

 

+

 

오브젝트 풀링 pool

 


총알 처럼 자잘자잘한 오브젝트들을  
instantiate 오브젝트 생성 후 destroy 오브젝트 파괴
이렇게 하면 성능 저하 문제점이 발생함

초기생성작업 부터 시작해서 쓰레기 파일을 모아 삭제까지 하고...
뭔가 안맞음

 


그래서 쓰는게 풀링임

빌려와서 삭제할 땐 되돌려줌
활성화 / 비활성화 개념임



오브젝트 풀링 개념이 더욱 fps 가 높게 나와서 좋음



+

 

오브젝트 풀링 쓰는 경우

 

3D 오브젝트를 파티클 처럼 여러개 쓸 때

점프 먼지 이펙트,

총알 이펙트,

관중 오브젝트

 

 

 

오브젝트 풀링이 아니라 Destroy 를 써야하는 경우

 

보스 등장 연출

일회성 파티클 연출

이벤트 완료

 

딱 한번만 나오고 사라지는 오브젝트에 적합하다

 

 

+

 

 

장애물을 비껴가서 목적지에 가는 것을

 

path finding 이라고 함

 

 

마우스 왼 클릭으로 플레이어 이동,

적 ai 의 이동 

등에 쓰임

 

 

 

반응형
Posted by 이름이 익명
:

 

 

 


스크립트에서 

자주 쓰이는 컴포넌트는 Awake에서 미리 받아놓기

입력을 제외한 Update는 코루틴으로 제어

많은 양이 필요한 오브젝트는 풀링으로 관리


사용안하는 Start, Update
유니티 이벤트는 사용안하면 코드에서 빼주기 

스크립트를 생성하면 Start, Update가 자동으로 생성해주는데 
거기에 코드가 비어있어도 유니티에서는 두 이벤트를 호출함 


유니티에선 스크립트는 PlayerSetting Scripts에서 실행순서를 바꿀수있음

GameManage같은 게임옵션이나 
게임 설정에 포함된 스크립트를 최우선순위로 실행하게 만들 수 있음


이건 개인취향이지만 나는 싱글톤을 매우 좋게 사용함 

유니티는 컴포넌트로 스크립트를 붙이기때문에 
Manage스크립트를 가져오려면 오브젝트를 찾고 
컴포넌트를 등록 해줘야하지만 

싱글톤을 사용하면 Manager스크립트가 두개 생성되는걸 막고 

instance로 호출이 가능함 

물론 유니티용으로 모노싱글톤 스크립트도있음



물리연산은 FixedUpdate에서 처리

Debug.Log는 빌드전에 전부 지워주기 
프로파일러만 봐도 Debug 사용시 리스크가 큼


Destroy 함수는 왠만하면 사용하지 말기 


GC에 올라가서 비활성화 해놓고 재사용 할 수 있으면 사용하기


게임종료검사, 조건검사는 LateUpdate로 사용하기


움직이지않는 오브젝트는 static으로 변경


라이트 매핑 이용하여 런타임 리스크 줄이기



PlayerSetting Physic에서 
충돌이 필요없는 레이어는 체크 해제하기


배경화면을 제외한 Sprite는 아틀라스로 묶어 사용하고
캐싱하여 사용하기


메쉬 콜라이더 수 줄이기


스크립트 내부에서, 동적으로 Find 기능으로 오브젝트 찾지말기


foreach보다 for문 위주로 사용


switch case문 적절히 사용하기


string비교는 CompareTo


string 붙이기는 StringBulider


로딩화면 구현 후 
로딩화면에서 GC호출해주기


 

 

 

 

 

 

 

https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=37808

 

소소하게 써보는 나만의 유니티 최적화,팁 - 인디 게임 개발 마이너 갤러리

자주쓰이는 컴포넌트는 Awake에서 미리 받아놓기 입력을 제외한 Update는 코루틴으로 제어 많은 양이 필요한 오브젝트는 풀링으로 관리 사용안하는 Start, Update등 유니티 이벤트는 사용안하면 코드

gall.dcinside.com

 

 

반응형
Posted by 이름이 익명
:

 

 

 

    public float jumpPower;

 

라고 스크립트 상단에 쓰면 

인스펙터 창에서 언제든지 값을 조정 가능해짐

 

 

using UnityEngine;

public class PlayerBall : MonoBehaviour
{

    public float jumpPower;
    bool isJump;
    Rigidbody rigid;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        if(Input.GetButtonDown("Jump") 
          && !isJump)
        {
            rigid.AddForce(
            new Vector3(0, jumpPower, 0), 
            ForceMode.Impulse);
            isJump = true;
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Floor")
            isJump = false;
    }
}

 

플레이어의 2단 점프 방지하기

무한 점프 방지하기

 

한번 점프시 점프를 불가능하게 만듦

(isJump 가 트루)

 

바닥(Ground) 오브젝트에 닿으면

점프가 다시 가능하게 만듦 (isJump 가 팔스)

 

+

 

바닥은 name 이 아니라 tag 로 하고 싶으면

        if (collision.gameObject.tag == "Floor")

 

 

+

 

회전축은 크게 두가지임

self 자기 자신 중심 기준

world. 전체 월드 기준 

 

 

self world

 

self 로 회전시켰는데 , 회전하는 티가 안 나서 world 로 바꿈

 

 

+

 

 

name == Item 설정했는데

    if (other.name == "Item")

 

위 스샷처럼 복붙하면 이름이 달라져버려서 스크립트 작동 안되는 경우가 있음

 

그래서 name 보다는 tag 를 쓰는 거임

 

태그 하나 만든 후

 

오브젝트 인스펙터 창에서 태그 지정한 후

 

스크립트 창에서

 

    if (other.tag == "Item")

이렇게 변경 한다

 

+

 

 

Copilot ai 챗봇에게 물어봐서 만든

추락 방지 오브젝트 만드는 법

 

저 아래에 넙적한 회색 네모에 닿으면

플레이어의 위치를 0 0 0 으로 이동시켜줌

 

using UnityEngine;

public class TeleportPlayer : MonoBehaviour

{
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // 플레이어 위치를 (0, 0, 0)으로 순간이동
            other.transform.position 
            = new Vector3(0, 0, 0);
            Debug.Log("플레이어가 순간이동되었습니다!");
        }
    }
}

 

 

+

 

궁금증 하나 더 생김

나중에 rpg 게임 만들다보면  Tag 가 아주 많아질텐데 이건 문제가 안될까?

에 대한 챗봇 답변

 

많은 태그는 분류가 힘들어지는 문제, 퍼포먼스 저하가 있다

 

태그가 아니라 커스텀 데이터 스크립트를 이용해라

예시 : 

public enum MonsterSize { Small, Medium, Large }

public class Monster : MonoBehaviour
{
    public MonsterSize size;
}

 

 

+

 

주로 쓰는 태그는 다음과 같음

 


캐릭터 유형: Player, Enemy, Ally

상호작용 가능한 오브젝트: Item, Pickup, Door

게임 오브젝트 타입: Projectile, Obstacle

 

 

+

 

 

GameManager 

= 형태가 없고 전반적인 걸 관리하는 것

 

+

 

스크립트 Find 함수는 CPU 소모가 크니까 쓸 때 주의 할 것

 

+

 

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerBall : MonoBehaviour
{

    AudioSource audio;
    public float jumpPower;
    public int itemCount;
    public GameManagerLogic manager;
    bool isJump;
    Rigidbody rigid;

void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            
        }


    else if (other.tag == "finish")
        {
            if (itemCount == manager.totalItemCount)
            {
            // Game Clear
            }
            else {
                 //Restart
                SceneManager.LoadScene("SampleScene");
                 }

 

아이템 카운트를 다 못 모으고 결승전 피니쉬 라인에 다다른다면

 

씬을 다시 불러와서 초기화 한다는 뜻

 

+

 

    else if (other.tag == "finish")
        {
            if (itemCount >= manager.totalItemCount)
            {
                // to next stage
                SceneManager.LoadScene("Example_2");

            }
            else {
                 //Restart scene
                
                SceneManager.LoadScene("SampleScene");
                 }

            
        }

요렇게 하면

아이템 일정 개수 이상 모으면 다음 스테이지로

못 모으면 처음부터 초기화 해서 다시 라는 뜻

 

+

 

SceneManager.LoadScene

은 잘만 사용하면

나중에 시간 마법. 처음으로 되돌리기 마법을 구현할 수 있을듯

 

 

+

 

 

쓰는 씬은 꼭

file - build profiles 에 

add open scenes 를 넣어주자

 

안그럼 에러남

 

+

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameManagerLogic : MonoBehaviour
{
    public int totalItemCount;
    public int stage;
    public Text stageCountText;
    public Text playerCountText;

    void Awake()
    {
        stageCountText.text = "/ " + totalItemCount;

    }

    public void GetItem(int count)
    {
        playerCountText.text = count.ToString();
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
            SceneManager.LoadScene(stage);
    }

}

 

↑ 게임 메니저 로직 스크립트

 

 

using UnityEngine;
using UnityEngine.SceneManagement;

public class PlayerBall : MonoBehaviour
{

    AudioSource audio;
    public float jumpPower;
    public int itemCount;
    public GameManagerLogic manager;
    bool isJump;
    Rigidbody rigid;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent<Rigidbody>();
        audio = GetComponent<AudioSource>();
    }

    private void Update()
    {
        if(Input.GetButtonDown("Jump") 
          && !isJump)
        {
            rigid.AddForce(
            new Vector3(0, jumpPower, 0), 
            ForceMode.Impulse);
            isJump = true;
        }

    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        rigid.AddForce(
        new Vector3(h, 0, v), // y axis is for jump
        ForceMode.Impulse);
    }


   void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Floor")
            isJump = false;
    }

    void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            manager.GetItem(itemCount);           

        }


    else if (other.tag == "finish")
        {
            if (itemCount >= manager.totalItemCount)
            {
                // to next stage
                SceneManager.LoadScene("Example_2");

            }
            else {
                 //Restart scene
                
                SceneManager.LoadScene("SampleScene");
                 }

            
        }
    }


}

 

  플레이어 스크립트

 

 

길어서 복잡하겠지만

 

 


플레이어의


    void OnTriggerEnter(Collider other)
    {

    if (other.tag == "Item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
            manager.GetItem(itemCount);           

        }


게임메니저 로직의


    public Text stageCountText;
    public Text playerCountText;

    void Awake()
    {
        stageCountText.text = "/ " + totalItemCount;

    }

    public void GetItem(int count)
    {
        playerCountText.text = count.ToString();
    }

 

 

위 두개가 연관 있다~

 

정도만 알아두자

 

 

 

ui 상에선 저렇게 표기

 

 

/ 0 로 표기 0 으로 표기
Player Item Text Stage Item Text

 

 

+

 

 

컴포넌트 창에서 텍스트 드래그 하려면

TMP_Text 로 되어야 함

 

TMP_Text  가 아니라 Text 로 하면 안댐

 

 

+

 

 

 

씬 0 에서 만든 ui canvas 는

그냥 단순 복붙해서

씬1, 씬2 ... 에서 사용함

 

 

 

+

 

 

 

다 만들면 이런 게임이 됨 :

 

아이템 다 먹으면

다음 스테이지로 갈 수 있음

스테이지 두번째부턴 미구현

 

 

 

 

반응형
Posted by 이름이 익명
:

https://huggingface.co/spaces/Qwen/Qwen2.5-Coder-Artifacts

코딩 벤치마크 1등 찍은 ai란다
Qwen2.5이라는데

챗지피티 유료버전 만큼 좋다고함 .오픈소스임.

 

+

 

ui 담당하는 건 최근버전엔 text mesh pro 라 카던데..

 

+

 

 

화면 속 3d 를 구성하는 것들 그리고 camera 가 담긴 world

 

그리고

 

마우스 커서 및 ui 가 찍히는 screen

 

두 개로 나뉜다

 

+

 

 

왼위 하이어라키 메뉴 - ui - canvas 로 시작

 

+

 

 

캔버스 보기는 상단 2D 누른 후 F 키 눌름

 

+

 

canvas 클릭 후 ui - text  누르기

텍스트 생성임

 

+

 

 

text wraping mode

normal : 박스 크기 우선 no wrap : 박스무시 텍스트 인풋대로 출력

 

+

 

이미지 ui 

 

아래 프로젝트창으로 원하는 png 드래그 해서 옮겨놓기

 


texture type에서
sprite 2d and ui 를 선택해야 끌어다 쓸 수 있음

 

sprite editor 에서 파란네모 쭉 네모난거 드래그 해서 적용

하이어라키 창 - ui - image

 

누르면 흰색 네모 만든 후 거기에

source image 에 원하는 그림 선택

 

+

 


image type - filled 
radial 360 등으로 설정하면
트랜지션 처럼
특정 방향으로 그림이 생겨나거나 사라지게 할 수 있음

 

+

 

 

ctrl d 눌러 

뒤 그림은 어둡게 한 채로

위에건 filled 하면

쿨타임 ui 효과를 만들 수도 있음

 

+

 

 

그림 배치 순서를 변경하고 싶으면

 

하이어라키 순서를 변경하면 됨

 

포토샵 레이어 같음

근데 순서는 반대일 수 있음

 

+

 

 

버튼 ui
하이어라키 - ui - button 

클릭 이벤트를 가지고 있는 반응형 ui

 

+

 

 

image type =  sliced 

기존 정사각형 이미지라면 모서리는 유지하고 중앙만 늘리겠다는 소리임

 

+

 

interactable - 상호작용 가능하냐 여부


transition , color tint / sprite swap / animation

반응 변화를 컬러변경 / 그림 변경 / 애니메이션 으로 하겠다

 


color tint 선택시 ..

normal color - 안 건드렸을 때 컬러

highlighted color - 마우스 오버될 때 컬러

pressed color - 눌렀을 때 컬러

selected color - 선택 되었을 때 색깔

disabled color -  비 활성화 되었을 때 컬러
디폴트 땐 한번 누르면 비활성화 됨



color multiplier : 변하는 색의 진한 정도

fade duration - 색이 변하는 시간 조절

 

+

 


navigation - 다른 ui 버튼으로 이동 어떻게 할거냐

None:

탐색 기능을 비활성화합니다. 즉, 사용자가 해당 버튼을 선택할 수 없습니다.

Horizontal:

사용자는 왼쪽과 오른쪽으로만 이동할 수 있습니다.

Vertical:

사용자 인터페이스 내에서 수직 방향으로만 탐색할 수 있습니다.

Automatic:

유니티가 자동으로 가장 적합한 탐색 경로를 결정합니다.
 이 옵션은 대체로 기본 설정으로 사용되며, 
유니티가 UI 요소들 사이의 위치를 바탕으로 탐색을 관리합니다.

Explicit:

사용자가 직접 탐색 경로를 설정합니다. 
각 방향(위, 아래, 왼쪽, 오른쪽)에 대해 다음에 이동할 UI 요소를 지정할 수 있습니다.

 

+

 

 

 

On Click ()
버튼 클릭시 호출되는 이벤트 함수

+ 버튼 눌러 항목 추가후,

플레이어 Myball 드래그 해서 집어 넣고,

 

 

플레이어 Myball 의 스크립트에 이 항목 추가함

 

다른 곳에서 부를 것이기 때문에 public 을 넣음

    public void Jump()
    {
        rigid.AddForce
         (Vector3.up * 0.7f, ForceMode.Impulse);
    }

 

다시 버튼으로 돌아와서, 온 클릭 및 노 펑션에 위 Jump() 를 클릭해서 넣음

 

 

이러면 이 버튼 누를 때 점프하겠다는 뜻이 됨

 

 

+

 

마우스 꾹 누르는 건 프레스,

마우스 눌렀다 떼는 거 합해서 클릭 

이라고 함

 

+

 

 

 

앵커
ui 고정하기

rect transform

 

기준점이 어디냐

 

 

이 점프 버튼의 경우, 

오른쪽 위  기준,  -220x 만큼 -100y 만큼 띄우겠다 라는 소리임

 

+

 

 

 

앵커 정할 때 , shift 누른채로있으면 파란 점도 뜨는데

이게 오브젝트 고유 기즈모도 적용시키겠다는 소리임

 

더 깔끔하게 정렬 시킬 수 있는 방법임

 

shift + alt 까지 누르면 다르게 정렬 가능

 

+

 

만약 UI 크기를 일정하게 만들고 싶다면
Canvas - UI Scale Mode - Scale With Screen size 로 바꿔주시면 일정하게 유지

 

 

+

 

텍스트에 한글이 ㅁ 네모낳게 깨져 나올땐

 

아래 프로젝트창 - 폰트 - 오른쪽 atlas 어쩌구 - dynamic 으로 변경

 

+

 

유니티 한글 주석 깨질 때 : 

https://gamefive.itch.io/newbie-unity/devlog/777487/unity-editor-

 

Unity Editor 에서 한글 주석(인코딩) 깨지는 경우 해결 방법 - Newbie Unity by gamefive

스크립트를 작성하고 나서 유니티 에디터에서 확인을 하면 한글로 작성한 내용이 깨지는 경우가 있습니다. 이 경결 해결 방법에 대한 설명입니다. 비...

gamefive.itch.io

 

+

 

 

반응형
Posted by 이름이 익명
:

 

 

그나마 나은 거

 

테이블 표 됨, 무료임, 코드 블럭 됨, 온라인 저장 됨

 

(단, 광고 봐야 함. 자동로그인 자주 꺼짐. 불편한 레이아웃이 단점)

 

티스토리 , 네이버 블로그

 

 

 


 

비추

 

글자수 제한있어서 탈락 : 

네이버 메모 

 

유료라 탈락 :

trello , Notion , Airtable 

 

 

코드 블록 기능이 안됨 :

구글 독스 , 구글 스프레드 시트, 메모장

 

반응형
Posted by 이름이 익명
:

물리 충돌 이벤트 [골드메탈님 유니티 입문 강좌 B11]

 

+

 

 

스크롤 바는 끄기

tab 은 top 으로 

이래야 비쥬얼 스크립트 작게 켜도 보기 좋게 됨

 

+

스크립트 쓸 때 On 만써도 

On어쩌구 저쩌구 리스트가 쫙 뜬다

 

특정 상황일 때 발동하는 조건문이다

 

여기선 void OnCollisionEnter 를 쓰겠다

물리적인 충돌이 시작되었을때. 를 의미

 

+

 

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name 
        == "MyCapsule")
        mat.color = new Color(0,0,0);

    }
    void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.name
        == "MyCapsule")
            mat.color = new Color(1, 1, 1);

 

mat color 0 0 0 은 검은색이다

 

mat color 1 1 1 은 흰색이다

 

mat color 255 255 255 는 흰색이 아니다. 엄청 밝은 눈뽕 빛이 되버리니 주의할것

 

 

0 0 0 1 1 1 255 255 255

 

 

 

+

 

 

~~~~~~~~~~~~~~~~~~~~~ 갑자기 문제 생김 ~~~~~~~~~~~~~~~

 


문제1. 특정 스크립트 부분이 싹 다 회색으로 변하는 문제
->모노비헤비어 스크립트 하나만 남겨두고 나머지 싹 다 지우니 해결된건가?

 

 비쥬얼 스튜디오   툴 옵션 - 툴 포 유니티 이것저것 다 false 로 하니 해결된건가? 

-> 또 회색으로 보임; 해결 안됨

 


문제2.  플레이 모드시 키보드 인풋, 마우스 인풋이 안되는 문제 발생

->

플레이어 오브젝트에 할당된 스크립트 컴포넌트를 다 지우고. 

다시 스크립트를 드래그해서 지정하니 점프만 해결됨

상하좌우 인풋입력은 해결안됨..

다음 스크립트를 다시 제대로 입력하니 해결 됨

 

using UnityEngine;

public class moving : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();

    }
    void FixedUpdate()
    {
        if (Input.GetButtonDown("Jump"))
        {
            rigid.AddForce(Vector3.up * 3, ForceMode.Impulse);
        }

        Vector3 vec = new Vector3
            (
        Input.GetAxisRaw("Horizontal"), //x 축
        0,//y 축
        Input.GetAxisRaw("Vertical") //z 축
            );
        rigid.AddForce(vec / 2, ForceMode.Impulse);
    }

    void OnTriggerStay(Collider other)

    {
        if (other.name == "Sphereother")
            rigid.AddForce(Vector3.up * 1, ForceMode.Impulse);
    }
}

 

~~~~~~~~~~~~~~~~~~~~~ 갑자기 문제 생김 ~~~~~~~~~~~~~~~

 

암튼 1년 이상된 이상한 에셋 다 쓰지 말것

 

 

 

+

 

 

 

using UnityEngine;

public class sphereother : MonoBehaviour
{
    MeshRenderer mesh;
    Material mat;


    void Start()
    {
        mesh = GetComponent<MeshRenderer>();
        mat = mesh.material;
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Myball")
            mat.color = new Color(0, 0, 0);

    }
    private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.name == "Myball")
            mat.color = new Color(1, 1, 1);

    }
}

 

npc 오브젝트에 삽입할 스크립트

 

Myball 이라는 오브젝트에 충돌시 색이 변하는 코드블럭

 

 

+

 

 

using UnityEngine;

public class moving : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();

    }
    void FixedUpdate()
    {
        if (Input.GetButtonDown("Jump"))
        {
            rigid.AddForce(Vector3.up * 3, ForceMode.Impulse);
        }

        Vector3 vec = new Vector3
            (
        Input.GetAxisRaw("Horizontal"), //x 축
        0,//y 축
        Input.GetAxisRaw("Vertical") //z 축
            );
        rigid.AddForce(vec / 2, ForceMode.Impulse);
    }

    void OnTriggerStay(Collider other)

    {
        if (other.name == "Cubeup")
            rigid.AddForce
            (Vector3.up * 0.2f, ForceMode.Impulse);
    }
}

 

플레이어 될 오브젝트에 삽입할 스크립트

 

wasd 또는 화살표 키를 누르면 이동

스페이스바 누르면 점프 함

 

Cubeup 에 닿으면 위로 상승함

 

(Cubeup 오브젝트의 콜리젼 콤포넌트엔 이스 트리거 활성화 해야함)

 

+

 

 

반응형
Posted by 이름이 익명
:


코드의 흐름은


선언 -> 초기화 > 호출

생성 -> 초기작업 -> 호출

 

 

int number;
string message;
GameObject player;

 

생성 declaration

변수를 선언했지만 아직 값을 지니지 않은 상태

 

 

 

number = 10;
message = "Hello, World!";
player = new GameObject("Player");

 

초기작업 initialization

변수에 특정 값을 할당하는 것

사용될 준비가 됨

 

 

Debug.Log(message);  // message 변수의 값을 출력
player.SetActive(true);  // player 객체를 활성화
int result = AddNumbers(number, 5);  // AddNumbers 메서드를 호출하여 결과를 result에 저장

 

호출 invocation , calling

메시지를 출력하거나

플레이어를 활성화하거나

넘버를 호출하여 결과에 저장함

 

 

 

 

+

 

기본 디폴트 유니티 스크립트 손보기

 

monobehaviour script 라고 검색하면 저 파일 나옴

저걸 보안 - 모든 권한에 체크

메모장으로 열기

// 주석 삭제

 

이러면 디폴트 값에서 주석을 없애 깨끗히 정리 가능해짐

 

 

+

velocity
현재 이동속도. 3디니까 Vector 3 값 사용

 

+

 

현재 2024 년 챗봇 ai copilot 에게

화면 캡쳐 후  유니티 오류 난 거 물어보면

해결법 알려줌

 

실제로 해보니 오류 해결됨

 

 

비쥬얼 스크립트에서 도구- 옵션- 텍스트 편집기- 모든 언어- codelens 를 해제 하면

 

"Unity 메시지 참조 0개"

이 문구를 제거 가능함.

지저분해서 해제

 

 

+

 

using UnityEngine;

public class RigidTest : MonoBehaviour
{

    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
        rigid.linearVelocity = Vector3.right;

    }

}

 

라고 적으면

물리에 의해 자동으로 굴러가나, x 의 오른쪽 방향으로 굴러간다

라는 뜻임

 

addForce
Vec 방향으로 힘을 줌

ForceMode (가속, 무게 반영)
힘을 주는 방식 

 

 

+

 

rigidbody 관련된거 만약 보이드 업데이트에 쓰고 싶으면

FixedUpdate 에 하라고 함

 

+

 

using UnityEngine;

public class RigidTest : MonoBehaviour
{

    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
        rigid.AddForce(Vector3.up * 1, ForceMode.Impulse);

    }

}

 

Y축, 위로 통 하고 튀어오르는 건  Impulse 를 포함한 이런 코드를 쓴다 함

 

점프 할 때 쓰임.

 

rigid body 콤포넌트 의 mass 무게가 높을수록 저 스크립트 안 Vector3.up*1 이 값을 높여야 잘 튐

 

+

 

using UnityEngine;

public class RigidTest : MonoBehaviour
{

    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();


    }
    void FixedUpdate()
    {
        if (Input.GetButtonDown("Jump"))
        {
            rigid.AddForce(Vector3.up * 2, ForceMode.Impulse);
        }
    }

}

 

space 바 를 누르면 점프가 되게 구현한 예시

 

+

 

using UnityEngine;

public class RigidTest : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();

    }
    void FixedUpdate()
    {
        if (Input.GetButtonDown("Jump"))
        {
            rigid.AddForce(Vector3.up * 1, ForceMode.Impulse);
        }

        Vector3 vec = new Vector3
            (
        Input.GetAxisRaw("Horizontal"), //x 축
        0,//y 축
        Input.GetAxisRaw("Vertical") //z 축
            );
        rigid.AddForce(vec / 2, ForceMode.Impulse);
    }
}

 

x 축 이동은 화살표 왼오

z 축 이동은 화살표 위아래

 

y 축 점프는 스페이스 바

 

이렇게 이동시키게 만들기

 

+

 

rigid.AddTorque 이러면 회전력을 주는 것이다

 

 

down 이라고 하면 오른쪽으로 돎

up 이라고 하면 왼쪽으로 돎

 

+

 

 

반응형
Posted by 이름이 익명
: