Unity 소스가 블락을 파괴해서 조금 있으면 원상태로 돌아갑니다
12106 단어 Unity
개시하다
저번 이후
블록을 파괴하고 원상태로 복원해 보세요.
장거리 달리기 선수라면 좌우 발 옆에 쌓인 나무가 빛깔?그래서 가장 큰 특징은 깎았다는 거예요. 왜 조금 지나면 부활하는지 모르겠어요.애니메이션 효과를 잠시 한쪽에 놓고 이렇게 해 보세요.
빔이 좌우로 움직일 수 있기 때문에 왼쪽 =Z
, 오른쪽 =X
를 누르면 빔이 나온다.
이번 포인트.
파괴할 수 있는 블록을 지목합니다.
어떤 블록을 파괴할 수 있는지 판단하는 방법이 몇 개 있는 것 같아요.
모처럼그래서 최대한 유니티의 당첨 판정을 사용하기로 했다.
레이캐스트란 레이(빛)를 캐스트에 던지는 것을 뜻한다
한 점에서 선을 그어 충돌하는 Object와 장소를 조사하는 기능입니다.
대략적인 절차는 다음과 같다.
Z
또는 X
"을 눌렀을 때HitGun
메시지를 블록다음 코드를
UnityChanDemo1.cs
의 Update()
방법 아래에 추가합니다.hitgun
// Gun
int gun = Input.GetKey(KeyCode.Z) ? -1 : Input.GetKey(KeyCode.X) ? 1 : 0;
if (gun != 0 && !isFalling) {
RaycastHit hit;
Vector3 fromPos = transform.position+Vector3.up;
Vector3 direction = new Vector3(gun, -1, 0);
float length = 1.8f;
Debug.DrawRay(fromPos, direction.normalized * length, Color.green, 1, false);
if (Physics.Raycast(fromPos, direction, out hit, length)) {
if (canDestroyBlock(hit.transform)) {
hit.transform.gameObject.SendMessage("HitGun");
}
}
}
마찬가지로 canDestroyBlock()을 추가합니다.canDestroyBlock 방법
private bool canDestroyBlock(Transform block) {
return
block.tag == BLOCK &&
Mathf.Abs(block.position.x - transform.position.x) < 1.2f &&
transform.position.y - block.position.y > 0.3;
}
그나저나 UnityChanDemo1.cs의 전체 상황은 이렇다.Physics.Raycast 사용
Physics.Raycast(始点、方向、Hit時にセットされるObject、判定する距離)
이런 느낌으로 사용하세요.히트인 경우 반환 값이 True로 변경되고 hit 객체에 값이 입력됩니다.
기본적으로 이 Object의 태그가
Block
라면 망가뜨릴 수도 있다.다만, 고도의 제한이 있어 맞은편 블록을 없애지 않는 사소한 조건도 있다
실제 파괴할 수 있는지
canDestoryBlock()
의 방법으로 상세한 조사를 진행하다.고장날 것으로 판단되면 Object
SendMessage
까지 메시지를 보내HitGun
.Debug.DrawRay로 Raycast 확인
제작 과정에서 생각한 대로 판정할 수 없는 원인을 조사하거나 레이카스트를 미세하게 조정할 때 실제 레이카스트의 빛을 볼 수 있다면 편리하다.DrawRay를 사용하면 그게 쉬울 거예요.
Debug.DrawRay(始点、方向、色、表示時間、depthTest [カメラから見えない場合に非表示にするか]))
이렇게 사용하세요.다만 이 DrawRay는 Game View에 일반적으로 표시되지 않으므로 주의해야 할 점이 있습니다.
Game View에 표시하려면
Gizmos
를 사용해야 합니다. (처음에는 이것을 몰랐습니다.)다음 그림의 오른쪽 위 구석을 누릅니다.레이어를 바꿔, 쓸데없는 걸 히트로 만들지 마.
이번에는 유닛 소스의 머리 위로 비스듬히 내려온 라이캐스트.
실제로 블록을 맞히기 전에 라이캐스트는 유닛 자신에게 부딪힌다.
나 이거 진짜 찾고 싶은 블락인 줄 몰랐어.또 사다리인 가로대에 부딪힌 것도 문제다.
이에 따라'Unity','사다리','바'등 세 개의 레이어는
Ignore Raycast
라는 이름의 레이어에게 배정됐다.Raycast 할 때 거의 이 Layer를 무시했는데 이번에는 딱 좋아요.
여러 Raycast를 관리하면 Raycast의 다섯 번째 매개 변수에도 LayerMask가 있기 때문에 이것을 사용할 수 있을 것 같다(이번에는 사용하지 않는다).
Prefab에 수정 사항 적용
설명이 늦었어요.
Prefab에서 실체화된 GameObject의 속성(예를 들어 Layer의 변경)을 변경할 때 Inspector
Apply
단추를 누르면 대본의 Prefab에 반영되어 다른 모든 GameObject에 적용됩니다.편하네.반대로
Revert
를 누르면 게임 Object에서 원래 Plefab의 속성으로 덮어쓰여 수정됩니다.Select
를 누르면 원래 Plefab이 표시됩니다.Block 숨기고 있다가 다시 회복
만약 모든 것이 순조롭게 진행된다면 블록 대상에게 HitGun
메시지를 보낼 것이다.
하지만 지금은 그것을 처리할 방법이 없기 때문에 Constore에 오류가 표시됩니다.
Block에 스크립트 추가
BlockControl.cs라는 C# 스크립트를 작성하여 Block의 아이 큐브와 연결합니다.
실제 판정(Collider)은 이 큐브가 보유한 것이고, SendMessage의 대상은 이 큐브이기 때문이다.
다음 처리 추가:.
HitGun
메시지를 받은 후 Timer를 설정합니다.이번에는 180프레임(약 3초)이다.Update()
에서는 Timer의 값이 하나씩 줄고 0이 아닌 경우collider
(충돌 판정), renderer
(그리기)는 무효BlockControl.cs
using UnityEngine;
using System.Collections;
public class BlockControl : MonoBehaviour {
private const int DISAPPEAR_TIMER_COUNT = 60*3;
private int disappearTimer = 0;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (disappearTimer > 0) {
disappearTimer--;
}
renderer.enabled = collider.enabled = disappearTimer == 0;
}
void HitGun() {
if (disappearTimer > 0) {
return;
}
disappearTimer = DISAPPEAR_TIMER_COUNT;
}
}
최후
대충 괜찮나요?만들면 유닛 소스가 블락에 끼어서 꼼짝을 못해요.
블락이 망가져서 원래 위치로 돌아가고 애니메이션도 만들고 싶네요.
애니메이션의 과제가 산더미 같아...
이번에는 여기서 WebPlayer에서 보실 수 있어요.입니다.
소스 코드는 Giithub에 공개하고 있습니다.입니다.
Reference
이 문제에 관하여(Unity 소스가 블락을 파괴해서 조금 있으면 원상태로 돌아갑니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mokemokechicken/items/7d9abe11e99d2235092b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Unity 소스가 블락을 파괴해서 조금 있으면 원상태로 돌아갑니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mokemokechicken/items/7d9abe11e99d2235092b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)