#c

질문유니티 충돌관련 질문있습니다 충돌이 뚫리네요

제가 플레이어에 캡슐콜라이더 컴포넌트 추가하고 wall오브젝트에 box콜라이더 추가한다음에 rigidbody설정에 collision Detection도 Continuous로 해줬는데도 플레이어가 벽에 가서 비비적대면 천천히 뚫어버리는 상황이 발생하는데 해결법이 있을까요 플레이어 이동방법으론 transform.position을 증가시키는 방법으로 하였습니다. 이유를 좀 알아보니까 속도가 빨라서 그런거 같은데 이게 해결방법이 없을까요? Player 스크립트 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float speed; float hAxis; float vAxis; bool wDown; Vector3 moveVec; Animator anim; // Start is called before the first frame update void Awake() { anim = GetComponentInChildren<Animator>(); } // Update is called once per frame void Update() { hAxis = Input.GetAxisRaw("Horizontal"); vAxis = Input.GetAxisRaw("Vertical"); wDown = Input.GetButton("Walk"); moveVec = new Vector3(hAxis, 0, vAxis).normalized; transform.position += moveVec*speed*Time.deltaTime; transform.position += anim.SetBool("isRun", moveVec != Vector3.zero); anim.SetBool("isWalk", wDown); } }
370
2
0
데브게므
데브게므·2023-06-20
유니티에서는 충돌 감지와 처리를 위해 물리 엔진을 사용합니다. transform.position을 직접 수정하면 물리 엔진을 우회해서 움직이게 됩니다. 이 경우, 충돌이 제대로 처리되지 않을 수 있습니다. 게임 오브젝트를 물리 엔진을 통해 움직이려면 Rigidbody 컴포넌트의 메서드를 사용해야 합니다. Rigidbody의 velocity 속성을 수정하...

질문유니티 콜라이더 터널링 해결방법없나요

플레이어 RigidBody에 설정에 collision detaction도 continuous 로 바꿔보고 해도 speed값 15만 넣어도 박스콜라이더 비집고 들어가네요
555
1
0
데브게므
데브게므·2023-06-20
아래와 같은 방법들로 콜라이더 터널링 현상을 최소화하는 방법들이 있습니다. Collision Detection 모드 변경: Rigidbody의 Collision Detection 모드를 Continuous Dynamic으로 설정해보세요. 이 모드는 연속 충돌 감지를 활성화하여 터널링을 감소시킬 수 있습니다. 그러나 이 모드는 연산 비용이 높아질 수 있으므로...

질문유니티 화살에 맞았을 시 적의 색을 바꾸려고 하는데요

화살의 태그를 Arrow로 하고 private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Arrow") { //데미지 hp--; speed /= 2; Invoke("RemindSpeed", 2.5f); isheat = true; if (hp <= 0) { //사망! //===================== //사망 연출 //===================== //출돌 판정 비활성 GetComponent<CircleCollider2D>().enabled = false; //이동 정지 rbody.velocity = new Vector2(0, 0); // 애나메이션 변경 Animator animator = GetComponent<Animator>(); animator.Play(deadAnime); //0.5초 후에 제거 Destroy(gameObject, 0.5f); } } } } 이렇게 충돌함수 정의하고 SpriteRenderer Esprite; 선언하고 start함수에 Esprite = GetComponent();해준뒤 void Update() { if(isheat) //문제발생 { Debug.Log("isheat"); Esprite.color = new Color(1f, 0f, 0f, 1f); } 요렇게 추가했는데 isheat 로그도 뜨는데 색이 안바뀌네요 왜그럴까요 ㅠ
236
1
0
데브게므
데브게므·2023-06-13
Esprite.color = new Color(1f, 0f, 0f, 1f); 코드는 캐릭터의 스프라이트 색상을 빨강으로 바꾸는 코드입니다.  그러나 만약 스프라이트에 적용된 텍스처가 색상 변경을 지원하지 않는다면 코드가 작동하지 않을 수 있습니다. 예를 들어, 스프라이트의 텍스처가 흑백 또는 알파 채널만 가진 텍스처인 경우 색상 변경이 제대로 적...
LZHLZH· 3년

질문c언어 초급 while반복문 질문

