[유니티] 포톤 애니메이션 연동하기
API
추가할 애니메이션 클립을 애니메이션 컨트롤러에 추가하고
Parameter에서 클립이 실행될 조건을 추가한다.
IsDead가 참일때 캐릭터가 죽는 모션 실행.
플레이어의 컴포넌트에 Photon Animator View의
IsDead 파라미터를 동기화 상태를 'Continuous'로 변경해준다.
추가 할 스크립트
Reference :전체 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
public class Shooting : MonoBehaviourPunCallbacks
{
public Camera FPS_camera;
public GameObject hitEffectPrefab;
[Header("Health Related Stuff")]
// 시작 체력을 실수형 변수에 100으로 담는다.
public float startHealth = 100;
private float health;
public Image healthBar;
//애니메이터 변수 선언
private Animator animator;
private void Start()
{
//초기 체력을 starthealth로 설정
health = startHealth;
//heath bar 이미지 채워지는 영역 startHealth에 비례해서 설정;
healthBar.fillAmount = health / startHealth;
//Animator 컴포넌트를 찾아서 할당
animator = GetComponent<Animator>();
}
public void Fire()
{
RaycastHit _hit;
Ray ray = FPS_camera.ViewportPointToRay(new Vector3(0.5f, 0.5f));
if(Physics.Raycast(ray, out _hit, 1000))
{
Debug.Log(_hit.collider.gameObject.name);
// CreatedHitEffect 를 모든 클라이언트가 볼 수 있도록 Pun RPC이용해 호
photonView.RPC("CreatedHitEffect", RpcTarget.All, _hit.point);
}
//감지해온 콜라이더의 태그가 플레이어일 경우 && 자기자신이 아닌 경우
if(_hit.collider.gameObject.CompareTag("Player") && !_hit.collider.gameObject.GetComponent<PhotonView>().IsMine)
{
//RPC(다른 모든 클라이언트들에게 메소드를 전파하는 역할
//RPC("실행할 메소드", 메소드를 전파받을 대상, 메소드에 입력할 매개변수);
_hit.collider.gameObject.GetComponent<PhotonView>().RPC("TakeDamage", RpcTarget.AllBuffered, 10f);
}
}
// RPC용 메서드이므로 PunRPC attribute를 추가
[PunRPC]
public void TakeDamage(float _Damage, PhotonMessageInfo info)
{
// 입력받은 데미지 만큼 체력 차
health -= _Damage;
// 체력 게이지바 업데이트
healthBar.fillAmount = health / startHealth;
Debug.Log(health);
if(health <= 0 )
{
Die();
// Sender는 메소드를 보내주는 객체 즉, 데미지를 가하는 객체
// Owner는 전파받은 메소드를 스스로 실행해주는 해당 객체기 때문에 데미지를 입은 객체
Debug.Log(info.Sender.NickName + " killed" + info.photonView.Owner.NickName);
}
}
// RPC용 메서드, HitEffect가 Room내의 모든 플레이어가 볼 수 있도록 한다.
[PunRPC]
public void CreatedHitEffect(Vector3 position)
{
GameObject hitEffectGameObeject = Instantiate(hitEffectPrefab, position, Quaternion.identity);
Destroy(hitEffectGameObeject, 0.5f);
}
void Die()
{
//플레이어가 피격되었을 때만 실행되므로
if(photonView.IsMine)
{
// 애니메이터의 IsDead 컨디션을 트루로 변경
animator.SetBool("IsDead", true);
}
}
}
Author And Source
이 문제에 관하여([유니티] 포톤 애니메이션 연동하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@marintelli/유니티-포톤-애니메이션-연동하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
public class Shooting : MonoBehaviourPunCallbacks
{
public Camera FPS_camera;
public GameObject hitEffectPrefab;
[Header("Health Related Stuff")]
// 시작 체력을 실수형 변수에 100으로 담는다.
public float startHealth = 100;
private float health;
public Image healthBar;
//애니메이터 변수 선언
private Animator animator;
private void Start()
{
//초기 체력을 starthealth로 설정
health = startHealth;
//heath bar 이미지 채워지는 영역 startHealth에 비례해서 설정;
healthBar.fillAmount = health / startHealth;
//Animator 컴포넌트를 찾아서 할당
animator = GetComponent<Animator>();
}
public void Fire()
{
RaycastHit _hit;
Ray ray = FPS_camera.ViewportPointToRay(new Vector3(0.5f, 0.5f));
if(Physics.Raycast(ray, out _hit, 1000))
{
Debug.Log(_hit.collider.gameObject.name);
// CreatedHitEffect 를 모든 클라이언트가 볼 수 있도록 Pun RPC이용해 호
photonView.RPC("CreatedHitEffect", RpcTarget.All, _hit.point);
}
//감지해온 콜라이더의 태그가 플레이어일 경우 && 자기자신이 아닌 경우
if(_hit.collider.gameObject.CompareTag("Player") && !_hit.collider.gameObject.GetComponent<PhotonView>().IsMine)
{
//RPC(다른 모든 클라이언트들에게 메소드를 전파하는 역할
//RPC("실행할 메소드", 메소드를 전파받을 대상, 메소드에 입력할 매개변수);
_hit.collider.gameObject.GetComponent<PhotonView>().RPC("TakeDamage", RpcTarget.AllBuffered, 10f);
}
}
// RPC용 메서드이므로 PunRPC attribute를 추가
[PunRPC]
public void TakeDamage(float _Damage, PhotonMessageInfo info)
{
// 입력받은 데미지 만큼 체력 차
health -= _Damage;
// 체력 게이지바 업데이트
healthBar.fillAmount = health / startHealth;
Debug.Log(health);
if(health <= 0 )
{
Die();
// Sender는 메소드를 보내주는 객체 즉, 데미지를 가하는 객체
// Owner는 전파받은 메소드를 스스로 실행해주는 해당 객체기 때문에 데미지를 입은 객체
Debug.Log(info.Sender.NickName + " killed" + info.photonView.Owner.NickName);
}
}
// RPC용 메서드, HitEffect가 Room내의 모든 플레이어가 볼 수 있도록 한다.
[PunRPC]
public void CreatedHitEffect(Vector3 position)
{
GameObject hitEffectGameObeject = Instantiate(hitEffectPrefab, position, Quaternion.identity);
Destroy(hitEffectGameObeject, 0.5f);
}
void Die()
{
//플레이어가 피격되었을 때만 실행되므로
if(photonView.IsMine)
{
// 애니메이터의 IsDead 컨디션을 트루로 변경
animator.SetBool("IsDead", true);
}
}
}
Author And Source
이 문제에 관하여([유니티] 포톤 애니메이션 연동하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@marintelli/유니티-포톤-애니메이션-연동하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)