unity小任务二之两物体实现吸铁石效果

 

 

Step 1 create两个object GameObject-3D object-cube 命名为Eric和nana 设置为nana在不断移动靠近  Eric原地等待

Step 2 实现WASD移动nana  做一个plane plane自带碰撞体 nana和Eric放在上面 没有取消gravity 超出plane的范围还是会掉下去的 看不清就上个颜色

code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Move : MonoBehaviour
{
    private Vector3 m_camRot;
    private Transform m_camTransform;
//摄像机Transform
    private Transform m_transform;
//摄像机父物体Transform
    public float m_movSpeed=10;
//移动系数
    public float m_rotateSpeed=1;
//旋转系数
    private void Start()
    {
        m_camTransform = Camera.main.transform;
        m_transform = GetComponent();
    }
    private void Update()
    {
        Control();
    }
    void Control()
    {
        if (Input.GetMouseButton(0))
        {
            //获取鼠标移动距离
            float rh = Input.GetAxis("Mouse X");
            float rv = Input.GetAxis("Mouse Y");
 
            // 旋转摄像机
            m_camRot.x -= rv * m_rotateSpeed;
            m_camRot.y += rh*m_rotateSpeed;
 
        }
 
        m_camTransform.eulerAngles = m_camRot;
 
        // 使主角的面向方向与摄像机一致
        Vector3 camrot = m_camTransform.eulerAngles;
        camrot.x = 0; camrot.z = 0;
        m_transform.eulerAngles = camrot;
 
        // 定义3个值控制移动
        float xm = 0, ym = 0, zm = 0;
 
        //按键盘W向上移动
        if (Input.GetKey(KeyCode.W))
        {
            zm += m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.S))//按键盘S向下移动
        {
            zm -= m_movSpeed * Time.deltaTime;
        }
 
        if (Input.GetKey(KeyCode.A))//按键盘A向左移动
        {
            xm -= m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.D))//按键盘D向右移动
        {
            xm += m_movSpeed * Time.deltaTime;
        }
        if (Input.GetKey(KeyCode.Space) && m_transform.position.y <= 3)
        {
            ym+=m_movSpeed * Time.deltaTime;
        }
        if (Input.GetKey(KeyCode.F) && m_transform.position.y >= 1)
        {
            ym -= m_movSpeed * Time.deltaTime;
        }
        m_transform.Translate(new Vector3(xm,ym,zm),Space.Self);
    }
}

 

Step 3 至于何时才吸在一起 就要时刻检测nana和Eric的距离 距离小于我们原先设定的距离 那么就吸在一起 但是要弄一个nana1 固定好位置 也就是我们吸引之后正主nana的位置  脚本挂在nana上 如果脚本挂不上去 就记得改类名要一致 就在 public class Move(here) : MonoBehaviour 

code:

    public GameObject targetObj;
//声明我们的物体
    public float tar_dis = 10f;
//设置距离
private void Update()
     //多次用
    {
        if (Vector3.Distance(gameObject.transform.position, targetObj.transform.position) > tar_dis)
            //vector3 就是三维向量 也就是个类 和transform组件有很大联系  这条是如果两物体的距离大于设定的距离 那么就还可以继续移动
            Control();
        else
            gameObject.transform.position = targetObj.transform.position;
        //不然就去到nana1设定的位置 也就是吸在一起了

    }

Summary:

1.一个物体用一个坐标代替

2.gameobject和targetobject 原来可以挂在一起 

3.脚本挂不上原因:检查类名是不是一致 或者检查下其他的脚本是不是有错

4.都是白色看不清楚就加个颜色咯 

5.脚本开头一定大写 末尾不用特意加.cs啦

6.collider就是碰撞器 给物体添加物理引擎让它遵循物理规律 碰到一个物体会有变化 然后再添加一个Rigibdody组件 用来给游戏对象添加物理引擎的 有了这个才能生效

6.今天的烤串差点意思 不够美味 下次换一家 

你可能感兴趣的:(unity小任务二之两物体实现吸铁石效果)