1부터 시작해서 10까지 나오는데 중간에 7의 배수를 만나면 생략하는 코드를 짜려고합니다 초기값이 1으로 시작하는 걸로 짰는데  #include <stdio.h> int main() { int i=1; printf("i=%d\n", i); while (i <= 9){ i++; if (i % 7 == 0) continue; printf("i=%d\n", i); } return 0; } printf 두번 하는거 말고 한번에 출력하도록 하는 방법은 없을까요????? 계속 해봐도 2부터나와서...
1.2K
1
1
0
Developer_psj
Developer_psj·2022-06-28
i를 0으로 초기화해보세요!!
JSCPJSCP· 3년

질문어떤 프로그램의 종속형 프로그램은 어떻게 제작하는건가요?

질문의 단어선택이 제대로 됐는지가 모르겠는데 (이것도 아직 배움이 적다는 증거겠죠..ㅠ)   그냥 어떤 목적의 질문이라기 보다는 정말로 궁금해서 그렇습니다.   GTA5같은거 보면 트레일러 라면서 화면에 직접 띄울 수 있고, 이를 이용해서 GTA5 기능을 변조시킬 수 있더라구요.   핵의 일종이라고 생각이 되는데 제 얄팍한 프로그래밍 지식으로는 해당 프로그램의 화면에 뭘 띄우려면 그 프로그램이랑 같이 빌드를 해야 화면에 뭘 띄우든 할꺼같은데 신기하더라구요.   좀 검색해보니깐 저가 알고싶은게 클라이언트 변조 & 메모리 변조 인거 같아요 이걸 어떻게 하는걸까요.....?   제가 생각하기에는 치트엔진 같은게 메모리변조가 가능한거같긴한데  게임을 끄고 킬때마다 메모리 주소가 봐뀌지 않나? 라는 생각에 이게 가능한 해킹 방법인가.. 라는생각밖에안들고 어디서부터 공부를 시작해야할지 정말 감이 하나도 안잡히네요.. 아무나 적은 정보라도 감사하니 답변해주시면 감사하겠습니다.
1.1K
1
0
벨리엣벨리엣· 6년

질문C언어 strcpy질문드립니다

#include <stdio.h> #include <stdlib.h> typedef int element; typedef struct DListNode { // 이중연결 노드 타입 element data; struct DListNode* llink; struct DListNode* rlink; } DListNode; // 이중 연결 리스트를 초기화 void init(DListNode* phead) { phead->llink = phead; phead->rlink = phead; } // 이중 연결 리스트의 노드를 출력 void print_dlist(DListNode* phead) { DListNode* p; for (p = phead->rlink; p != phead; p = p->rlink) { printf("<-| |%d| |-> ", p->data); } printf("\n"); } // 새로운 데이터를 노드 before의 오른쪽에 삽입한다. void dinsert(DListNode *before, element data) { DListNode *newnode = (DListNode *)malloc(sizeof(DListNode)); strcpy(newnode->data, data); newnode->llink = before; newnode->rlink = before->rlink; before->rlink->llink = newnode; before->rlink = newnode; } // 노드 removed를 삭제한다. void ddelete(DListNode* head, DListNode* removed) { if (removed == head) return; removed->llink->rlink = removed->rlink; removed->rlink->llink = removed->llink; free(removed); } // 이중 연결 리스트 테스트 프로그램 int main(void) { DListNode* head = (DListNode *)malloc(sizeof(DListNode)); init(head); printf("추가 단계\n"); int i = 0; for (i = 0; i < 5; i++) { // 헤드 노드의 오른쪽에 삽입 dinsert(head, i); print_dlist(head); } printf("\n삭제 단계\n"); for (i = 0; i < 5; i++) { print_dlist(head); ddelete(head, head->rlink); } free(head); return 0; } 안녕하세요 다름이 아니라 과제중에 코드 오류때문에 다음단계로 넘어가질 못해서 질문드립니다. 위에가 풀코드고 실행시키면  31행에 incompatible implicit declaration of built-in function &#39;strcpy&#39; 라며 오류가 뜨는데 (해당줄은 // 새로운 데이터를 노드 before의 오른쪽에 삽입한다. 밑입니다.) strcpy(newnode->data, data); 이걸 바꿔야 되는건가요?ㅠ  
1.7K
2
0
kimho
kimho·2019-05-26
상단에 #include <string.h>를 추가해보시기 바랍니다. #include <string.h>