[Unity] Mesh 누르면 변형하기 / 물체 찌그러트리기 / 물체 매쉬 변형 / Mesh Deformation

2024. 12. 11. 16:04·HCI/Graphics
728x90
반응형

https://catlikecoding.com/unity/tutorials/mesh-deformation/

 

Mesh Deformation, a Unity C# Tutorial

A Unity C# scripting tutorial in which you will deform a mesh, turning it into a stress ball.

catlikecoding.com

여기서 있는 코드를 변형했습니당

 

방법은 초간단

 

3D 프로젝트 빌드 후, 위의 사이트에서 패키지를 받아주고, 임포트해줍니다

 

저는 Move Vertices 를 변형해서 써보겠습니다

패키지 받고 더블클릭하면 자동으로 유니티에서 화면이 뜹니다.

 

그리고 해당 패키지에서 제공하는 샘플 Scene 을 켜줍니다

이름은 그냥 Scene 이라고 돼있음

 

여기서 MeshDeformer.cs 코드를 아래와 같이 수정합니다

using UnityEngine;

[RequireComponent(typeof(MeshFilter))]
public class MeshDeformer : MonoBehaviour
{

    Mesh deformingMesh;
    Vector3[] originalVertices, displacedVertices;
    Vector3[] vertexVelocities;

    void Start()
    {
        deformingMesh = GetComponent<MeshFilter>().mesh;
        originalVertices = deformingMesh.vertices;
        displacedVertices = new Vector3[originalVertices.Length];
        for (int i = 0; i < originalVertices.Length; i++)
        {
            displacedVertices[i] = originalVertices[i];
        }
        vertexVelocities = new Vector3[originalVertices.Length];
    }

    void Update()
    {
        for (int i = 0; i < displacedVertices.Length; i++)
        {
            UpdateVertex(i);
        }
        deformingMesh.vertices = displacedVertices;
        deformingMesh.RecalculateNormals();
    }

    void UpdateVertex(int i)
    {
        Vector3 velocity = vertexVelocities[i];
        displacedVertices[i] += velocity * Time.deltaTime;
        // 감속을 통해 변위가 천천히 멈추도록 함
        vertexVelocities[i] *= 0.9f; // 감속 계수, 0.9로 설정해 조금씩 느려지게 함
    }

    public void AddDeformingForce(Vector3 point, float force)
    {
        point = transform.InverseTransformPoint(point);
        for (int i = 0; i < displacedVertices.Length; i++)
        {
            AddForceToVertex(i, point, force);
        }
    }

    void AddForceToVertex(int i, Vector3 point, float force)
    {
        Vector3 pointToVertex = displacedVertices[i] - point;
        float attenuatedForce = force / (1f + pointToVertex.sqrMagnitude);
        float velocity = attenuatedForce * Time.deltaTime;
        vertexVelocities[i] += pointToVertex.normalized * velocity;
    }
}

// 사용 예시:
// 특정 지점에 힘을 가하려면, 다른 스크립트에서 AddDeformingForce 메서드를 호출하여 변형시킬 수 있습니다.
// 예: meshDeformer.AddDeformingForce(충돌 지점, 힘 크기);
728x90
반응형

'HCI > Graphics' 카테고리의 다른 글

[Geomagic Touch] Unity 환경에서 Open Haptics를 활용해 지오매직 터치 사용하기 (2) Unity Asset 설치하기  (0) 2024.11.26
[Geomagic Touch] Unity 환경에서 Open Haptics를 활용해 지오매직 터치 사용하기 (1) Haptics Device 연결하기  (0) 2024.11.26
[Unity] Meta quest 3 (메타 퀘스트3)- AR 프로젝트 생성하기 / 메타 퀘스트3  (3) 2024.11.05
[Unity] 3D 프로젝트로 AR 구현  (0) 2024.11.04
[Unity] Meta Quest 3 Qculus 연결하기  (1) 2024.10.29
'HCI/Graphics' 카테고리의 다른 글
  • [Geomagic Touch] Unity 환경에서 Open Haptics를 활용해 지오매직 터치 사용하기 (2) Unity Asset 설치하기
  • [Geomagic Touch] Unity 환경에서 Open Haptics를 활용해 지오매직 터치 사용하기 (1) Haptics Device 연결하기
  • [Unity] Meta quest 3 (메타 퀘스트3)- AR 프로젝트 생성하기 / 메타 퀘스트3
  • [Unity] 3D 프로젝트로 AR 구현
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    programmers
    백준
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[Unity] Mesh 누르면 변형하기 / 물체 찌그러트리기 / 물체 매쉬 변형 / Mesh Deformation
상단으로

티스토리툴바