综合案例:如图

12592782da3f4a65964a6c7c5d1fdef8.jpg

 1.代码~

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class ContralMove : MonoBehaviour

{

    //控制人物移动鼠标控制人物旋转

    public float Movespeed = 10f;

    public float Rotatespeed = 10f;

    float RotationX;

    float RotationY;

    // Start is called before the first frame update

    void Start()

    {

       

    }

 

    // Update is called once per frame

    void Update()

    {

 

        if (Input.GetKey(KeyCode.W))

        {

            this.transform.Translate(new Vector3(0, 0, 1 * Movespeed * Time.deltaTime));

        }

        if (Input.GetKey(KeyCode.S))

        {

            this.transform.Translate(new Vector3(0, 0, -1 * Movespeed * Time.deltaTime));

        }

        if (Input.GetKey(KeyCode.A))

        {

            this.transform.Translate(new Vector3(-1 * Movespeed * Time.deltaTime, 0, 0));

        }

        if (Input.GetKey(KeyCode.D))

        {

            this.transform.Translate(new Vector3(1 * Movespeed * Time.deltaTime, 0, 0));

        }

        float RotateX = Input.GetAxis("Mouse X");

        float RotateY = Input.GetAxis("Mouse Y");

        RotationX += RotateX * Rotatespeed * Time.deltaTime;

        RotationY += RotateY* Rotatespeed * Time.deltaTime;

        this.transform.rotation = Quaternion.Euler(RotationX, RotationY, 0);

    }

    //旋转角度限制

    void LimitRotateX()

    {

 

        RotationX = Mathf.Clamp(RotationX, -30f, 30f);

    }

}

2.摄像机平滑跟踪0b37e0d936ec457d8c081c17968b5755.png

 

向屏幕中间发射射线代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class RayToscreenMid : MonoBehaviour

    Camera MianCamea;

        Vector3 ScreenMidPos;

    // Start is called before the first frame update

    void Start()

    {

        ScreenMidPos = new Vector3(Screen.width / 2, Screen.height/2,0);

    }

 

    // Update is called once per frame

    void Update()

    {

        if (Input.GetMouseButtonDown(0))

        {

            RayShot();

        }

    }

    private void RayShot()

    {

        Ray OneShotRay = Camera.main.ScreenPointToRay(ScreenMidPos);

        RaycastHit OnEnemy;

        if(Physics.Raycast(OneShotRay,out OnEnemy))

        {

            Debug.Log("发射射线成功");

            if(OnEnemy.transform.name!="Terrain"&& OnEnemy.transform.name != "Role"&&OnEnemy.transform.name!= "MonsterCenterPOS"&&OnEnemy.transform.name!= "OneMonsterPre")

            {

                Destroy(OnEnemy.transform.gameObject);

                Debug.Log("销毁对方");

                if(ScreenMidPos!=null)

                {

                    Debug.DrawLine(Camera.main.transform.position, ScreenMidPos, Color.red, 10000f);

                }

            }

        }

    }

}

自动刷怪代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreatMonster : MonoBehaviour
{
    // S这个脚本间隔一点时间生成怪物
    /*1.程序逻辑
     * 1. 设计一个计时器
     * 2.间隔一段时间3s执行一下     * 
     */
    float SaveTime = 0f;
    public GameObject OneMonsterPre;
    public Transform MonsterCenterPOS;
    float CloneX;
    float CloneZ;

    // Update is called once per frame
    void Update()
    {
        SaveTime += Time.deltaTime;
        if (SaveTime >= 3)
        {
            Debug.Log("时间超过3秒");
            SaveTime = 0;
            CloneMonster();
        }
    }//endupdate

    void CloneMonster()
    {
        Debug.Log("生成随机数");
        for (int i = 0; i < 10; i++)
        {
            CloneX = Random.Range(1f, 100f) + MonsterCenterPOS.position.x;
            CloneZ = Random.Range(1f, 300f) + MonsterCenterPOS.position.z;

            Vector3 TempPos = new Vector3(CloneX, MonsterCenterPOS.position.y, CloneZ);
            Debug.Log("随机坐标" + TempPos);
            GameObject TempOBJ = GameObject.Instantiate(OneMonsterPre, TempPos, Quaternion.Euler(new Vector3(Random.Range(10, 80), 0, Random.Range(10, 80))));
            Destroy(TempOBJ, 3f);
        }
    }
}//endclass

加分,暂未实现🤫🤫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值