반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControler2 : MonoBehaviour { public float speed = 15f;//캐릭터 이동속도 private Rigidbody rb; private int floorLayerMask;//마우스 레이케스트에 필요한 레이어 private const float maxDistance = 1000f;// 레이캐스트 최대거리 public void Awake() { rb = GetComponent<Rigidbody>(); floorLayerMask = LayerMask.GetMask("Floor"); } public void FixedUpdate() { Move(); Turning(); } private void Move() { var h = Input.GetAxisRaw("Horizontal"); var v = Input.GetAxisRaw("Vertical"); var direction = new Vector3(h, 0.0f, v); direction.Normalize(); var deltaPos = direction * speed * Time.deltaTime; var nextPos = transform.position + deltaPos; rb.MovePosition(nextPos); } private void Turning() { //UnityEngine.Ray라는 클래스 사용 //Camera.main.ScreenPointToRay(Input.mousePosition) 암기 var ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //Physics.Raycast는 Ray 광선 + RaycastHit 결과 + 거리 + (마스크) 로 구성 //레이 정보가 없으면 함수 종료 if (!Physics.Raycast(ray, out hit, maxDistance, floorLayerMask)) return; Vector3 playerToMouse = hit.point - transform.position; playerToMouse.y = 0f; //Quaternion.LookRotation -> 현재 내 로테이션에서 바라보는곳 로테이션 구함?? Quaternion newRotatation = Quaternion.LookRotation(playerToMouse); //RigidBody.포지션,로테이션 rb.MoveRotation(newRotatation); } } | cs |
반응형
'etc-posts > Unity :: C# 튜토리얼' 카테고리의 다른 글
[유니티C#][기초] 6.플레이어 슈팅 2 (0) | 2018.07.08 |
---|---|
[유니티 C#][기초] 5.플레이어 슈팅 1 (0) | 2018.07.08 |
[유니티 C#][기초] 3. 씬에 스크립트로 큐브 100개 생성하기 (0) | 2018.07.08 |
[유니티C#][기초] 2. 특정 오브젝트를 카메라가 따라오가게 하기 (0) | 2018.07.08 |
[유니티C#][기초] 1.유니티로 마우스 키보드 입력 받기 (0) | 2018.07.08 |