unity] 목표물 방향으로 바라보면서 따라가기 followTarget, LootAt Target
1. 설정(태그 방식으로 안해도 됨 hierarchy name명으로 해도 됨.)
2. 오브젝트 설정
메인 오브젝트
작은 오브젝트
3. C#코드 test와 SmallCube
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour {
int countSmallCube;
private void Start()
{
countSmallCube = 0;
}
private void OnTriggerEnter(Collider col)
{
if (col.tag == "SmallCube")
{
countSmallCube++;
// 1번째만 메인 오브젝트를 따라가고 다음부터 작은 오브젝트만 따라가게 string 타켓네임을 바꾼다.
if (countSmallCube > 1) col.GetComponent<SmallCube>()._targetName = "SmallCube" + (countSmallCube - 1).ToString();
// 오브젝트의 태그명을 바꿈
col.gameObject.tag = "SmallCube" + countSmallCube.ToString();
col.GetComponent<SmallCube>().TargetFind();
col.GetComponent<SmallCube>()._touch = true;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SmallCube : MonoBehaviour {
public string _targetName = "Cube";
Transform _target;
public bool _touch = false;
private float dampSpeed = 3; // 따라가는 속도
// Update is called once per frame
void Update () {
if (_touch == true) FollowTarget();
}
public void TargetFind()
{
// 타겟 string을 바꿈
_target = GameObject.FindGameObjectWithTag(_targetName).GetComponent<Transform>();
}
void FollowTarget()
{
// Gets a vector that points from the player's position to the target's.
var heading = _target.position - this.transform.position;
// 거리가 멀어지면 실행
if (heading.sqrMagnitude > 1)
{
// Target is within range.
transform.position = Vector3.Lerp(transform.position, _target.position, Time.deltaTime * dampSpeed);
}
// 방향을 봄
transform.LookAt(_target);
}
}
해당 소스의 기능 들을 이용하면 다양하게 응용할 수 있어서 가져옴.
해당 소스는 꼬리물기 게임의 예제이다.
'IT이야기 > unity,c#' 카테고리의 다른 글
unity 2019버전 모바일 화면 회전 설정 (0) | 2020.06.15 |
---|---|
unity] 오브젝트 피격제어 예제! (0) | 2020.04.03 |
유니티] 오브잭트 랜덤 배치 예제 (0) | 2020.02.06 |
unity] 가로 세로 변경하기 (0) | 2019.11.15 |
C# unity게임만들기 기초 문법(수정예정) (0) | 2019.09.07 |