欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑暗之光

程序员文章站 2022-06-13 21:30:16
...

1.实现标签管理的代码

黑暗之光

2.实现点击地面出现点击特效的代码

黑暗之光

黑暗之光

3.实现人物鼠标点击的朝向

黑暗之光

4.控制任务的的动画播放

黑暗之光

5.相机的跟随和视野效果代码

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

public class FollowPlayer : MonoBehaviour {


    private Transform player;
    private Vector3 offsetPosition;

    public float distance = 0;
    public float scrollSpeed = 10.0f;
    private bool isRotate = false;
    public float rotateSpeed = 10.0f;
	void Start () {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        offsetPosition = transform.position - player.position;
        transform.LookAt(player.position);   //朝向主角
	}
	
	// Update is called once per frame
	void Update () {
        transform.position = offsetPosition + player.position;
        ScrollView();
        RotateView();
	}
    void ScrollView()   //处理视野的拉近和拉远效果
    {
     //  print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值(拉近视野)向前滑动 返回正值 (拉远视野)
        distance = offsetPosition.magnitude;  //magnitude 计算偏移的距离
        distance += Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
        distance = Mathf.Clamp(distance, 2, 18);  //Clamp限制某个变量的范围
        offsetPosition = offsetPosition.normalized * distance;    //normalized 当前向量
      
          
     
    }
      void RotateView()
    {
        //Input.GetAxis("Mouse X");  //得到鼠标在水平方向的滑动
        //Input.GetAxis("Mouse Y"); //得到鼠标在垂直方向的滑动
        if (Input.GetMouseButtonDown(1))
        {
            isRotate = true;
        }
        if (Input.GetMouseButtonUp(1))  
        {
            isRotate = false;

        }
        if (isRotate)
        {
            transform.RotateAround(player.position, player.up,rotateSpeed * Input.GetAxis("Mouse X"));
            Vector3 originalPos = transform.position;
            Quaternion originalRotation = transform.rotation;
          
            transform.RotateAround(player.position, transform.right,- rotateSpeed * Input.GetAxis("Mouse Y"));  //影响的属性有两个,一个position,一个rotation
            float x = transform.eulerAngles.x;
            if (x < 10 || x > 80)   //范围限制
            {
                transform.position = originalPos;
                transform.rotation = originalRotation;
            }
        }
        offsetPosition = transform.position - player.position;  
    }
}

6.NPC的制作

任务系统

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

public class BarNPC : NPC {

    public TweenPosition questTween;
    public bool isInTask = false;  //表示是否在任务中
    public int killCount = 0;  //表示任务进度,已经杀死几只野狼
    public UILabel desLabel;   //任务描述
    //引用三个按钮
    public GameObject acceptBtnGo;
    public GameObject okBtnGo;
    public GameObject cancelBtnGo;

    public GameObject quest; 


    private PlayerStatus status;  //人物状态脚本对象的定义
     void Start()
    {
       status = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerStatus>();   //获得一个脚本,去使用另一个脚本的方法
    }


    void OnMouseOver()  //当鼠标位于这个collider之上,会在每一帧调用这个方法
    {

        if (Input.GetMouseButtonDown(0))   //当点击了老爷爷,会调用显示面板的方法
        {
          if (isInTask)
            {
                ShowTaskProgress();
            }
            else
            {
                ShowTaskDes();
           }
            ShowQuest();
        }
    }
    void ShowQuest()    //显示面板
    {
        questTween.gameObject.SetActive(true);
        questTween.PlayForward();  //向前播放
    }

    void HideQuest()  //隐藏面板
    {
        questTween.PlayReverse();  //向后播放
        questTween.gameObject.SetActive(false);
      //  quest.SetActive(false);

    }
    

    public void ShowTaskDes()   //显示任务描述的方法   ok按钮
    {
        desLabel.text = "任务:\n 杀死了10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(false);
        acceptBtnGo.SetActive(true);
        cancelBtnGo.SetActive(true);
    }

    public void  ShowTaskProgress()   //显示任务进程的方法  接受按钮
    {
        desLabel.text = "任务:\n 你已经杀死了" + killCount + "\\n 10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(true);
        acceptBtnGo.SetActive(false);
        cancelBtnGo.SetActive(false);
    }
    public void OnCloseButton()   //  关闭按钮
    {
        HideQuest();
    }
    //任务系统  任务对话框上的按钮点击时间的处理
    public void OnAcceptButtonClick()
    {
        ShowTaskProgress();
        isInTask = true;//表示在任务中
    }


    public void OnOkButton()   //Ok按钮
    {
        if (killCount >= 10)
        {  //完成任务
            status.GetCoint(1000);  //调用PlayerStatus脚本里获得GetCoint的方法
            killCount = 0;
            ShowTaskDes();


        }
        else
        {//没有完成任务
            HideQuest();
        }
        
    }
    public void OnCancelButton()  //取消按钮
    {
        HideQuest();
    }
    

}

7.点击不同物体显示不同的图标

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

public class CursorManager : MonoBehaviour {
    //设置单例模式,其他脚本可以调用这个脚本的方法
    public static CursorManager _instance;


    public Texture2D cursor_normal;
    public Texture2D cursor_npc_talk;
    public Texture2D cursor_attack;
    public Texture2D cursor_lockTagret;
    public Texture2D cursor_pick;

    private Vector2 hotspot = Vector2.zero;     //保持原来的位置
    private CursorMode mode = CursorMode.Auto;   //自动选择模式
	void Start () {
        _instance = this;   //等于当前脚本
		
	}
    
    public void SetNormal() {    //设置正常的图标
        Cursor.SetCursor(cursor_normal, hotspot, mode);

    }
    public void SetNpcTalk()    //设置对话的图标
    {
        Cursor.SetCursor(cursor_npc_talk,hotspot,mode);
    }
}