Thứ Ba, 6 tháng 12, 2022

code cho unity

 code cho unity

if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))

{ Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance,                     Color.yellow); Debug.Log("Hit"); } else { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000,                         Color.white); Debug.Log("Not Hit"); } } }

ĐẶC BIỆT CÓ CODE ĐỂ  playercontrol có thể dùng Raycast đê xác định khoảng cách của vật thể  đang đến gần  để có thể đưa ra các tương tác thích hợp


Để đèn pin giống thật ta thêm ảnh tì vào cookies của  đền pin  và  ấn phải chuột vào chấm bên cạnh ô vuông mà ta vừa đưa ảnh vào và chọn  Clamp  vì nếu để  Repeat thì vầng sáng sẽ bị lặp rất xấu 
và đưa đoạn code sau vào  player và  sau đó kéo object vào ô  đói tượng 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Flashlight : MonoBehaviour
{
    [SerializeField] GameObject myflashlight;
    private bool FlashlightActive = false; // begining status of Flashlight
    void Start()
    {
                myflashlight.gameObject.SetActive(false);
    }
 void Update()
    {
        {
            if(FlashlightActive == false)
            {
                myflashlight.gameObject.SetActive(true);
                FlashlightActive = true;
            }
            else
            {
                myflashlight.gameObject.SetActive(false);
                FlashlightActive = false;
            }
        }
    }
}


tệp DoorScript

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class DoorScript : MonoBehaviour

{

    // Start is called before the first frame update

    Animator anim;


    void Start()

    {

        anim = GetComponent<Animator>();

    }

    

    void OnTriggerEnter(Collider col)

    {

        anim.SetTrigger("OpenDoor");  // tên trigger này trùng tên khi tạo trigger trên tab animator

    }

    void OnTriggerExit(Collider col)

    {

        anim.enabled = true;

    }

    void pauseAnimationEvent()

    {

        anim.enabled = false;

    }

}

lưu ý trong phần animator thì có 2 node là Idle và Open

state từ Idle  -> Open thì không có  Has Exit Time và  có trigger open

còn ngược lại  state từ  Open ->Idle có Has Exit Time và không có trigger nào cả    Thì nó  mới hoạt động  tốt

cửa có thêm Sphere Collider (mặc định của nó là Transform vaf Animator do ta vừa tạo thôi.

và nhớ tại 0.3s của animation OpenDoor ta thêm event sau đó tại cửa sổ bên phải inspector ta add Function chính  là tên hàm pauseAnimationEvent() mà ta tạo trong DoorScript nếu không khi cửa mở ra , ta đi vào thì cửa tiếp tục animation là nó đóng vào gây khó khăn khi ta đi ra đi vào

-------------------------------------------------------------------------------------------------------------

chuyen dong vat the 3d 

public float speed;

void FixUpdate()

{

        Float step =  Time.DeltaTime * speed;

        gameObject.transform.position =  new Vector3.MoveToward(gameObject.transform.position, Target.position, step);

}

code da test chuan roi

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class autodoor : MonoBehaviour

{

    public Animator doorAnim;

    

    void OnTriggerEnter(Collider col)

    {

        if (col.CompareTag("Player"))

        {

            doorAnim.SetTrigger("open");   // open is a  name of trigger


        }

    }

    void OnTriggerExit(Collider col)

    {

        if (col.CompareTag("Player"))

        {

            doorAnim.SetTrigger("close"); // close is a name of trigger


        }

    }

}

trong do scripts duoc dua vao cai canh  cua chuyen dong len xuong (khong phai la parent  cua canh cua )



viết code  cho cửa ra vào chuẩn nhất



viết code  để khi người chơi tương tác với cái thang (vất thể bất kỳ nào đó)



boxcollider nằm ở Player ta viết:

...// lưu ý you need to change "using UnityStandardAssets.Characters.FirstPerson;" by "using StarterAssets;".

using UnityEngine;

using UnityStandardAssets.Characters.FirstPerson;

public Transform playerController;

bool inside = false;

public FirstPersonController  player;

public float speed =  3f;

void Start()

        {

            player = GetComponent<FirstPersonController>();

                inside = false;

            }

void OnTriggerEnter(Collider col)

{

    if(col.gameObject.Tag = "Ladder")

    {

            Debug,Log("Touching Ladder true");

            Player.enabled = false;

            inside = !inside;

    }

}

void OnTriggerExit(Collider col)

{

    if(col.gameObject.Tag = "Ladder")

    {

            Debug,Log("Touching Ladder false");

            Player.enabled = true;

            inside = !inside;

    }

}

void Update()

{

        if(inside == true && Input.GetKey("w"))

        {

                player.transform.position  += Vector3.up /  speed * Time.deltaTime;

        }

         if(inside == true && Input.GetKey("s"))

        {

                player.transform.position  += Vector3.down /  speed * Time.deltaTime;

        }

        if(inside == true && Input.GetKey("w")

            {

                    sound.enabled =  true;

                    sound.loop =true;

            }

            else

            {

                    sound.enabled =  false;

                    sound.loop = false;

            }

}

code xong ta kéo  scrips vào đối tượng FPSController 

Sau đó ta kéo FPSController vào thuộc tính thuộc phần scripts sau khi đã kéo vào FPSController

muc Player Controller  vào từ non(transform)  thành FPSControlller

và Player từ non thành script FPSController

còn với cái thang ladder ta kéo rộng  box collider của nó to ra hơn so với box mặc định của nó và check vào box is Trigger

Nếu player ở dưới  1 cầu thang có độ dốc thì nó có thể nhìn xuyên qua cầu thang đó để xử lý lỗi này ta thay clipping plan mặc định  từ 0.3 thành 0.1 của player

cũng thuộc player  field of view phần lớn của game ta đặt là 80 thay vì mặ định là 60

---------------------------------------------------------

new clip khi tạo animation là tạo 1 hoạt cảnh ví dụ clip : cửa mở , clip cửa đóng 

để copy clip : Ctrl + C , để dán clip : Ctrl  + V



0 nhận xét: