zoukankan      html  css  js  c++  java
  • 【unity3d游戏开发之基础篇】利用射线实现鼠标控制角色转向和移动(角色移动一)


     由于最近搞2D游戏, 下面的代码配合NGUI来使用 。。。 将代码拖到角色身上就OK, 实现了角色转向、移动 ,想看效果的可以将代码下下来~ 

     用到了向量来计算角度 以及方向,   得恶补下向量知识了 。。。 

    代码参考:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class Test : MonoBehaviour {
     5     
     6     private bool flagMove;
     7     private RaycastHit hit;
     8     private Vector3 mousePos;
     9     private Vector3 targetDir;
    10     // Use this for initialization
    11     void Start () 
    12     {
    13         flagMove = false;
    14     }
    15     
    16     void Update ()
    17     {
    18  
    19         if(Input.GetMouseButtonDown(0))
    20         {
    21             RayControl();
    22         }
    23         if(flagMove)
    24         {
    25             if(Vector3.Distance(transform.position,mousePos)>0.1)
    26             {
    27                 transform.Translate(transform.worldToLocalMatrix* transform.right * Time.deltaTime*0.5f);
    28             }
    29             else
    30             {
    31                 flagMove=false;
    32             }
    33         }
    34     }
    35  
    36     void RayControl()
    37     {
    38          Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//从Camera发射射线到屏幕
    39          if(Physics.Raycast(ray,out hit))//射线碰撞检测
    40          {
    41              mousePos=hit.point;
    42                mousePos.z=transform.position.z;
    43               targetDir=mousePos-transform.position;//计算到目标点的方向             
    44               Vector3 tempDir=Vector3.Cross(transform.right,targetDir.normalized);
    45              float dotValue=Vector3.Dot(transform.right,targetDir.normalized);
    46              float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//计算夹角
    47              if(tempDir.z < 0)//根据叉乘判断夹角的正负
    48              {
    49                  angle=angle*(-1);
    50              }
    51              if(!float.IsNaN(angle))
    52              {
    53                 transform.RotateAround(transform.position,Vector3.forward,angle);//转向目标点
    54              }
    55              
    56              flagMove=true;
    57         }
    58     }
    59 }

    源码参考:https://files.cnblogs.com/xuling/RoleMove.zip


  • 相关阅读:
    golang书签
    linux每日知识整理
    leetcode动态规划笔记五---双序列型
    leetcode动态规划笔记三---单序列型
    leetcode动态规划笔记二---矩阵型DP
    leetcode动态规划笔记一---一维DP
    linux系统IO操作
    golang知识精要(二)
    ubuntu修改键盘键位映射
    Python 使用 cx_Oracle 第三方库连接操作Oracle数据库
  • 原文地址:https://www.cnblogs.com/xuling/p/2944939.html
Copyright © 2011-2022 走看看